Skip to content

计算机组成原理

冯·诺依曼体系结构 - 五大组成部分

计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成,各部件之间通过总线连接,协同完成计算任务。


1. 运算器 (ALU - Arithmetic Logic Unit)

作用:执行所有的算术运算和逻辑运算,是计算机的"计算中心"。

具体功能:

  • 算术运算:加、减、乘、除等数学运算
  • 逻辑运算:与(AND)、或(OR)、非(NOT)、异或(XOR)等位运算
  • 移位操作:左移、右移(算术移位、逻辑移位、循环移位)
  • 比较运算:大小比较,产生条件标志位(零标志 ZF、符号标志 SF、进位标志 CF、溢出标志 OF)
  • 数据加工:对二进制数据进行加工处理

组成部件:

  • 算术逻辑单元(ALU)
  • 累加器(ACC)
  • 暂存寄存器
  • 通用寄存器组
  • 状态寄存器(PSW - Program Status Word)

2. 控制器 (CU - Control Unit)

作用:指挥和协调计算机各部件工作,是计算机的"指挥中心"和"大脑"。

具体功能:

  • 指令控制:取指、译码、执行指令
  • 顺序控制:保证指令按顺序(或指定顺序)执行
  • 操作控制:产生各种控制信号,控制各部件完成指定操作
  • 时间控制:严格控制各操作的时间顺序(时钟同步)
  • 中断处理:响应和处理各种中断请求
  • 程序计数:通过 PC(Program Counter)寄存器跟踪下一条指令地址

组成部件:

  • 程序计数器(PC)
  • 指令寄存器(IR)
  • 指令译码器(ID)
  • 时序发生器
  • 操作控制器
  • 中断系统

CPU = 运算器 + 控制器


3. 存储器 (Memory)

作用:存储程序和数据,是计算机的"记忆中心"。

具体功能:

  • 存储程序:存放要执行的指令序列
  • 存储数据:存放原始数据、中间结果、最终结果
  • 读写访问:支持随机读写,按地址访问
  • 数据保护:保证数据不丢失、不被破坏

分类:

类别 特点 示例
主存(内存) 速度快、容量小、易失 RAM、ROM、Cache
辅存(外存) 速度慢、容量大、永久 硬盘、SSD、U 盘

分层结构(由上至下速度递增、容量递减、成本递增):

  • 寄存器 → Cache(L1/L2/L3) → 主存(内存) → 辅存(硬盘)

关键指标:

  • 存储容量
  • 存取时间(速度)
  • 存储单元(位/字节/字)
  • 地址(每个存储单元的唯一编号)

4. 输入设备 (Input Device)

作用:将外部信息(数据、命令、程序)转换为计算机能识别的二进制形式送入计算机,是计算机与外界沟通的"入口"。

具体功能:

  • 数据采集:获取外部信息(数字、文本、图像、声音、动作等)
  • 格式转换:将人类可识别的信息转换为机器可识别的二进制代码
  • 传输数据:通过接口将数据送入主机

常见设备:

  • 键盘:输入字符、命令
  • 鼠标:输入位置、点击指令
  • 扫描仪:输入图像
  • 麦克风:输入声音
  • 摄像头:输入视频/图像
  • 触摸屏:输入位置和操作
  • 条形码扫描器:输入商品信息
  • 传感器:输入物理信号(温度、压力等)

5. 输出设备 (Output Device)

作用:将计算机处理后的二进制结果转换为人或其他设备能识别的形式,是计算机与外界沟通的"出口"。

具体功能:

  • 结果展示:把计算结果以可见、可听、可触的形式呈现
  • 格式转换:将二进制数据转换为人可识别的信息(文字、图像、声音等)
  • 信息记录:把结果永久保存在外部介质上

常见设备:

  • 显示器:输出图像、视频
  • 打印机:输出纸质文档
  • 音箱/耳机:输出声音
  • 绘图仪:输出图纸
  • 投影仪:输出大屏幕影像
  • LED 指示灯:输出状态信号
  • 执行机构:输出控制信号(机器人、自动化设备)

