Chapter 1 计算机系统漫游

本文档总结了《CSAPP》中的关键知识点,包括计算机编译过程的四个阶段:预处理、编译、汇编和链接;介绍了计算机硬件系统的主要组成部分:总线、I/O设备、主存和处理器;讨论了缓存的概念及其作用;概述了操作系统的功能和其提供的抽象概念,如进程、虚拟存储器和文件;最后探讨了并发和并行的概念。

此系列博客主要用于学习《CSAPP》过程中的归纳总结,以及备忘之用。

1 计算机编译过程

以下列程序为例说明:

#include <stdio.h>

int main()
{
    printf("hello world\n");
}

编译系统
计算机编译过程分为如图四个部分:

  • 预处理阶段(Preprocessing phase)
    预处理器根据以#开头的指令来修改源程序hello.c–>hello.i

  • 编译阶段(Compilation phase)
    编译器将修改后的文本文件hello.i翻译成文本文件hello.s,它包含一个汇编程序。汇编语言为不同的高级语言的不同编译器,提供了通用的输出语言。例如C编译器和Fortran编译器用相同的汇编语言来产生输出文件。hello.i–>hello.s

  • 汇编阶段(Assembly phase)
    汇编器(as)将hello.s翻译成机器语言指令,将他们打包成一种格式叫做可重定位目标文件(relocatable object program),并将结果放在目标文件hello.o中. hello.o是一个二进制文件,其字节编码机器指令而不是字符,用文本编辑器打开将会得到乱码。hello.s–>hello.o

  • 链接阶段(Linking phase)
    程序中使用了printf()函数,其存在于名为printf.o的目标文件中,链接器(ld)将其和hello.o合并,得到可执行文件。hello.o–>hello

2 计算机硬件系统

CPU:Central Processing Unit 中央处理单元,ALU:Arithmetic/Logic Unit 算术/逻辑单元,PC:Programme Counter 程序计数器,USB:Universal Serial Bus 通用串行总线

  • 总线(Bus)
    贯彻系统的一组电子管道,携带信息字节在各部件之间传递。

  • I/O 设备(I/O Device)
    输入/输出设备是系统和外界的联系桥梁。如上图所示,有四个I/O设备:键盘(Keyboard),鼠标(Mouse),显示器(Display),磁盘(Disk)。每一个I/O设备通过控制器(controller)或者适配器(adapter)和总线相连。两者的区别在于封装方式,控制器是置于设备自身或者系统主板(motherboard)上的芯片组,适配器是一块插在主板卡槽上的卡。不管怎样,都是用来在I/O bus和I/O device之间传递信息的。

  • 主存(Main Memory)
    主存是一个临时的存储设备,在处理器执行程序时,存放程序和所处理的数据。从物理上讲,主存是一组动态随机存取存储器(DRAM,dynamic random access memory)。从逻辑上看,存储器是一个线性的字节数组,每个字节都有其唯一的地址(即数组索引),这些地址是从零开始的。通常来说,组成程序的每条机器指令都由不同数量的字节构成。

  • 处理器(Processor)
    中央处理器,或简称为处理器,是解释(或执行)存放在主存中的指令的引擎.其核心是一个字长(word-size)的存储设备(或寄存器),叫做程序计数器(PC,program counter).任何时刻,pc都指向主存中的一条机器语言指令,所谓的指向就是包含其地址。

    处理器的实现是遵照指令执行模型的,模型是由指令集结构(instruction set architecture)定义的。在此模型中,处理器按照严格的顺序执行指令,执行完毕后更新PC,指向下一条指令,这一条指令和上一条不一定是相邻的。

3 存储设备

存储器等级

此处主要引入缓存(cache)的概念。越大的存储设备速度越慢,越快的存储设备价格越高。一个典型的几百字节的寄存器文件,相对于几十亿字节的主存,处理器读取寄存器数据是主存的100倍,而且随着半导体技术的发展,这种处理器-主存差距(processor-memory gap)还在扩大。加快处理器的运行速度比加快主存的要容易和便宜。

