README · computer-organization

计算机组成原理

计算机组成原理研究的是:计算机硬件如何表示数据、执行指令、搬运数据,并把这些能力组合成可运行程序的基础。

对 CS 学生来说,它帮助你理解 CPU、缓存、内存、二进制、编码、浮点误差、IO 性能、并发共享为什么会影响程序。

计算机组成原理系列封面

存储层次结构

本模块适合写成的博客问题

问题对应章节
为什么计算机里所有东西最终都是 bit,但意义完全不同?01 二进制、数据表示与存储单位
为什么两个正数相加会变成负数?02 整数、补码与溢出
为什么小数计算会出现微小误差?03 浮点数
一条指令从哪里来,又在哪里完成?04 CPU 与指令执行
为什么顺序访问比随机访问快很多?06-07 存储层次结构与 Cache
为什么 IO 慢时 CPU 可能并不忙?08-09 总线、外设、IO、中断与 DMA

学习路线

顺序章节核心问题
00从 0 开始理解计算机组成原理计算机如何从电路执行到程序
01二进制、数据表示与存储单位数字、字符、地址在机器里怎么表示
02整数、补码与溢出为什么整数会溢出,补码为什么好用
03浮点数为什么 0.1 + 0.2 不精确
04CPU 与指令执行取指、译码、执行、访存、写回如何组成一次执行
05寄存器、ALU 与控制器CPU 内部如何保存临时数据、计算和发出控制信号
06存储层次结构寄存器、Cache、内存、磁盘为什么分层
07Cache 原理局部性、缓存行、替换、写策略
08总线、外设与 IO数据如何在 CPU、内存和设备之间移动
09中断与 DMA设备如何通知 CPU,如何不靠 CPU 搬完整块数据
10硬件视角的性能模型从 CPU、内存、Cache、IO 解释程序快慢

本模块固定观察点

  1. 数据在硬件里用什么位模式表示。
  2. CPU 如何一步步执行指令。
  3. 数据从哪里来、到哪里去、经过哪些缓存。
  4. 硬件限制如何影响软件性能。

读完本模块要形成的底层直觉

组成原理不是为了背硬件名词,而是为了把很多软件现象落到可解释的物理和结构约束上:

软件现象组成原理里的解释方向
整数突然变负固定位宽、补码、溢出
小数比较不相等二进制浮点近似、舍入误差
顺序扫描比随机访问快空间局部性、缓存行、预取
多线程计数性能差原子操作、缓存一致性、伪共享
IO 慢但 CPU 不忙CPU 在等待设备、内核、总线、存储介质
程序第一次运行慢,第二次快缓存、页缓存、预热
高负载下延迟突然变差队列、缓存失效、内存带宽、上下文切换

读的时候始终追问:

这份数据在哪里?
CPU 要怎样拿到它?
拿到之后用什么电路或指令处理?
结果写回哪里?
中间有没有等待、复制、缓存失效或竞争?

延伸阅读