第1章 计算机系统漫游

1 信息就是位 + 上下文

  
  系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们讲到这些数据对象时的上下文。比如,在不同上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或机器指令。

2 程序被其他程序翻译成不同的格式

  
  C语言从源文件到翻译成可执行目标文件,有4个阶段:预处理、编译、汇编、链接。

3 了解编译系统如何工作是大有益处的

  
  益处:

  • 优化程序性能;
  • 理解链接时出现的错误;
  • 避免安全漏洞。

4 处理器读并解释储存在内存中的指令

4.1 系统的硬件组成

  
  总线
  贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常被设计成传送"字"。"字"的字节数各个系统不尽相同,大多数32位是4字节,64位是8字节。
  
  I/O设备
  I/O(输入/输出)设备:是系统与外部世界的联系通道,包括键盘、鼠标、显示器、磁盘(存储数据和程序)。每个I/O设备都通过一个控制器或适配器与I/O总线相连。
  控制器:I/O设备本身或者系统的主印制电路板(主板)上芯片组。
  适配器:一块插在主板插槽上的卡。二者功能都是在I/O总线和I/O设备之间传递信息。
第1章 计算机系统漫游

主存
  主存:是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上说,主存是一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),从0开始。
  
  处理器
  *处理单元(cpu):简称处理器,是解释(或执行)存储在主存中指令的引擎,其核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC),在任何时刻,PC都指向主存中的某条机器语言指令(即PC保存了此指令的地址)。
  从系统通电到断电,处理器不断执行PC指向的指令,执行后更新PC,指向下一条指令(并不一定相邻)。这些指令主要围绕:主存、寄存器文件(register file)、和算术/逻辑单元(ALU)进行。
  寄存器文件(register file):是由一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字,如ax、bx、cs、sp等。
  ALU计算新的数据的地址值。
  CPU在指令的要求下可能会执行以下操作:

指令 含义
加载 从主存复制一个字节或字到寄存器,以覆盖寄存器原来的内容。 mov ax, ds:[0]
存储 从寄存器复制一个字节或者字到主存的某个位置,以覆盖此位置上原来的内容。 mov ds:[0], ax
操作 把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。 add ax, bx
跳转 从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。 jmp 2ae3:3,修改cs:ip的值,3就是要放到PC中的数据

我们将处理器的指令集架构和微体系结构 区分开来,指令集架构描述的是每条机器代码指令的效果,微体系结构描述的是处理器实际上是如何实现的。

4.2 运行hello程序

  
  [ ] 待截图

5 调整缓存至关重要

  
  运行hello程序的过程:

  • 计算机从磁盘读取编译后的hello程序到主存;
  • 当cpu运行程序时,将指令从主存复制到cpu(运行一条,复制一条);
  • 也会将hello world这个数据复制到cpu;
  • 最后还会从主存复制到显示设备。
  • 运行一个程序会进行很多复制步骤,这个就是开销,所以要尽量加快这些复制操作的完成。

  
  高速缓存存储器(cache memory,简称cache或高速缓存):用于存放处理器近期可能会需要的信息,因为读取数据的速度:寄存器文件速度 ≈ L1高速缓存 = 5倍L2高速缓存 = 10倍主存,容量:寄存器文件速度< L1高速缓存 < L2高速缓存数据 < 主存。
L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)

6 存储设备形成层次结构

  
  存储器层次结构的主要思想是上一层的存储器作为主低一层存储器的高速缓存。因此,L1是L2的高速缓存,L2是L3的高速缓存…。

第1章 计算机系统漫游

