跳转至

计算机组成原理

一、计算机系统概述

1.1 冯·诺依曼结构

存储程序思想:将程序指令和数据预先存入内存,计算机自动逐条执行指令。

┌─────────────────────────────────────┐
│           运算器(ALU)              │
│            ↑↓                       │
│  控制器(CU)←→ 内存(主存)←→ 外存 │
│            ↑↓                       │
│  输入设备 → 主机 ← 输出设备         │
└─────────────────────────────────────┘

1.2 计算机性能指标

指标 含义
CPU 主频 CPU 内部工作的时钟频率(如 3.0GHz)
CPI(Cycles Per Instruction) 执行每条指令所需的时钟周期数
IPS(Instructions Per Second) 每秒执行的指令数
吞吐量 单位时间内完成的工作量
响应时间 从任务开始到结束的总时间

Amdahl 定律:系统性能提升受限于可改进部分的比例。


二、数据表示与运算

2.1 数制转换

  • 二进制 → 十进制:按权展开求和
  • 十进制 → 二进制:整数除 2 取余,小数乘 2 取整
  • 二进制 ↔ 八进制/十六进制:三位/四位一组转换

2.2 原码、反码、补码

编码方式 正数 负数 特点
原码 符号位 0 + 数值位 符号位 1 + 数值位 加减法复杂
反码 同原码 原码数值位按位取反 0 有两种表示
补码 同原码 反码加 1 统一加减法,0 唯一

补码运算:$[x+y]\text{补} = [x]\text{补} + [y]_\text{补}$

2.3 浮点数表示(IEEE 754)

32 位单精度浮点数

| 31 | 30 ~ 23 | 22 ~ 0 |
| 符号位 S | 阶码 E(偏置 127)| 尾数 M |

值 = $(-1)^S \times 1.M \times 2^{E-127}$

2.4 ALU 运算

  • 加法:补码加法器实现
  • 减法:加补码($A - B = A + (-B)$)
  • 乘法:Booth 算法、Wallace 树
  • 除法:恢复余数法、不恢复余数法

三、CPU 结构

3.1 CPU 基本组成

┌─────────────────────────────────────┐
│              CPU                    │
│  ┌─────────────┐  ┌──────────────┐ │
│  │  运算器      │  │  控制器      │ │
│  │  ┌───┐     │  │  ┌────┐     │ │
│  │  │ALU│     │  │  │ PC │     │ │
│  │  │ACC│     │  │  │ IR │     │ │
│  │  │PSW│     │  │  │ CU │     │ │
│  │  └───┘     │  │  └────┘     │ │
│  └─────────────┘  └──────────────┘ │
│               ↓                    │
│           寄存器组                   │
└─────────────────────────────────────┘

3.2 寄存器

寄存器 全称 功能
PC 程序计数器 存放下一条指令的地址
IR 指令寄存器 存放当前执行的指令
ACC 累加器 存放 ALU 运算结果
PSW 程序状态字 标志位(CF、OF、ZF、SF)
MAR 存储器地址寄存器 内存地址
MDR 存储器数据寄存器 内存读写数据

3.3 指令执行过程

取指(Fetch)→ 译码(Decode)→ 执行(Execute)→ 访存(Memory)→ 写回(Writeback)
   ↑                                                                    ↓
   └────────────────────────── 下一指令 ────────────────────────────────┘

3.4 指令流水线

将指令执行过程分为多个阶段,各阶段并行处理不同指令。

流水线冒险: | 类型 | 描述 | 解决方案 | |------|------|---------| | 结构冒险 | 硬件资源冲突 | 增加硬件资源 | | 数据冒险 | 后一条指令依赖前一条的结果 | 转发(Forwarding)、插入空泡 | | 控制冒险 | 分支指令导致流水线断流 | 分支预测、延迟槽 |


四、指令系统

4.1 指令格式

一条指令通常包含: - 操作码:指明操作类型 - 地址码:指明操作数地址

