200803
本篇是郑纬民《计算机系统结构》的读书笔记,欢迎各位路过指正!今天把九章全部更新完毕啦。
0. 分章节目录
- 【计算机组成原理】计算机系统结构笔记(1):基本概念
- 【计算机组成原理】计算机系统结构笔记(2):指令系统
- 【计算机组成原理】计算机系统结构笔记(3):存储系统
- 【计算机组成原理】计算机系统结构笔记(4):输入输出系统
- 【计算机组成原理】计算机系统结构笔记(5):标量处理机
- 【计算机组成原理】计算机系统结构笔记(6):向量处理机
- 【计算机组成原理】计算机系统结构笔记(7):互连网络
- 【计算机组成原理】计算机系统结构笔记(8):并行处理机
- 【计算机组成原理】计算机系统结构笔记(9):多处理机
1. 基本概念
- **虚拟计算机:从不同角度所看到的计算机系统的属性是不同的。**计算机系统可分为7个层次。第3级至第6级由软件实现,称为虚拟机。 第0级和第1级属于计算机组成原理,第2级属于计算机系统结构,第3至第5级属于系统软件,第6级属于应用软件。
层次 | 内容 |
---|---|
第6级 | 应用程序 |
第5级 | 高级语言 |
第4级 | 汇编语言 |
第3级 | 操作系统 |
第2级 | 机器语言 |
第1级 | 微程序 |
第0级 | 硬联逻辑 |
- 透明性:本来存在的事物或属性,从某种角度看似乎不存在。
- 系列计算机:相同系统结构,不同组成和实现的一系列计算机系统。
- 计算机系统结构(Amdahl,1964):程序员所看到的计算机系统的属性, 即概念性结构和功能特性。
- 功能特性:数据表示、寻址技术、寄存器组织、指令系统、中断系统、存储系统、处理机工作状态、输入输出系统、信息保护。
1.1 计算机系统的评价标准
- 计算机系统的评价标准:时钟频率( 只表示CPU的指令处理能力)。
- 指令执行速度:MIPS = IPC · Fz。提高IPC:依靠先进系统结构。提高Fz:缩短门电路延迟,依靠技术进步。
- 等效指令速度:加减法50%,乘法15%,除法5%,程序控制15%,其他15%。静态指令使用频度:在程序中直接统计。动态指令使用频度:在程序执行过程中统计。
- 核心程序法:把应用程序中使用最频繁的那部分程序作为评价计算机性能的标准程序称为基准测试程序。整数测试程序:Dhrystone。1VAX MIPS=1757 Dhrystones/Second。浮点测试程序:Linpack。用 MFLOPS表示。通常使用SPEC基准程序 。
- 峰值速度:峰值指令速度:MIPS、GIPS、TIPS,浮点峰值速度:MFLOPS、GFLOPS、TFLOPS。
1.2 计算机存储系统
层次 | 内容 |
---|---|
第1级 | Register Files(寄存器堆) |
第2级 | Lookahead(先行缓冲站) |
第3级 | Cache(高速缓冲存储器) |
第4级 | Main Memory(主存储器) |
第5级 | Online Storage(联机存储器) |
第6级 | Off-line Storage(脱机存储器) |
- 第1~3层在CPU芯片内部,第4层在主板上,第5层在机箱内(硬盘),第6层依靠手工加载。
- 寻址空间:程序员可以使用的存储器容量。Pentium处理机的寻址空间为4GB,与实际配置的存储器容量无关。
- 存储容量:实际物理存储器的大小,通常用KB、MB、GB等表示。
- 主存储器的种类:SDRAM、RDRAM、DDR。
- 价格标准:摩尔定理:速度每10年左右提高100倍,但价格基本维持不变。硬件在整个计算机系统价格中所占的比例在下降,软件所占的比例在上升。
- 软硬件的关系:硬件实现:速度快、成本高;灵活性差、占用内存少;软件实现:速度低、复制费用低;灵活性好、占用内存多。
1.3 计算机性能改进
- 改进性能考虑的软硬件取舍。基本方法:加快经常性事件的执行速度。
- Amdahl定律:系统中某一部件由于采用更快的执行方式后,整个系统性能的提高与这种执行方式的使用频率或占总执行时间的比例有关。 F e F_e Fe表示可改进部分所占的百分比。 S e S_e Se表示改进后,可改进部分的加速比
S n = T 0 T n = 1 ( 1 − F e ) + F e S e S_n = \frac{T_0}{T_n} = \frac{1}{(1-F_e)+\frac{F_e}{S_e}} Sn=TnT0=(1−Fe)+SeFe1 - 改进性能的主要途径:面向目标代码改进(用一条指令代替一串指令),面向高级语言和编译程序改进(增强对高级语言和编译程序支持的指令功能),面向操作系统改进。
- 软件兼容性设计方法:兼容种类:向后兼容,向前兼容,向上兼容,向下兼容。 向后兼容必须做到,向上兼容尽量做到。向前兼容和向下兼容,可以不考虑。
- 系列机方法:限制了计算机系统结构的发展。
- 模拟与仿真:在一台现有的计算机上实现另一台计算机的指令系统。(全部用软件实现的叫模拟,用软件、硬件、固件混合实现的叫仿真)。
- 统一高级语言:采用同一种不依赖于任何具体机器的高级语言编写系统软件和应用软件。
- 目标代码的并行编译技术:一种机器的目标代码重新编译到另一种机器的并行目标代码(动态代码转换、静态重编译)。
1.4 计算机系统的发展
-
冯·诺依曼结构(Van Nenmann,1946):
-
特点: 存储程序、运算器为中心、集中控制。现代处理机对冯·诺依曼结构的改进:存储器为中心,总线结构,分散控制。
-
三总线结构:
-
非冯计算机的发展:非指令驱动。
-
器件发展的特点:集成度迅速提高、提高速度空间不大、价格直线下降、可靠性越来越高。
-
器件种类:通用片(逻辑关系确定)、 现场片:可以一次或多次改写逻辑关系、用户片:各种专用芯片、半用户片:门阵列片等。在多个层次上,算法影响着系统结构。
1.5 处理机性能分类
-
按处理机个数和种类划分:单处理机、并行处理机、多处理机、分布处理机、关联处理机。
-
按所使用的器件划分:目前的绝大部分计算机系统是VLSI计算机。
-
佛林分类法(Flynn,1966):按照指令流和数据流的多倍性特征进行分类:单指令流单数据流 SISD,单指令流多数据流 SIMD(多个PU按一定方式互连,在同一个CU控制下,对各自的数据完成同一条指令规定的操作),多指令流单数据流 MISD,多指令流多数据流 MIMS。
-
库克分类法(Kuck,1978):按控制流和执行流分类。单指令流单执行流SISE,单指令流多执行流SIME,多指令流单执行流MISE,多指令流多执行流MIME。
-
冯泽云分类法(冯泽云,1972):用最大并行度对计算机系统进行分类。同时处理的字宽为n,位宽为m。表示方法:处理机名(m,n) 。字串位串WSBS,字并位串WPBS,字串位并WSBP,字并位并WPBP。
-
汉德勒分类法(Handler,1977),也就是ESC分类法。根据并行度和流水线分类。程序级k:程序控制部件(PCU)的个数。操作级d:算术逻辑部件(ALU)或处理部件(PU)的个数。逻辑级w:每个算术逻辑部件包含的逻辑线(ELC)的套数。表示方法:t(系统型号)=(k,d,w)。 为了表示流水线,采用:t(系统型号)=(k×k’,d×d’,w×w’)
2. 指令系统
2.1 数据表示
- 如果有向量数据表示,只需要一条指令。用软件和硬件结合的方法实现新的数据表示。
- 运算器中的累加器需要另外增加的长度称为警戒位。不设置警戒位,可能出现很大的误差用途:用于左规格化时移入尾数有效字长内、用于舍入。乘法运算只需要设置一个警戒位。除法运算不必设置警戒位。
- 一般处理机中的数据表示方法:带标志符的数据表示法、数据描述符表示法。
2.2 寻址技术
-
并行存储器的编址技术:
- 高位交叉编址:主要用来扩大存储器容量。
- 低位交叉编址:主要是提高存储器速度。
-
输入输出设备的编址:
- 一台设备一个地址:通过指令来区分地址,地址内部区分地址。
- 一台设备两个地址:数据寄存器、状态或控制寄存器。多个编址寄存器共用同一个地址的方法:依靠地址内部来区分,适用于被编址的寄存器的长度比较短,“下跟法”隐含编址方式,必须按顺序读写。
- 一台设备多个地址:增加编程的困难
2.3 指令格式优化
- 操作码的三种编码方法:固定长度、Huffman编码、扩展编码,节省存储空间。
- 固定长操作码:定长定域,但是浪费信息量。
- Huffman编码法:固定长编码相对于Huffman编码的信息冗余量:
R = 1 − − ∑ i = 1 n p i ⋅ log 2 p i ∣ log 2 n ⌉ R=1-\frac{-\sum_{i=1}^{n} p_{i} \cdot \log _{2} p i}{\left.\mid \log _{2} n\right\rceil} R=1−∣log2n⌉−∑i=1npi⋅log2pi
-
扩展编码法:由固定长操作码与Huffman编码法相结合形成。
-
地址码的优化表示:一般机器采用多寄存器结构的二地址指令是最理想的。
- 如果强调硬件结构简单,并且以连续运算为主,宜采用一地址结构。
- 对于以向量、矩阵运算为主的处理机,最好采用三地址结构。部分RISC处理机也采用三地址指令。
- 对于解决递归问题为主的处理机,宜采用零地址结构。编程容易、节省程序存储量。
- 缩短地址码长度的方法:用一个短地址码表示一个大地址空间,用间址寻址方式缩短地址码长度,用变址寻址方式缩短地址码长度,用寄存器间接寻址方式缩短地址码长度。
-
指令系统的功能设计:通用计算机必须有5类基本指令:数据传送类指令运算类指令、程序控制指令、输入输出指令、处理机控制和调试指令、数据传送类指令。
- 运算类指令 : 考虑四个因素的组合:操作数灯,数据表示,数据长度,数据存储设备。一般机器中要设置10条移位指令。
- 程序控制指令:转移条件:零(Z)、正负(N)、进位©、溢出(V)及其组合。由条件转移指令之前的指令产生条件码由条件转移指令本身产生转移条件。
- 复合条件转移指令:代替2条指令,首先进行运算,并根据运算的结果决定是否转移不需要条件码,与高级语言一致。
- 循环控制指令:用1条指令完成循环的控制
- 隐含转移指令应用场合:用于特殊的IF…THEN…结构中,THEN部分只有一条指令实现方法:把IF条件取反,如果取反后的条件成立则取消下条指令,否则执行下条指令。程序执行效率高。
- 程序调用和返回指令: 本身可以不带条件,也可以带有条件
- 中断控制指令:开中断关中断、改变屏蔽、中断返回、自陷等。
- 输入输出指令:启动、停止、测试设备,数据输入、输出等。采用单一的直接寻址方式。在多用户或多任务环境下,输入输出指令属于特权指令。
- 处理机控制和调试指令:硬件调试指令(开关状态读取等)、软件调试指令(断点设置、跟踪,自陷指令等)
- 指令系统的性能:完整性、规整性、对称性、均匀性、高效率、兼容性。
-
指令系统的优化设计:CISC(1960-1970),RISC(1970-),VLIW(1980-)
- 超长指令字(VVLIW):一种显式指令级并行指令系统二维程序结构,指令级并行度高。
- RISC的关键技术:延时转移技术、指令取消技术、重叠寄存器窗口技术、指令流调整技术,以硬件为主固件为辅。
- 采用延迟转移技术的两个限制条件:被移动指令在移动过程中与所经过的指令之间没有数据相关。被移动指令不破坏条件码,至少不影响后面的指令使用条件码。
2.4 VLIW指令系统
-
一条指令中包含有多个能够同时执行的操作(Fisher,1981)。在一条VLIW指令中包含有多个相同或不同的操作字段,每个操作字段能够分别独立控制各自的功能部件同时工作。
-
超标量处理机:依靠设置多条指令流水线,并通过同时发射多条指令来提高处理机的运算速度。
-
超流水线处理机:通过分时使用同一条指令流水线的不同部分来提高处理机的运算速度。
-
采用显式并行指令计算方式:每一行上的所有操作组成一条超长指令,之间没有数据相关、控制相关和功能部件冲突,这些指令可以在VLIW处理机上同时执行。特点:指令级并行度高、硬件结构规整简单度窗口及多发射机制等。
-
VLIW处理机:安腾处理机、DAISY处理机、 Crusoe处理机。
-
目标代码兼容问题:动态代码转换技术:IBM公司开放源代码DAISY,Transmeta公司推出了“代码映射软件”。
-
可执行代码的并行编译技术:
- 动态重编译:DAISY和Code Morphing。
- 静态重编译:串行目标代码——中间表示形式——数据相关性分析——并行调度——并行目标代码。
3. 存储系统
3.1 存储系统原理
- 存储器的主要性能:速度、容量、价格。
- 在一般计算机系统中有两种存储系统:
- Cache存储系统:由Cache和主存储器构成,对应用程序员透明, 主要目的:加快存储速度。
- 虚拟存储系统:由主存储器和硬盘构成,对系统程序员以上均透明,主要目的:扩大存储器容量
- 存储系统的速度:存储系统的访问效率:
e = T 1 T = T 1 H ⋅ T 1 + ( 1 − H ) ⋅ T 2 = 1 H + ( 1 − H ) ⋅ T 2 T 1 = f ( H , T 2 T 1 ) e=\frac{T 1}{T}=\frac{T_{1}}{H \cdot T_{1}+(1-H) \cdot T_{2}}=\frac{1}{H+(1-H) \cdot \frac{T_{2}}{T_{1}}}=f\left(H, \frac{T_{2}}{T_{1}}\right) e=TT1=H⋅T1+(1−H)⋅T2T1=H+(1−H)⋅T1T21=f(H,T1T2)
访问效率主要与命中率和两级存储器的速度之比有关。
- 提高存储系统速度的两条途径:提高命中率H、存储器的速度不要相差太大
- 采用预取技术提高命中率:不命中时,把M2存储器中相邻多个单元组成的一个数据块取出来送入M1存储器中。
H ′ = H + n − 1 n H^{\prime}=\frac{H+n-1}{n} H′=nH+n−1
其中: H ′ H^\prime H′是采用预取技术之后的命中率, H H H是原来的命中率, n n n为数据块大小与数据重复使用次数的乘积
- 并行访问存储器:把m字w位的存储器改变成为m/n字n×w位的存储器。逻辑实现:把地址码分成两个部分,一部分作为存储器的地址,另一部分负责选择数据。
- 交叉访问存储器:
- 高位交叉访问存储器:用地址码的高位部分区分存储体号。存储器的地址: A = m × k + j A=m×k+j A=m×k+j。
- 低位交叉访问存储器:提高存储器访问速度,用地址码的低位部分区分存储体号。存储器地址A的计算公式为: A = n × j + k A=n×j+k A=n×j+k。
- 并行存储器的加速比:
N = ∑ k = 1 n k ⋅ p ( k ) N=\sum_{k=1}^{n} k \cdot p(k) N=k=1∑nk⋅p(k)
N N N是每个存储周期能够访问到的平均有效字的个数。定义转移概率为 g g g,即读出的是转移指令,且转
移成功的概率。于是有
N = 1 − ( 1 − g ) n g N=\frac{1-(1-g)^{n}}{g} N=g1−(1−g)n
- 无冲突访问存储器:
- 一维数组的无冲突访问存储器: 按连续地址访问,没有冲突。实现方法: 存储体的个数取质数,且n大于等于向量长度。
- 二维数组的无冲突访问存储器:一个n×n的二维数组,按行、列、对角线和反对角线访问,并且在不同的变址位移量情况下,都能实现无冲突访问。体号地 A = ( 2 P i + j + k ) m o d m A = (2^P i+j+k) \:\: mod\:\:m A=(2Pi+j+k)modm。列元素顺序存储,行元素按地址取模顺序存储
- 二维数组的无冲突访问存储器之二:对于任意一个n×n的数组,如果能够找到满足 n = 2 2 P n=2^{2P} n=22P关系的任意自然数p,则这个二维数组就能够使用n个并行存储体实现按行、列、对角线和反对角线的无冲突访问。体号地址 A = 2 ( i L ⊕ j H ) + ( i H ⊕ i L ⊕ j L ) A = 2(i_L \oplus j_H)+(i_H\oplus i_L\oplus j_L) A=2(iL⊕jH)+(iH⊕iL⊕jL)。在执行并行读和写操作时需要借助比较复杂的对准网络。
3.2 虚拟存储器
- Kilbrn等人于1961年提出。
- 造成虚拟存储器速度降低的主要原因:(1) 要访问主存储器必须先查段表或页表;(2) 可能需要多级页表。页表级数:
g = ⌈ log 2 N v − log 2 N p log 2 N p − log 2 N d ⌉ g=\lceil\frac{\log 2 N v-\log 2 N p}{\log _{2} N p-\log _{2} N d}\rceil g=⌈log2Np−log2Ndlog2Nv−log2Np⌉
其中: N v Nv Nv为虚拟存储空间大小, N p Np Np为页面的大小, N d Nd Nd为一个页表存储字的大小。
-
目录表:用一个小容量高速存储器存放页表,但是可扩展性比较差。
-
快慢表:当快表中查不到时,从主存的慢表中查找;相联访问实现困难,速度低。
-
散列函数:把相联访问变成按地址访问。散列函数 A h = H ( P v ) Ah=H(Pv) Ah=H(Pv),采用散列变换实现快表按地址访问。
- 避免散列冲突:采用相等比较器;
- 地址变换:相等比较与访问存储器同时进行。
-
预取式:在程序重新开始运行之前,把上次停止运行前一段时间内用到的页面先调入到主存储器,然后才开始运行程序。
3.3 高速缓冲存储器
-
地址映象:把主存中的程序按照某种规则装入到Cache中,并建立主存地址与Cache地址之间的对应关系。
-
地址变换:当程序已经装入到Cache之后,在程序运行过程中,把主存地址变换成Cache地址。
-
全相联映象及其变换:主存的任意一块可以映象到Cache中的任意一块。映象关系有 C b × M b C_b \times M_b Cb×Mb种。用硬件实现非常复杂。
-
直接映象及其变换:主存储器中一块只能映象到Cache的一个特定的块中。Cache地址 b = B m o d C b b = B\:\:mod\:\:C_b b=BmodCb。b为Cache块号,B是主存块号, Cb是Cache块数。Cache地址与主存储器地址的低位部分完全相同。
-
组相联映象及其变换: 主存和Cache按同样大小划分成块和组。存和Cache的组之间采用直接映象方式。在两个对应的组内部采用全相联映象方式。但是实现难度和造价要比直接映象方式高。
- 如果有相等的,表示Cache命中;如果全部不相等,表示Cache没有命中。
- 提高Cache访问速度的一种方法:用多个相等比较器来代替相联访问。
-
位选择组相联映象及其变换
- 映象规则:主存和Cache都按同样大小分块,Cache在分块的基础上再分组,主存按照Cache的组容量分区。主存的块与Cache的组之间采用直接映象方式,主存中的块与Cache中组内部的各个块之间采用全相联映象方式。
- 与组相联映象方式比较:实现起来容易,在块表中存放和参与相联比较的只有区号E
-
段相联映象及其变换
- 映象规则:主存和Cache都按同样大小分块和段,段之间采用全相联映象方式。段内部的块之间采用直接映象方式。
- 把读出的段号s与主存地址的段内块号b及块内地址w拼接起来得到Cache地址,实现较简单。但是当发生段失效时,要把本段内已经建立起来的所有映象关系全部撤消。
-
Cache替换算法:比较对法需要的触发器个数为:
C G b 2 = G b ⋅ ( G b − 1 ) 2 C_{G_{b}}^{2}=\frac{G_{b} \cdot\left(G_{b}-1\right)}{2} CGb2