五大部件协同工作流程

输入设备 → 存储器 ← 输出设备
            ↓ ↑
          控制器 → 运算器

典型工作过程:

  1. 通过输入设备将程序和数据送入存储器
  2. 控制器从存储器中读取指令,进行译码
  3. 控制器运算器发出控制信号,运算器从存储器取数据
  4. 运算器进行运算,将结果送回存储器
  5. 控制器将结果通过输出设备呈现给用户
  6. 返回第 2 步,继续执行下一条指令

核心要点总结

部件 别称 核心功能
运算器 计算中心 算术/逻辑运算
控制器 指挥中心 协调控制各部件
存储器 记忆中心 存储程序和数据
输入设备 入口 数据输入计算机
输出设备 出口 展示计算结果

现代计算机中:CPU = 运算器 + 控制器,统称为"中央处理器",通过总线(数据总线、地址总线、控制总线)与存储器和 I/O 设备相连。


第二章 CPU

一、CPU 指令集 (Instruction Set Architecture, ISA)

指令集是 CPU 能识别和执行的全部指令的集合,是软件与硬件之间的接口规范,定义了 CPU 能做什么、怎么做。

1. 指令的格式

一条指令由两部分组成:

  • 操作码 (Opcode):指明指令的操作类型(加、减、传送、跳转等)
  • 地址码 (Operand):指明操作数或其地址(操作数可以是 0、1、2、3 个)

常见指令格式(按地址码数量):

类型 地址码数 特点 示例
零地址 0 栈结构,操作数在栈顶 ADD(栈顶两元素相加)
一地址 1 单操作数 + 累加器 INC A
二地址 2 两个操作数 ADD A, B
三地址 3 两个源 + 一个目的 ADD A, B, C

2. 指令的分类

按功能划分:

  • 数据传送类:MOV、LOAD、STORE、PUSH、POP
  • 算术运算类:ADD、SUB、MUL、DIV、INC、DEC
  • 逻辑运算类:AND、OR、NOT、XOR、SHL、SHR
  • 移位操作类:逻辑移位、算术移位、循环移位
  • 转移控制类:JMP(无条件跳转)、JZ/JNZ(条件跳转)、CALL(调用)、RET(返回)
  • 输入输出类:IN、OUT
  • 串操作类:MOVS、CMPS、SCAS
  • 特权类:系统调用、软中断

按操作数存放位置划分:

  • 寄存器-寄存器型 (RR):操作数全在寄存器中,速度快
  • 寄存器-存储器型 (RM):一个操作数在寄存器,一个在内存
  • 存储器-存储器型 (MM):两个操作数都在内存,速度慢

3. 两种主要指令集体系

CISC (Complex Instruction Set Computer) - 复杂指令集

  • 特点:指令数量多(100+ 条)、指令长度不固定、寻址方式多、可直接访问内存、复杂指令由硬件完成
  • 代表:Intel x86、x86-64(AMD64)
  • 优点:编程方便、代码密度高、内存占用小
  • 缺点:硬件复杂、指令执行周期长、不利于流水线
  • 应用:桌面 PC、服务器

RISC (Reduced Instruction Set Computer) - 精简指令集

  • 特点:指令数量少、指令长度固定(通常 32 位)、大多数指令单周期完成、只允许 LOAD/STORE 访问内存、大量使用寄存器
  • 代表:ARM、MIPS、RISC-V、PowerPC
  • 优点:硬件简单、流水线效率高、功耗低、易于设计
  • 缺点:代码密度低、复杂操作需多条指令组合
  • 应用:移动设备、嵌入式、IoT、苹果 M 系列芯片

CISC vs RISC 对比

