组成原理

Book Notes · CSAPP · Hardware Side

程序员视角的
组成边界

只记组成侧四章:信息表示、机器级程序、处理器结构、存储层次。异常控制流、虚存、系统 I/O、并发在操作系统站 os-site · CSAPP。不跟某一版页码死磕。

02信息表示

同一串比特按编码解释。补码、无符号和 IEEE 754 不要共用一套「溢出」说法。

整数

n 位补码范围 −2n−1~2n−1−1。加减走同一加法器;溢出是同号得异号,不是「最高位有进位」。无符号进位是另一套。

浮点

单精度 1+8+23,偏置 127,与教材里偏置 2n−1 的移码不是同一个数。规格化隐含前导 1。阶码全 0 且尾数非 0 是非规格化数。阶码上溢时,结果取决于符号与舍入方向,可能是 Inf,也可能是最大有限数。

S→EXP→FRAC→对阶 / 舍入
易错:不要写「阶码全 0 就是 0」。也不要把 6.25 的阶码 129 写成 128+2 却声称那是 IEEE 字段。

03机器级程序

编译器把 C 落到 ISA:寄存器、寻址、调用约定。这是指令系统,不是某家汇编器的广告。

寻址与控制流

立即数在指令里;直接寻址给出主存地址;相对寻址用 PC 加位移。CPU 按 PC 取指;非转移时 PC 通常递增,调用、分支、返回、异常都会改控制流。

易错:RISC 常见 Load/Store 与定长,不等于「没有访存指令」或「一定更快」。CISC 可变长、可存储器运算,也不等于过时。

04处理器体系结构

书里的教学处理器把指令拆成 IF ID EX MEM WB 五个阶段。阶段内部才是寄存器传送级的微操作。

顺序与流水

单周期:由当前指令组合译码产生控制信号,经传播延迟后在本周期有效窗口内稳定供数据通路使用。流水线把五个阶段重叠;ALU–ALU 的 RAW 可转发,load-use 仍要停一拍。

IF→ID→EX→MEM→WB

经典按序五级中 WAR/WAW 不出现,关键是按序发射/完成、读在 ID、写在 WB 且写回按程序序。微程序实现里,一条机器指令由一串微指令完成,需逐条访问控存。

易错:加速比不等于级数。控制信号不是「整个时钟内保持不变」这句话能概括的;异常进入规定的特权上下文,原已在相应高特权级则未必再提升。

06存储层次

局部性让小而快的层有效。Cache 按块映射;命中看有效位与标记。

映射与写

直接映射每块只有一个位置,谈不上选哪一行替换。组相联/全相联组满才替换。写回/写直达是写策略,不是映射方式。换入一块叫装入或覆盖,不要把「写回」用在「把新块放进这一行」上。

AMAT = 命中时间 + 缺失率 × 缺失惩罚。TLB 未命中、Cache 未命中和缺页是三种不同层次的事件:前两者不等于缺页异常,也不要写成同一个 miss。TLB 未命中后查页表;Cache 未命中向下一级取块;合法页未驻留才缺页。

章末自测

本页:表示、机器级、处理器、存储层次。对面:异常控制流、虚存、系统 I/O、并发。不要两头重复抄同一章。
五个阶段。微操作是阶段内部的寄存器传送。add 在 MEM 阶段不访问数据存储器,只把 ALU 结果继续往后传。
不能。那是换入/装入(覆盖)。写回专指把脏块写到下一级。