一、数据与编码
1. 进位计数制转换
R进制 → 10进制:N = Σ dᵢ × Rⁱ (按权展开)
10 → R:整数部分除R取余(逆序),小数部分乘R取整(顺序)
2 ↔ 8/16:3位二进制=1位八进制;4位二进制=1位十六进制
技巧:二进制转十六进制从小数点向两侧每4位一组,不足补0。
2. 机器数:原 / 反 / 补 / 移码(n位,含1位符号)
正数:原 = 反 = 补
负数·反码 = 原码符号位不变、数值位取反
负数·补码 = 反码 + 1;或"原码数值位从右起首个1及其右不变、其左取反"
移码 = 补码符号位取反(整数移码 = 真值 + 2ⁿ⁻¹ 偏移)
补码表示范围:−2ⁿ⁻¹ ~ +(2ⁿ⁻¹−1);原/反码:−(2ⁿ⁻¹−1) ~ +(2ⁿ⁻¹−1)。补码多表示一个"−2ⁿ⁻¹"(100…0)。
📌 移码只用于表示阶码,便于浮点数阶码比较(全0最小、全1最大)。
3. 定点数(纯小数/纯整数)
定点小数范围:−1 ≤ x ≤ 1 − 2⁻ⁿ(补码,n位含符号)
溢出(双符号位/模4补码):结果符号位 01=正溢,10=负溢;00/11=正常
单符号位溢出:最高位进位 ⊕ 次高位进位 = 1 → 溢出
4. 浮点数(IEEE 754)
单精度(32):1符号 + 8阶码(E,偏置127) + 23尾数(M,隐含1)
双精度(64):1 + 11(E,偏置1023) + 52
规格化真值 = (−1)^S × (1.M) × 2^(E−偏置) (E非全0非全1)
阶码全0:非规格化 = (−1)^S × (0.M) × 2^(1−偏置);全1:±∞/NaN
⚠ 阶码用移码存但偏置是 127/1023,尾数用原码隐含整数1。比较大小时先比阶码(高位),再比尾数。阶码对阶时"小阶向大阶看齐",尾数右移。
5. 校验码
海明码:校验位k满足 2ᵏ ≥ n + k + 1(n=信息位长)
校验位放在 2ⁱ 位置(1,2,4,8…);每位数据由若干校验位负责(其下标=各2的幂之和)。纠错:各校验位异或结果组成错误位位置。
CRC:被除数=信息位左移r位(r=G(x)阶),模2除生成多项式G(x),余数(补r位)接在末尾
✅ 校验能力:r位校验码可检出 ≤r 位突发性错误;CRC擅长检测突发错。
三、存储器系统
1. 存储容量与芯片扩展
容量 = 存储单元数 × 字长(bit);主存地址位数 = log₂(单元数)
芯片数 = (总容量) ÷ (单芯片容量) 位扩展×字扩展分别算后相乘
位扩展:片数=总字长/片字长(地址同、数据线并联);字扩展:片数=总单元/片单元(数据同、片选译码)。
2. Cache 地址映射 核心
| 映射方式 | 主存地址结构 | 特点 |
| 直接映射 | 标记Tag + 行号/Index(log₂行数) + 块内偏移 | 主存块→唯一Cache行;冲突多但简单 |
| 全相联 | 标记Tag + 块内偏移 | 任意行;命中率高、比较器贵 |
| 组相联 | 标记Tag + 组号(log₂组数) + 块内偏移 | 每组r路;折中方案 |
⚠ 块内偏移位数 = log₂(块大小/字大小);行数=Cache容量/块大小;组数=行数/r(r=路数)。标记位 = 主存地址总位 − 组号位 − 偏移位,别忘了还有1位有效位(及脏位)。
3. 命中率与平均访问时间 核心
命中率 H = 命中次数 ÷ 总访问次数
平均访问时间 T = H·Tc + (1−H)·(Tc + Tm) (写回法,Tc=Cache命中时间,Tm=主存访问)
等效访问时间(不命中惩罚法) T = Tc + (1−H)·Tp (Tp=不命中开销)
Cache 容量↑ → H↑;块大小↑ → 空间局部性利用↑但冲突↑,存在最佳块大小。
4. 主存地址与编址
按字编址:地址数 = 容量/字长;按字节编址:地址数 = 容量(字节)
MAR位数 = log₂(主存单元数);MAR决定可寻址空间上限
5. 磁盘 / RAID
磁盘容量 = 磁头数 × 柱面(磁道)数 × 每道扇区数 × 512B
存取时间 Ta = 寻道时间 + 旋转延迟(平均1/2圈=1/(2r)) + 传输时间( b/(r·N) )
RAID0 条带(无冗余)、RAID1 镜像、RAID5 分布式奇偶(1块冗余)、RAID10 = 镜像+条带。