为了应对处理器-主存差距,引入了更小更快的存储设备—缓存。缓存用来临时存放处理器近期可能用到的信息。缓存还分L1、L2、L3,采用静态随机存取存储器(SRAM,static random access memory)的硬件技术实现。上图展示的是计算机的存储等级,往上越小,越快,越贵。最高的是寄存器,其实每个下级都可以看成是上级的缓存。

4 操作系统

计算器系统的分层视图

简单来看,操作系统可以当做是应用程序和硬件之间插入的一层软件。操作系统主要有两个目的:1)防止硬件被失控的应用程序滥用, 2)为应用提供简单统一的机制来操作复杂的且往往不同的低级硬件设备(很好理解,应用开发人员只要针对不同的操作系统来开发就行了)。
操作系统提高的抽象
操作系统是通过几个基本抽象(abstraction)–抽象的概念很重要,之后多有涉及–来实现上述两个目的:进程(processes),虚拟存储器(virtual memory),文件(files).如图所示,文件是I/O设备的抽象,虚拟存储器是主存和I/O设备的抽象,进程是处理器、主存和I/O设备三者的抽象。

  • 进程(processes)
    进程是操作系统对一个正在运行的程序的抽象。多个进程可以在一个系统上并发地运行,每一个看上去是在独占硬件。所说的并发,我们是指一个进程的指令和另一个进程的指令相互交错。操作系统进行这种交错,采用了一种机制叫做上下文切换(context switching)。具体的实现待续。

  • 线程(threads)
    进程不是只有一个数据流的,现代的系统进程实际上包含多个执行单元,叫做线程。具体待续。

  • 虚拟存储器(virtual memeory)
    虚拟存储器是一个抽象,为进程提供了一个假象,即每个进程在独自使用主存。每一个进程看到的是一致的存储器,称为虚拟空间地址(virtual address space)。具体待续。

  • 文件(files)
    文件就是字节序列,仅此而已。每一个I/O设备,包括磁盘、键盘、鼠标、显示器,甚至网络,都可以看成是文件。

5 并发(Concurrency)和并行(Parallelism)

并发用来指一个广泛概念:同时进行多个活动的系统;并行是指用并发来时系统运行的更快。并行可以在计算机的多个抽象层次上运用,下面高亮了由高到低的三个层次:

  • 线程级并发(Thread-Level Concurrency)
    基于进程这个抽象,我们可以设计出同时执行多个程序的系统,这就导致了并发;而使用线程,我们甚至于在一个进程内可以执行多个数据流。

    还有就是单处理器系统(uniprocessor system)和多处理器系统(multiprocessor system)。前者情况下,传统意义上的并发是一种模拟,通过处理器在不同的任务之间切换。而后者虽然在八十年代就用于大规模计算,但由于多核处理器(multi-core processor)超线程(hyperthreading)的出现,现在才普及开来。

    多核处理器,顾名思义就是将多个CPU(核)集成到一个芯片上,下图就是I7处理器的结构,四个核有自己的L1/L2,共享同一个L3作为到主存的接口。
    这里写图片描述

    超线程,有时也叫同时多线程(simultaneous multi-threading),是一种允许单一CPU执行多个控制流的技术。平常的处理器需要20000个时钟周期去在不同线程间转换,而超线程处理器在一个周期内就可以决定执行哪个线程,这可以更好的利用处理资源。

  • 指令级并行(Instruction-Level Parallelism)
    在更低级的抽象中,现代的处理器可以同时执行多个指令,这种性质叫做指令级并行。早期处理器,如1978年的Intel 8086执行单独的指令需要多个(典型的3-10)个时钟周期,更先进的处理器每个周期可以执行2-4个指令。但其实每一条指令从开始到结束,可能需要20或者更多的时钟周期。通过将指令所需的活动分成不同的步骤,处理器硬件也组织成不同的阶段,每个阶段处理一个步骤,这些阶段是可以并行的。

  • 单指令,多数据并行(Single-Instruction,Multiple-Data (SIMD) Parallelism)
    在最低层,许多现代处理器有特殊的硬件,允许一条指令引起多个可以并行执行的操作。

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值