维度 CISC RISC
指令数量 多(200+) 少(通常 < 100)
指令长度 不定长 定长
执行周期 多周期 大多单周期
寻址方式
内存访问 任意指令可访问 仅 LOAD/STORE
寄存器数量 多(32+)
硬件复杂度
流水线 难实现 天然友好
功耗
代表架构 x86 ARM、RISC-V

趋势:现代 x86 CPU 内部已把 CISC 指令译码成 RISC 微操作 (μops) 再执行,本质上是 RISC。RISC-V 因开源、免费、模块化,正在快速发展。

4. 指令的执行过程

CPU 执行一条指令需要经过以下阶段(经典 5 阶段):

  1. 取指 (IF - Instruction Fetch):从内存读取下一条指令到 IR
  2. 译码 (ID - Instruction Decode):解析操作码和操作数,生成控制信号
  3. 执行 (EX - Execute):ALU 进行运算,或计算有效地址
  4. 访存 (MEM - Memory Access):从内存读取/写入数据(仅 LOAD/STORE 需要)
  5. 写回 (WB - Write Back):将结果写回寄存器

取指-执行周期:CPU 不断重复"取指→执行"的过程,直到遇到停机指令或外部中断。


二、CPU 相关核心知识

1. CPU 的主要性能指标

指标 说明
主频 时钟频率(GHz),频率越高速度越快
核心数 物理核心数,多核可并行执行多任务
线程数 逻辑核心数,超线程可让 1 核跑 2 线程
位宽 一次处理的数据位数(32/64 位)
缓存 L1/L2/L3,容量越大命中率越高
工艺制程 晶体管线宽(nm),越小越先进(7nm、5nm)
TDP 功耗 热设计功耗(W),越低越省电
IPC 每时钟周期指令数,频率相同时 IPC 越高性能越强

CPU 性能公式(理论):

性能 ≈ 主频 × IPC × 核心数

2. CPU 的内部结构

核心组成:

  • 运算单元:ALU(算术逻辑单元)、FPU(浮点运算单元)
  • 控制单元:指令译码器、微程序控制器
  • 寄存器组:
  • 通用寄存器(GPR):用于存放操作数和中间结果
  • 专用寄存器:PC(程序计数器)、IR(指令寄存器)、MAR(地址寄存器)、MDR(数据寄存器)、PSW(状态字寄存器)、SP(栈指针)
  • 缓存 (Cache):L1(分指令/数据)、L2、L3,缓解 CPU 与内存的速度差
  • 总线接口单元 (BIU):负责与外部总线交互

3. 多核 CPU

  • 同构多核:所有核心结构相同,适合通用并行
  • 异构多核 (大小核):高性能核 + 高效能核(如 ARM big.LITTLE、Intel P 核 + E 核)
  • 核心通信:通过共享缓存、总线或片上互连网络(如 Ring、Mesh)
  • 并行模型:SISD、SIMD、MISD、MIMD(Flynn 分类法)

3.5 核心数 vs 线程数

基本概念

术语 别称 含义
物理核心 (Core) 物理核 硬件上真正独立的运算单元,每个有自己的 ALU、寄存器、Cache 等
逻辑核心 (Thread) 逻辑核/线程 操作系统看到的"CPU 核心",由物理核心映射而来
进程 (Process) - 程序的一次执行,拥有独立内存空间(虚拟地址空间)
线程 (Thread) 轻量级进程 进程内的执行流,共享进程的内存,但有自己的栈和寄存器

核心与线程的关系

  • 1 个物理核心 = 1 个逻辑线程(无超线程时)
  • 1 个物理核心 = 2 个逻辑线程(开启超线程后,典型是 2 路 SMT)
  • 总逻辑线程数 = 物理核心数 × 每核线程数

常见标识:4 核 8 线程 表示 4 个物理核心,通过超线程模拟出 8 个逻辑核心。

超线程技术 (SMT)

全称:Simultaneous Multi-Threading(同步多线程),Intel 称为 Hyper-Threading (HT)。

