一 :认识计算机的基础组成部分
1.1 I/O总线
贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数(即字长)是一 个基本的系统参数,各个系统中都不尽相同。现在的大多数机器字长要么是4个字节(对应32 位系统),要么是8个字节(对应64位系统)。
1.2 I/O设备
简单来说,I/O(输入/输出)设备是系统与外部世界的联系通道。
1.2.1 常见的I/O设备:链接在USB控制器上的键盘和鼠标,图形适配器链接的显示器,以及磁盘控制器链接的磁盘驱动器。编译后的可执行程序hello二进制文件就存放在磁盘上。以及网络适配器上的网卡,还有声卡等待都是I/O设备。
1.2.2 总线与I/O设备通过控制器与适配器链接:每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器和适配器之间的区别主要在于它们的封装方式。控制器是I/O设备本身或者系统的主印制电路板(通常称作 主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是 在I/O总线和I/O设备之间传递信息。
1.3 主存 DRAM
就是我们通常说的内存。主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始的。一般来说,组成程序的每条机器指令都由不同数量的字节构成。与C程序变量相对应的数据项的大小是根据类型变化的。比如,在运行Linux的x86-64机器上,short类型的数据 需要2个字节,int和float类型需要4个字节,而long和double类型需要8个字节。
1.4 处理器 CPU
可以理解为解释(或执行)存储在主存中指令的引擎。
1.4.1 程序计数器PC : 处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时 刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令, 再更新程序计数器,使其指向下一条指令, 而这条指令并不一定和在内存中刚刚执行的指令相邻。
1.4.2 寄存器文件(register file) 和 算术逻辑单元ALU :寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个 寄存器都有唯一的名字。ALU是复制算术运算的逻辑单元,主要用来计算新的数据和地址值。
1.4.3 CPU的主要操作。
• 加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容。
• 存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。
• 操作:把两个寄存器的内容复制到ALU, ALU对这两个字做算术运算,并将结果 存放到一个寄存器中,以覆盖该寄存器中原 来的内容。
• 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖 PC中原来的值。
二 :计算机中存储设备的层级结构,以及为什么需要高速缓存
2.1 什么是高速缓存
2.1.1 不同的存储单元效率差距巨大: 比如说,一个典型系统上的磁盘可能比主存大10倍,但是对处理器而言,从磁盘驱动器上读取一个字的时间开销要比从主存中读取的开销大1000万倍。类似地,一个典型的寄存器文件只存储几百字节的信息,而主存里可存放几十亿字 节。然而,处理器从寄存器文件中读数据比从主存中读取几乎要快10倍。
2.1.2 为什么需要高速缓存:针对这种处理器与主存之间的差异,系统设计者釆用了更小更快的存储设备,称为高 速缓存存储器(cache memory,简称为cache或高速缓存),作为暂时的集结区域,存放处 理器近期可能会需要的信息。
hello程序的机器指令最初是存放在磁盘上,当程序加载时,它们被复 制到主存;当处理器运行程序时,指令又从主存复制到处理器。相似地,数据串“hello, world/n”开始时在磁盘上,然后被复制到主存,最后从主存上复制到显示设备。从 程序员的角度来看,这些复制就是开销,减慢了程序“真正”的工作。而高速缓存区加速了这一过程。
2.1.3 L1,L2和L3缓存 : 位于处理 器芯片上的L1高速缓存的容量可以达到数万字节,访问速度几乎和访问寄存器文件一样 快。一个容量为数十万到数百万字节的更大的L2高速缓存通过一条特殊的总线连接到处理器。进程访问L2高速缓存的时间要比访问L1高速缓存的时间长5倍,但是这仍然比访 问主存的时间快5~10倍。L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM) 的硬件技术实现的。比较新的、处理能力更强大的系统甚至有三级高速缓存:Ll、L2和 L3。
系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的局 部性原理,即程序具有访问局部区域里的数据和代码的趋势。通过让高速缓存里存放可能 经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。
2.2 存储设备的层级结构
2.2.1 多层次的存储结构:在这个层次结构中,从上至下,设备的访问速度越来越慢、容量越来越大,并且每字节的造价也越来越便宜。寄存器文件在层次结 构中位于最顶部,也就是第。级或记为L0。这里我们展示的是三层高速缓存L1到L3, 占据存储器层次结构的第1层到第3层。主存在第4层,以此类推。
2.2.2 存储结构的主要思想: 存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。因此, 寄存器文件就是L1的高速缓存,L1是L2的高速缓存,L2是L3的高速缓存,L3是主存 的高速缓存,而主存又是磁盘的高速缓存。在某些具有分布式文件系统的网络系统中,本 地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。
正如可以运用不同的高速缓存的知识来提高程序性能一样,程序员同样可以利用对整 个存储器层次结构的理解来提高程序性能。