凡是过往,皆为序章。
今天15513开始上课了。因为是第二遍学习《CSAPP》,希望对每一章的内容都能认真总结一下。
1. 一个典型系统的硬件组成
可以看到和IO桥相连的有三类总线
- 系统总线: 和处理器的总线接口相连
- 内存总线: 和内存直接相连
- 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. 抽象
计算机系统有下面几个伟大的抽象机制:
- 文件作为IO设备的抽象
- 虚拟内存作为主存和IO设备的抽象
- 指令集体系架构作为处理器的抽象
- 进程抽象
- 时间上抽象处理器
- 空间上抽象虚拟内存
- 虚拟机作为操作系统、程序和进程的整体抽象