原理:一个物理核心内部的执行资源(ALU、FPU、Cache 等)通常无法被一条指令流充分利用。超线程让两个线程的指令同时进入流水线,当一个线程因等待内存/数据而阻塞时,另一个线程可以继续使用空闲的执行单元,提升整体利用率。

优点:

  • 提高 CPU 利用率:充分利用空闲的执行单元
  • 提升多任务性能:前台/后台任务同时跑得更流畅
  • 几乎不增加功耗:复用现有硬件,功耗增加约 5%

缺点:

  • 不是性能翻倍:实际提升通常 15%~30%,远不到 2 倍
  • 同线程互相干扰:两条指令流争抢资源,可能单线程性能略降
  • 依赖场景:计算密集型收益小,IO 密集型/多任务收益大

典型应用:服务器(大量并发请求)、桌面(边打游戏边录屏)、浏览器(多标签页)。

核心/线程相关的 CPU 调度

操作系统视角:OS 把"逻辑核心"作为调度的基本单位,通过时间片轮转把就绪线程分配到不同的逻辑核心上。

线程调度策略:

  • 先来先服务 (FCFS):简单但平均等待时间长
  • 短作业优先 (SJF):平均等待时间最短,但长任务可能饥饿
  • 时间片轮转 (RR):每个线程跑一个时间片,公平但频繁切换有开销
  • 优先级调度:区分前台/后台,高优先级先跑,可能低优先级饥饿
  • 多级反馈队列:结合时间片和优先级,现代 OS 主流方案

进程/线程同步(多核环境下多个线程访问共享资源):

  • 互斥锁 (Mutex):同一时刻只有一个线程能进入临界区
  • 读写锁 (RWLock):读多写少场景,读可并发
  • 信号量 (Semaphore):控制同时访问资源的线程数
  • 自旋锁 (Spinlock):不睡眠,忙等,适合短临界区
  • 原子操作 (CAS):硬件支持的不可中断操作,无锁编程
  • 内存屏障 (Memory Barrier):保证指令/数据的可见性与顺序性

进程 vs 线程 对比

维度 进程 线程
资源占用 大(独立内存空间) 小(共享进程内存)
切换开销 大(需切换页表等) 小(只需切换寄存器/栈)
通信方式 管道、消息队列、Socket、共享内存 直接共享内存(需同步)
安全性 高(天然隔离) 低(共享数据,需加锁)
创建/销毁成本
适合场景 需要强隔离的任务 频繁创建、密集计算的任务

