计算机组成原理速查

前导
数制与编码
存储系统与 I/O
中央处理器

计算机系统概述

冯·诺依曼机:运算器、控制器、存储器、输入/输出设备

  • 运算器的核心是算术逻辑单元(ALU)
  • CPU:取指、解码、执行

CPU 的性能(执行时间)主要取决于

  • 主频(时钟频率)
  • 每条指令执行所用的时钟周期数(CPI)
  • 指令条数

数据的表示和运算

数制转换

  • 以二进制为基准进行与八、十六进制间的转换即可
  • 十进制转其他进制:除数取余 + 乘数取整(小数部分)

纠错理论

  • 校验码需能指示出错的位置,所以有 $2^k-1\geq n+k$,其中 $k$ 为校验位位数,$n$ 为有效信息位数
  • 校验位也可能失真,所以校验位的位置至关重要(防止出现歧义)

校验码

  • 奇偶校验码
  • 海明校验码:1010 -> 101_0__ -> 1010010
  • 循环冗余校验码:移位、相除、商数与余数合并

  海明码的设计思路是把校验位置于它纠错时表示的位置,这样校验位出错时校验码纠错的位置刚好就是校验位。以 1010 的四位信息为例,依纠错理论我们需要至少 3 位校验位,即 101_0__,我们记 s 为校验位与数据位异或运算的结果,位长为 3,我们希望经过异或运算,s 的数值可以指示出编码出错的位置,例如 s1 为 1 时表示第 1、3、5、7 位可能出错;s2 为 1 时表示第 2、3、6、7 位可能出错,因此保证编码独热性的运算规则如下:

  • $s_1=p_1\oplus d_1\oplus d_3\oplus d_4$
  • $s_2=p_2\oplus d_1\oplus d_3\oplus d_4$
  • $s_3=p_3\oplus d_2\oplus d_3\oplus d_4$

定点数的表示与运算

  • 无符号数 unsigned
  • 有符号数:原码、补码、反码
    • 正数的补码与原码相同
    • 负数的补码为原码取反加一
  • 算数移位与逻辑移位:区分在于符号位是否补全
  • 强制类型转换:大转小截断,小转大按转换类型选择是否补充符号位
  • 大小端对齐问题

浮点数:$N=r^E\times M$,$r$ 为底数,一般为 $2$;$E$ 为阶码,$M$ 为尾数

  • float:$1+8+23$,偏置 $\text{bias}=2^{8-1}-1=127$
  • (搞几个例子康康)

存储系统

  • 内存、外存、高速缓冲存储器
  • 随机存储器(Random Access Memory):主要用于内存和 Cache,易失性,断电即丢失
    • SRAM(static):触发器实现,不会刷新,主要用于高速缓存
    • DRAM(dynamic):电容实现,地址复用,会刷新,主要用于内存
  • 只读存储器(Read Only Memory):非易失性,断电仍保存,BIOS 存在这里
    • MROM(mask):生产即写入,无法修改
    • PROM(program):一次可编程
    • EPROM:elimination and program,可多次改写,先擦除后写入,写入时间长
    • 闪存、SSD
  • 4M x 16 位:数据线 16 根,地址线 22 根(DRAM 需减半)
  • 主存储器通过数据总线、地址总线和控制总线与 CPU 连接
    • 字、位扩展问题:注意数据线和地址线相匹配即可
    • 片选与字选
  • 交叉编址:体内地址 + 体号,类似于分页

程序访问的局部性原理

  • 时间局部性
  • 空间局部性

Cache 的工作机制:与操作系统中分页机制相仿

  • 地址映射
    • 直接映射:简单的线性哈希
    • 全相联映射
    • 组相联映射:Cache 分组,组间直接映射,组内全相联映射;多路组相联即每组有多少个 Cache 行
  • 内存地址:标记位 + 组号 + 块内地址(与 Cache 行大小相等)
  • 替换算法
    • 随机算法
    • FIFO 先进先出
    • LRU 最近最少使用
  • 写策略
    • 全写法:Cache 写命中时,必须把数据同时写入 Cache 和内存
    • 写回法:Cache 写命中时,只修改 Cache;被换出时写回内存
    • 写分配法:未命中时从内存读取并载入 Cache 后更新
    • 非写分配法:未命中时只写入内存修改

虚拟存储器:与操作系统中虚拟内存部分相同

指令系统(汇编)

寻址方式

  • 指令寻址
    • 顺序寻址:程序计数器(PC)指示
    • 跳跃寻址:jmp func
  • 数据寻址
    • 直接寻址:地址即数据
    • 间接寻址:需从地址中取数据
    • 变址寻址:地址可偏移
1
2
3
4
5
6
7
# Argument: 5 at %ebp + 8
init:
    movl 8(%ebp), %eax # Get 5
loop:
    subl $1, %eax # Decrement %eax
    cmpl $1, %eax # Compare 1 with %eax
    jg func # if >, goto loop
  • CISC:complicated,指令复杂,寄存器少,多采用微程序控制
  • RISC:refined,精简,寄存器多,以硬布线控制为主

中央处理器(一些图例很重要)

CPU:运算器 + 控制器

  • 运算器:ALU 及其他通用寄存器等
  • 控制器:程序计数器(PC)、指令寄存器(IR)、MAR、MDR 等
    • 硬布线控制器,数字逻辑电路
    • 微程序控制器,编码时互斥性微命令分在同一段内

指令周期

  • 取指:根据 PC 从主存中取指令存入 IR
  • 间址:取操作数的有效地址,存入 MDR
  • 执行:即运算
  • 中断:处理中断请求

数据在功能部件之间通过数据通路传送

  • MAR 与 MDR
  • 数据、地址、控制总线

指令流水线(取指、译码、执行)

  • 一般性问题画甘特图求解
  • 资源冲突、数据相关(前置)、条件转移(控制)会引起流水线阻塞

总线

总线仲裁:解决多个主设备竞争总线控制权问题

  • 链式查询
  • 计数器定时查询:计数控制优先级
  • 独立请求:需要更多额外的请求允许线

输入/输出系统

磁盘存储器

  • 结构:磁头臂,盘片,磁道,扇区,柱面
  • 柱面(cylinder)、磁头(head)、扇区(sector):CHS(三维坐标)、LBA(线性编址)定位具体扇区
  • 扇区交错:便于读取(因为磁盘始终在旋转)
  • 密度:建立映射,逻辑上各个磁道的扇区数相近

独立硬盘冗余阵列(磁盘阵列)

  • RAID 0:多个磁盘并联(条带化),读写速度最快;其中任何一块硬盘损坏,则整个组就毁了
  • RAID 1:两组以上的 N 个硬盘相互做镜像,可靠性最高
  • RAID 1 + 0:RAID 0 的最低组合,将两组镜像并联,每组视为 RAID 1 运作;1 + 0要优于0 + 1
  • RAID 0 + 1:与 1 + 0 相反,每组视为 RAID 0 运作
  • RAID 5:条带化,算法(奇偶校验)备份分散在其他硬盘上,兼顾各方面,至少需要三块硬盘(通过算法恢复损坏数据)

CPU 与 I/O 设备通信方式

  • I/O 端口空间:独立编址,使用专门的 I/O 端口和专门的 I/O 指令与内存通信
  • 内存映射 I/O:统一编址,共用统一的地址空间,使用访问内存的方式访问外部设备

I/O 方式

  • 程序查询:CPU 与 I/O 串行工作
  • 程序中断:CPU 与 I/O 可并行工作
    • 中断向量是中断服务程序的入口地址
  • DMA(Direct Memory Access):硬件替换