4.2 寻址方式

方式 含义 示例
立即寻址 操作数直接在指令中 MOV R1, #5
直接寻址 地址码即操作数地址 MOV R1, [1000]
间接寻址 地址码指向存放地址的地址 MOV R1, [[1000]]
寄存器寻址 操作数在寄存器中 MOV R1, R2
变址寻址 基址 + 偏移量 MOV R1, [R2+4]

4.3 CISC vs RISC

特性 CISC RISC
指令数量 多(几百条) 少(几十条)
指令长度 可变 固定
寻址方式
寄存器 较少 较多
执行周期 多周期 单周期(大部分)
微程序控制 否(硬布线)
编译优化 困难 容易
典型代表 x86 ARM、RISC-V、MIPS

五、存储系统

5.1 存储层次

CPU 寄存器(速度最快、容量最小、价格最高)
    ↓          访问时间:~1ns
Cache(L1/L2/L3)
    ↓          访问时间:~10ns
主存(RAM)
    ↓          访问时间:~100ns
外存(SSD/HDD)(速度最慢、容量最大、价格最低)
               访问时间:~10ms

局部性原理: - 时间局部性:刚访问的数据可能很快再次被访问 - 空间局部性:刚访问数据附近的数据可能很快被访问

5.2 Cache 映射方式

方式 描述 特点
直接映射 主存块只能映射到Cache的特定行 简单但冲突率高
全相联映射 主存块可映射到Cache任意行 灵活但比较慢
组相联映射 分组,组内全相联 折中方案

Cache 替换算法:LRU(最近最少使用)、FIFO、LFU

写策略: - 写直达(Write-Through):同时写Cache和主存 - 写回(Write-Back):仅写Cache,被替换时才写回主存

5.3 主存

  • RAM:随机存取存储器
  • SRAM:静态,速度快,用于Cache
  • DRAM:动态,需刷新,用于主存
  • ROM:只读存储器,用于固件存储

5.4 外存

  • SSD(固态硬盘):基于闪存,速度快,无机械结构
  • HDD(机械硬盘):基于磁盘,容量大,速度较慢

磁盘性能指标:寻道时间 + 旋转延迟 + 传输时间


六、总线与 I/O

6.1 总线结构

总线分类: - 数据总线:传输数据(双向,宽度决定一次传输的数据量) - 地址总线:传输内存地址(单向,宽度决定寻址范围) - 控制总线:传输控制信号(读/写、中断等)

总线仲裁:解决多个设备同时请求总线的问题 - 集中式仲裁:链式查询、计数器查询、独立请求 - 分布式仲裁:各设备自行仲裁

6.2 I/O 接口

I/O 端口编址方式: - 统一编址:I/O 端口与内存共用地址空间(如 ARM) - 独立编址:I/O 端口有独立的地址空间(如 x86)

I/O 传输方式: | 方式 | CPU 参与度 | 传输单位 | 适用场景 | |------|-----------|---------|---------| | 程序查询 | 全程参与 | 字 | 简单低速设备 | | 中断驱动 | 开始和结束 | 字 | 中速设备 | | DMA | 不参与 | 块 | 高速批量传输 |


常见面试题

高频考点

  1. 原码、反码、补码的区别及应用? 补码统一加减法,是计算机中整数的实际存储方式。
  2. Cache 的作用及映射方式? 解决 CPU 和主存速度不匹配,常用组相联映射。
  3. 指令流水线中的冒险及解决? 结构冒险(加硬件)、数据冒险(转发)、控制冒险(分支预测)。
  4. CISC 和 RISC 的区别? CISC 指令多、变长;RISC 指令少、定长、高效流水。
  5. DMA 方式与中断方式的区别? DMA 批量传输不占 CPU,中断方式每次传输都需 CPU 介入。
  6. 浮点数的 IEEE 754 表示? 符号位 S + 阶码 E + 尾数 M,值 = (-1)^S × 1.M × 2^(E-127)。