7 操作系统管理硬件

  
  所有应用程序都不能直接访问处理器、主存、I/O设备,必须通过操作系统提供的服务。  
  操作系统的两个基本功能:(1)防止硬件被失控的应用程序滥用;(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。操作系统通过(进程、虚拟内存和文件)这几个基本的抽象概念来实现这两个功能。

第1章 计算机系统漫游

文件是I/O的抽象:输入和输出数据的最终结果是文件。
  虚拟内存是对主存和磁盘I/O设备的抽象:怎么说?
  进程是对处理器、主存、和I/O设备的抽象:怎么说?
  第1章 计算机系统漫游

7.1 进程

  
  进程是操作系统对一个正在运行运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。
  并发运行:一个进程的指令和另一个进程的指令是交错执行的。
  上下文切换:在任何一个时刻,单处理器系统都只能执行一个进程的代码,当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程。上下文包括许多信息,如PC和寄存器文件的当前值,以及主存的内容。
  操作系统内核:从一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,如读写文件,它就执行一条特殊的系统调用指令,将控制权传递给内核,然后内核执行被请求的操作并返回应用程序。
  第1章 计算机系统漫游

7.2 线程

  
  一个进程实际可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

7.3 虚拟内存

  
  虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存,每个进程看到的内存都是一致的,称为虚拟地址空间。地址空间底部地址为0,顶部最大。
  每个进程看到的虚拟地址空间由大量准确定论的区构成,每个区有专门的功能,从下往上依次是:

  • 程序代码和数据;
  • 堆;
  • 共享库;
  • 栈;
  • 内核虚拟内存:顶部区域是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。
    第1章 计算机系统漫游

7.4 文件

  
  文件就是字节序列,每个I/O设备,包括磁盘、键盘、显示器,甚至网络,都可以看成是文件。系统中的所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。

8 系统之间利用网络通信

  
  当系统从主存复制一串字节互网络适配器,数据流经过网络到达另一台机器,而不是比如说到达本地磁盘驱动器。相似地,系统可以读取从其它机器发送来的数据,并把数据复制到自己的主存。
  截图

9重要主题

9.1 Amdahl定律

  
  Amdahl定律:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度,要想显著加速整个系统,必须提升全系统中相当大的部分的速度。
  假设系统运行1步骤的时间占总时间的比例为α,此步骤的运行速度提高了k倍,Told/Tnew=1/[(1α)+α/k]T_{old} / T_{new} = 1/[(1 - α) + α / k],当k无限大时,则 Told/Tnew1/(1α)T_{old} / T_{new} ≈ 1/ (1 - α)

9.2 并行和并发

  
  对于计算机,有两个驱动进步的持续动力:想让计算机做得更多(并行),和想让计算机运行得更快(并发)。
  并发:指一个同时具有多个活动的系统,比如眼睛一边看电视,一边看手机,其实是不断切换着来的。
  并行:指用并发来使一个系统运行得更快,比如一边坐公交,一边听音乐,是同时进行的。
  
  按照系统层次结构中由高到低的顺序强调三个层次:

1. 线程级并发
  单处理器系统的并发:处理器在某一时间只能处理一个进程,所显示的多个进程同时进行,只是处理器在不断切换。
  多核处理器:是将多个cpu(核)集成到一个集成电路芯片上。典型的多核处理器的每个核心都有自己的L1和L2高速缓存,其中L1高速缓存分为两个部分——数据缓存和指令缓存,所有的核共享更高层次的调整缓存,以及到主存的接口。
  超线程:又称同时多线程,这个是真正做到一个cpu同时进行多个线程,它涉及cpu某些硬件有多个备份,比如PC和寄存器文件,而其它的硬件部分只有一份,比如执行浮点算术运算的单元。超线程器可以在单个周期的基础上决定要执行哪一个线程。
  2. 指令级并行
  指令级并行:在较低的抽象层次上,现代处理器可以同时执行多条指令的属性。
  以前需要3-10个时钟周期来执行一条指令。现代处理器可以保持1个时钟周期2-4条指令的执行速率。
  超标量处理器:处理器可以达到比一个周期一条指令更快的执行速率。
  3. 单指令、多数据并行
  单指令、多数据:即SIMD并行,在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作。

9.3 计算机系统中抽象的重要性

  
  虚拟机:它提供对整个计算机的抽象,包括操作系统、处理器和程序。

10 小结

  
  计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位,依据上下文有不同的解释。程序被其它程序翻译成不同的形式,开始时是ascii文本,然后被编译器和链接器翻译成二进制可执行文件。
  处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O设备和cpu寄存器之间复制数据,所以将系统中的存储设备划分成层次结构——cpu寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存的磁盘存储器。在层次模型中,位于更高层的存储设备比低层的存储设备要更快,单位比特造价也更高。较高层次的存储设备可以作为较低层次设备的高速缓存。
  操作系统内核是应用程序和硬件之间的媒介,提供了三个基本抽象:文件是对I/O设备的抽象;虚拟内存是对主存和磁盘的抽象;进程是处理器、主存和I/O设备的抽象。
  从特殊系统的角度看,网络就是一种I/O设备。