CSAPP 第一章 计算机系统漫游

凡是过往,皆为序章。

今天15513开始上课了。因为是第二遍学习《CSAPP》,希望对每一章的内容都能认真总结一下。

1. 一个典型系统的硬件组成

arch.png

可以看到和IO桥相连的有三类总线

  • 系统总线: 和处理器的总线接口相连
  • 内存总线: 和内存直接相连
  • IO总线:和IO设备交互,IO设备和IO总线相连的方式有两种,区别主要在封装方式
    • 控制器:位于主板或者IO设备上的芯片
      • 例如:磁盘控制器,位于主板或者磁盘上
    • 适配器:插在主板插槽上的芯片卡,起到格式转换的作用
      • 例如:显卡,独立于主板且并非IO设备(显示器)的一部分
      • 例如:网卡,独立于主板且并非IO设备(网络)的一部分

考虑从Shell命令行执行一个hello程序,会经历下列步骤:

  • IO设备(键盘)->寄存器->内存:键盘上键入字符串./hello,shell程序通过USB控制器将字符读入寄存器,接着存放到内存中
  • IO设备(磁盘)->内存:键盘上输入回车,shell程序可能通过DMA将可执行文件装载到内存并执行
  • 内存<->寄存器->显示器:处理器开始执行hello程序的指令,输出hello world

很明显,总结这些步骤反映出来的最重要的事实就是

系统花费了大量时间将信息从一个地方移到另一个地方。 由此引出高速缓存和存储层次结构。

2. Amdahl定律

Amdahl定律的思想在于当我们对系统某个部分加速时,对系统整体性能的影响取决于该部分的重要程度和加速程度。

假设系统执行的时间为$T_{old}$,我们加速部分的系统占比为$\alpha$,加速比例为$k$。则系统现在执行时间为$(1-\alpha)T_{old} + \alpha T_{old}/k$。

考虑加速比,其值为时间比的倒数$T_{old}/T_{new}$,即

\[S=\frac{1}{1-\alpha + \frac{\alpha}{k}}\]
  • $1-\alpha$是未加速部分,这部分的运行时间不变。
  • $\frac{\alpha}{k}$是对加速部分的时间进行缩减的效应。

因此,为了显著加速整个系统,需要提升系统相当大部分的速度。因为未加速部分限制了加速比的提升,例如我们对系统60%部分提速3倍,但剩余的40%部分限制了系统加速比不会超过2.5倍,事实上这个例子仅加速了1.667倍。

3. 并发和并行

系统发展的两个驱动力是:

  • 希望处理器做得更快
  • 希望处理器做得更多

为此就要提高系统的并发性。从处理器角度,由高到低,有三个层次的并发:

  • 线程级并发
    • 多处理器:多核
    • 超线程(hyperthreading):处理器的某些硬件使用多个备份,例如寄存器文件、程序计数器
  • 指令级并行
    • 采用流水线技术
    • 若处理器能达到比一个周期更快的执行速率,则称为超标量*(superscalar)
  • 单指令、多数据并行
    • SIMD:单条指令可以产生多个可以并行执行的操作

4. 抽象

计算机系统有下面几个伟大的抽象机制:

abstract.png

  • 文件作为IO设备的抽象
  • 虚拟内存作为主存和IO设备的抽象
  • 指令集体系架构作为处理器的抽象
  • 进程抽象
    • 时间上抽象处理器
    • 空间上抽象虚拟内存
  • 虚拟机作为操作系统、程序和进程的整体抽象