多核编程注意点

  • 并行不一定更快:线程创建/同步有开销,任务太小时并行反而更慢(阿姆达尔定律)
  • 避免伪共享 (False Sharing):不同线程的变量不要落在同一个 Cache 行(64 字节)内
  • 数据竞争:多线程改同一变量必须同步,否则结果不可预期
  • 亲和性 (Affinity):把线程绑到特定核心,减少跨核迁移带来的 Cache 失效
  • NUMA 架构:多插槽服务器要注意内存访问的"远近",尽量本地访问
  • 阿姆达尔定律 (Amdahl's Law):理论加速比上限 = 1 / (串行比例 + 并行比例 / 核心数)

4. 流水线 (Pipeline)

把一条指令的执行拆成多步,让多条指令重叠执行,提高吞吐率。

经典 5 级流水线:IF → ID → EX → MEM → WB

理想情况:n 条指令、k 级流水线,执行时间 ≈ (n + k - 1) × 单级时间

流水线冒险 (Hazards):

  • 结构冒险:硬件资源冲突(如同时访问内存),解决:加哈弗结构(指令/数据 Cache 分开)
  • 数据冒险:后一条指令用到前一条结果时数据未就绪,解决:数据转发 (Forwarding)、流水线停顿 (Bubble)
  • 控制冒险:分支跳转导致预取指令作废,解决:分支预测、延迟槽

流水线性能指标:

  • 吞吐率 (Throughput):单位时间完成的指令数
  • 加速比 (Speedup):流水线执行时间 / 非流水线执行时间
  • 效率 (Efficiency):加速比 / 流水线级数

5. 高级优化技术

  • 超标量 (Superscalar):一个周期发射多条指令(CPU 内部有多条流水线)
  • 超线程 (Hyper-Threading/SMT):1 个物理核心模拟 2 个逻辑核心,共享执行单元
  • 乱序执行 (Out-of-Order Execution):不按程序顺序执行,提高资源利用率
  • 分支预测 (Branch Prediction):预测分支走向,减少流水线清空
  • SIMD (单指令多数据):一条指令处理多个数据(AVX、SSE、NEON)
  • 多核互连:片上网络 (NoC)、Ring 总线、Mesh 网格

6. CPU 工作流程总览

程序 → 编译器 → 机器指令 → 内存
                          ↓
        ┌───────── CPU ─────────┐
        │  PC → 取指 → IR → ID  │
        │  ↓ 控制信号            │
        │  ALU 计算 ← 寄存器     │
        │  ↓ 访存(L/S)          │
        │  写回寄存器 → 更新 PC  │
        └──────────────────────┘
                          ↓
                        内存 / I/O

7. 常见 CPU 架构速览

架构 类型 厂商 典型应用
x86 CISC Intel、AMD PC、服务器
ARM RISC ARM(英国) 手机、嵌入式、苹果 M1/M2/M3
RISC-V RISC 开源(基金会) IoT、教育、国产芯片、平头哥
MIPS RISC MIPS(已开源) 路由器、龙芯(早期)
Power RISC IBM 服务器、大型机
LoongArch RISC 龙芯中科 国产 PC、服务器

8. CPU 性能影响因素总结

  • 频率:主频越高,单核越快(受功耗墙限制)
  • IPC:微架构越先进,每周期能干的事越多
  • 缓存:命中率高,等待内存的时间就少
  • 内存:带宽、延迟、频率(内存墙)
  • 指令集:不同 ISA 性能与生态不同
  • 编译器:好的编译能榨干硬件性能
  • 程序本身:算法复杂度、并行度

第三章 存储器 (Memory)

存储器是计算机的"记忆中心",按速度由快到慢、容量由小到大、成本由高到低,通常分为多层金字塔结构。

一、存储层次结构 (Memory Hierarchy)

          ←── 容量小、速度快、成本高
            寄存器 (Registers)        ~ 1 ns, 几百字节, 在 CPU 内
              ↓
            L1 Cache                  ~ 1-2 ns, 几十 KB
            L2 Cache                  ~ 3-10 ns, 几百 KB ~ 几 MB
            L3 Cache                  ~ 10-20 ns, 几 MB ~ 几十 MB
              ↓
            主存 (Main Memory / RAM)   ~ 50-100 ns, 几 GB ~ 几十 GB
              ↓
            辅存 (SSD/HDD)            ~ 50 μs (SSD) / 5 ms (HDD), 几百 GB ~ 几 TB
              ↓
            远程存储 (云/磁带)         秒级, 几乎无限
          ←── 容量大、速度慢、成本低

核心思想:用"局部性原理"——把最常用的数据放最上层,大概率能命中,平均访问时间接近上层。

  • 时间局部性:刚被访问的数据,短期内很可能再被访问 → 用 Cache 留住
  • 空间局部性:访问某个地址,周围地址很可能也被访问 → 用 Cache 行/块预取

二、高速缓存 (Cache)

1. Cache 基本概念

  • Cache 行 (Cache Line / Block):Cache 与主存之间数据传输的最小单位,通常 64 字节
  • 命中率 (Hit Rate):访问在 Cache 中找到的比例
  • 缺失率 (Miss Rate):1 - 命中率
  • 平均访问时间:T = H × T_cache + (1 - H) × T_cache + T_memory

三类缺失 (3 C's):

  • 强制缺失 (Compulsory):第一次访问某个数据,无法避免
  • 容量缺失 (Capacity):Cache 太小,装不下所有工作集
  • 冲突缺失 (Conflict):映射算法导致某些行反复被踢出

2. Cache 与主存的映射方式

主存地址结构: 标记(Tag) + 组号(Index) + 块内偏移(Offset)

映射方式 特点 优点 缺点
直接映射 每个主存块只能映射到固定一个 Cache 行 硬件简单、速度快 冲突率高,容易抖动
全相联映射 每个主存块可放到任意 Cache 行 命中率高、冲突少 硬件复杂、查找慢
组相联映射 (N 路) 先定位组,组内任意放,主流方式 折中,现代 CPU 普遍采用 折中

组相联示例 (8 路组相联):

主存块号 % 组数 = 组号
组内:同时比较 8 个 Tag,任一命中即访问

3. Cache 替换算法

当 Cache 已满,要加载新块时,踢掉哪一个?

  • LRU (Least Recently Used):淘汰最久未使用,效果最好,实现复杂
  • FIFO (First In First Out):淘汰最早进入的,实现简单
  • LFU (Least Frequently Used):淘汰访问次数最少的
  • 随机 (Random):实现最简单,实际效果不错
  • 近似 LRU:用几位二进制近似 LRU,硬件友好(现代 CPU 常用)

4. Cache 写策略

策略 写命中时 写缺失时 特点
写直达 (Write Through) 同时写 Cache 和主存 直接写主存 数据一致性好,但慢
写回 (Write Back) 只写 Cache,标记脏位 淘汰脏块时再写回主存 速度快,但要处理一致性
写分配 (Write Allocate) - 先把块加载到 Cache 再写 与写回配合使用
写不分配 (No Write Allocate) - 直接写主存,不加载 与写直达配合使用

现代 CPU 一般采用 写回 + 写分配

5. 多级 Cache 与一致性

多级 Cache 结构:

  • L1:分指令 Cache (I-Cache) 和数据 Cache (D-Cache),最快,几十 KB
  • L2:统一 Cache,容量更大,几百 KB ~ 几 MB
  • L3:多个核心共享,几 MB ~ 几十 MB
  • 包含性 (Inclusion):L3 包含 L2,L2 包含 L1
  • 独占性 (Exclusion):L1/L2/L3 数据不重复(如 AMD 早期)

多核 Cache 一致性协议 (MESI):

状态 含义
M (Modified) 该 Cache 行已被修改,主存已过期,独占
E (Exclusive) 与主存一致,独占
S (Shared) 与主存一致,可能在其他核也有副本
I (Invalid) 无效,需要重新加载

变体:MOESI、MSI、MESI-FO 等,核心思路是监听 (Snooping) 或目录 (Directory) 维护一致性。

6. 伪共享 (False Sharing)

不同线程修改同一 Cache 行的不同变量时,虽然逻辑无关,但因 Cache 一致性协议会导致该行在多个核间反复失效,性能急剧下降。

解决:

  • 变量间加 padding 凑够 64 字节
  • 关键数据结构按 64 字节对齐
  • 使用 __attribute__((aligned(64)))(GCC) / [StructLayout](C#) / @Contended(Java)

三、主存 (Main Memory)

1. RAM vs ROM

类别 全称 特点 用途
RAM Random Access Memory 可读可写,易失 运行时内存
ROM Read Only Memory 只读,非易失 固件、BIOS

2. RAM 分类

按存储原理:

类型 原理 速度 成本 用途
SRAM 6 个晶体管构成一个存储单元,无需刷新 极快, ns 级 CPU 缓存
DRAM 1 个电容 + 1 个晶体管,需周期性刷新 较慢, 几十 ns 内存条
SDRAM 同步 DRAM, 与 CPU 时钟同步 较快 早期内存
DDR SDRAM 双倍数据率 SDRAM,每个时钟传 2 次 现代内存主流
DDR2/DDR3/DDR4/DDR5 每代更高频率、更低电压 越来越快 越来越低 当前主流 DDR4/DDR5

DDR 代际对比:

代次 预取位数 电压 典型频率 速率 (MT/s)
DDR 2n 2.5V 100-200 MHz 200-400
DDR2 4n 1.8V 200-533 MHz 400-1066
DDR3 8n 1.5V 400-1066 MHz 800-2133
DDR4 8n 1.2V 800-1600 MHz 1600-3200
DDR5 16n 1.1V 1600-3200 MHz 3200-6400

3. ROM 分类

  • ROM (Mask ROM):出厂烧死,无法修改
  • PROM:可编程一次
  • EPROM:可擦除(紫外线)
  • EEPROM:可电擦除
  • Flash (闪存):EEPROM 的一种,按块擦写 → SSD、U 盘、嵌入式
  • NOR Flash:支持 XIP(片上执行),读快写慢,用于 BIOS/固件
  • NAND Flash:顺序读快、密度高,用于 SSD/U 盘
    • SLC:1 bit/cell,寿命长、贵
    • MLC:2 bit/cell,均衡
    • TLC:3 bit/cell,便宜,主流消费级
    • QLC:4 bit/cell,最便宜,寿命短

4. 内存相关技术

  • 多通道内存:双通道/四通道,提升带宽(CPU 同时读多个内存条)
  • ECC 内存:带错误检查和纠正,服务器/工作站必备
  • 内存时序 (Timing):CL-tRCD-tRP-tRAS,如 16-18-18-38,数字越小越快
  • XMP / EXPO:内存超频配置文件,Intel / AMD 平台

四、虚拟存储器 (Virtual Memory)

1. 虚拟地址 vs 物理地址

  • 虚拟地址 (VA):程序看到的地址,每个进程独立
  • 物理地址 (PA):内存硬件上的真实地址
  • MMU (Memory Management Unit):负责 VA → PA 转换
  • 好处:
  • 进程间地址空间隔离,互不干扰
  • 物理内存不够时,部分数据放磁盘(交换区)
  • 每个进程可以使用连续的虚拟地址空间

2. 三种管理方式

方式 特点 优点 缺点
连续分配 整块连续内存给一个进程 简单 碎片严重,利用率低
分页 (Paging) 固定大小页(4KB/2MB),逻辑地址 = 页号+页内偏移 简单、无外部碎片 页表可能很大
分段 (Segmentation) 按逻辑单位分(代码段、数据段、栈段) 符合程序员视角 外部碎片
段页式 先分段,段内再分页 二者结合 实现复杂

现代 OS 主要用分页(或段页式)。

3. 页表 (Page Table)

  • 页表项 (PTE):包含物理页号、有效位、访问位、修改位、保护位等
  • 单级页表问题:64 位系统每个进程页表巨大
  • 多级页表:把页号再分段,如 32 位用 2 级,64 位用 4 级
  • 倒排页表:按物理页组织,适用于 64 位系统

4. TLB (Translation Lookaside Buffer)

  • 本质:页表的 Cache,缓存最近用过的 VA→PA 映射
  • 命中:直接拿到物理页号,极快(~1 ns)
  • 缺失:要走硬件页表(快表)或软件页表(慢)
  • TLB 刷新:进程切换时,需 flush TLB(用 ASID 区分进程可避免)

5. 页面置换算法

当物理页不够,要把不常用的页换出到磁盘:

算法 思路 优点 缺点
OPT (Belady) 淘汰未来最久不用的,理论最优 - 无法实现
FIFO 淘汰最早进入的 简单 性能差(可能有 Belady 异常)
LRU 淘汰最久未使用 接近 OPT 实现成本高
Clock (二次机会) LRU 近似,环形链表 + use 位 折中 近似 LRU
LFU 淘汰访问次数最少 适合稳定热点 偶发访问污染
工作集模型 保留最近 Δ 时间内的页 适合真实负载 需硬件支持

Belady 异常:FIFO 算法在增加页框数时,缺页率反而上升的反常现象。

五、辅助存储器 (Secondary Storage)

1. 机械硬盘 (HDD)

  • 结构:盘片、磁头、主轴电机、寻道电机、控制电路
  • 关键概念:
  • 盘片 (Platter):存储数据的圆形盘
  • 磁道 (Track):盘片上的同心圆
  • 扇区 (Sector):磁道上的弧段,通常 512 字节 / 4KB
  • 柱面 (Cylinder):多个盘片相同半径的磁道集合
  • 簇 (Cluster):文件系统分配的最小单位,由若干扇区组成
  • 性能指标:
  • 容量:几 TB
  • 转速:5400 / 7200 / 10000 RPM
  • 平均寻道时间:几 ms
  • 传输速率:100-200 MB/s
  • 接口:SATA III(6 Gbps)、SAS(服务器)
  • 优点:容量大、便宜、数据保存时间长
  • 缺点:有机械部件,怕震动,慢,功耗高

2. 固态硬盘 (SSD)

  • 原理:用 NAND Flash 芯片存储,无机械部件
  • 性能:
  • 顺序读:可达 7000 MB/s(NVMe)
  • 随机读 IOPS:几十万到百万级
  • 延迟:几十 μs(比 HDD 速度快 100 倍)
  • 接口:
  • SATA III SSD:走 AHCI 协议,上限 600 MB/s
  • NVMe SSD:走 PCIe 总线,上限可达数 GB/s(M.2、U.2)
  • 优点:极快、防震、低功耗、无噪音
  • 缺点:寿命有限(写入次数)、贵、断电可能丢数据
  • 寿命指标:TBW (Total Bytes Written),越大越耐用
  • 关键技术:
  • FTL (Flash Translation Layer):逻辑地址到物理地址的映射
  • 磨损均衡 (Wear Leveling):让所有块均匀写入,延长寿命
  • GC (垃圾回收):回收无效块,提升写入性能
  • Trim:告诉 SSD 哪些块已无效,辅助 GC

3. 接口对比

接口 协议 理论带宽 形态 适用
SATA III AHCI 6 Gbps 2.5 寸/M.2 消费级主流
PCIe 3.0 x4 NVMe 32 Gbps M.2 主流 NVMe
PCIe 4.0 x4 NVMe 64 Gbps M.2 高端消费级
PCIe 5.0 x4 NVMe 128 Gbps M.2 新一代旗舰
SAS SCSI 12 Gbps 企业级 服务器

六、新型存储器

类型 原理 特点 现状
3D XPoint (Optane) 相变存储 介于 DRAM 和 SSD 之间,字节寻址 已停产
HBM (High Bandwidth Memory) 3D 堆叠 DRAM + TSV 超高带宽、低功耗 GPU / AI 加速卡
HBM2e / HBM3 HBM 升级 带宽进一步翻倍 旗舰 GPU / AI 芯片
MRAM / STT-MRAM 自旋转移力矩 速度接近 SRAM,非易失 嵌入式 / 缓存替代
ReRAM / PCM 电阻变化/相变 高密度、可堆叠 存算一体研究
LPDDR / LPDDR5X 低功耗 DDR 移动端专用,低电压 手机/平板/笔记本

七、存储器性能对比总览

层级 典型容量 访问延迟 带宽 成本/GB 易失性
寄存器 ~1 KB < 1 ns - - 易失
L1 Cache 32-128 KB 1-2 ns ~1 TB/s - 易失
L2 Cache 256KB-1MB 3-10 ns ~500 GB/s - 易失
L3 Cache 4-64 MB 10-20 ns ~200 GB/s - 易失
DRAM 8-128 GB 50-100 ns 50-100 GB/s $3-5 易失
NVMe SSD 512GB-8TB 50-200 μs 3-7 GB/s $0.05-0.1 非易失
SATA SSD 256GB-4TB 50-200 μs ~500 MB/s $0.05-0.1 非易失
HDD 1-20 TB 5-15 ms 100-200 MB/s $0.02 非易失