入门 01-导论与系统抽象 预计 20 分钟 kp-002

硬件基础:CPU、内存层级、中断与 DMA

操作系统的全部行为都建立在几类硬件原语之上:CPU 的寄存器与特权级、分层的存储体系、以及中断与 DMA 这两种"让设备通知 CPU"的机制。

学习状态:

一句话定义

操作系统的全部行为都建立在几类硬件原语之上:CPU 的寄存器与特权级、分层的存储体系、以及中断与 DMA 这两种"让设备通知 CPU"的机制。

为什么重要

不懂硬件就只能在"应用层猜测"。上下文切换为什么有成本(kp-006)、页表为什么需要 TLB(kp-017)、I/O 为什么要缓冲(kp-027),答案全在硬件事实里:寄存器只有一小把、内存访问比寄存器慢百倍、磁盘比内存慢万倍、设备不会主动说话除非给它中断线。

前置知识

kp-001 的分层观。

核心概念

  • PC(程序计数器)与通用寄存器:CPU 正在执行哪条指令、正在操作哪些数据——上下文切换保存与恢复的对象就是它们。
  • 内存层级:寄存器 → L1/L2/L3 缓存 → 主存 → 磁盘,越往下越大越慢,速度差跨越 5~7 个数量级。
  • 总线:CPU、内存、设备之间传输数据的公共通道。
  • 中断控制器:接收设备信号、打断 CPU 当前执行的硬件。
  • DMA 控制器:允许设备不经 CPU 直接与内存搬运数据的硬件。
  • MMU 与时钟:地址翻译部件(kp-017 主角)与产生周期性时钟中断的定时器。

原理与机制

内存层级决定了"数据放哪里"是操作系统最重要的权衡之一。典型数量级:

层级典型延迟容量
寄存器0.3 ns几百字节
L1 缓存1 ns几十 KB
主存 (DRAM)100 ns数十 GB
SSD100 微秒TB 级
HDD 寻道10 msTB 级

中断流程:设备就绪 → 发信号给中断控制器 → 控制器打断 CPU → CPU 保存现场、跳转到内核中断处理程序 → 处理完后恢复现场继续原任务。这套机制让 CPU 不必傻等设备,是"并发地服务多个设备"的硬件前提。DMA 则更进一步:内核设置好源地址、目标地址、长度后放手,DMA 控制器自己搬数据,搬完才发一次中断,期间 CPU 可以跑别的进程。

图示

PIO (CPU 搬运):    设备 --> CPU --> 内存      CPU 全程被占用
DMA (设备直搬):    设备 --> DMA控制器 --> 内存   CPU 空闲,完成后收一次中断

直观类比

中断像快递柜取件码:你不站在门口等快递(轮询),而是收到短信(中断)再去处理。DMA 像雇了个搬运工:你(CPU)告诉他地址和数量后就可以去干别的,搬完他喊你一声。

实例或案例

在 Linux 上可复现的观察:

lscpu                     # 核数、缓存层级、NUMA 拓扑
getconf -a | grep CACHE   # 各级缓存行大小与容量
cat /proc/interrupts      # 各设备中断计数(需 root 可读,macOS 无此文件,可用 ioreg 辅助)

用 time 感受层级差异:随机访问 1GB 数组比顺序访问慢数倍,正是缓存局部性在起作用(相关量化见 kp-031)。

常见误区

  • 认为内存访问是"均匀且便宜"的:缓存未命中一次的代价可抵上百条指令,很多"性能玄学"其实是缓存行为。
  • 认为 CPU 一直在为 I/O 忙碌:有了中断和 DMA,I/O 期间 CPU 大多时间在跑别的进程。
  • 把"多核"理解为多颗独立 CPU 共享一切:实际每个核有私有缓存,缓存一致性协议(如 MESI)是理解无锁编程(kp-015)的前提。

与其他知识点的关系

kp-003 用特权级机制解释系统调用;kp-006 的切换成本、kp-017 的 TLB、kp-026 的 I/O 控制方式,全部回溯到本节的硬件事实。

延伸阅读

《深入理解计算机系统》第 1、2、6 章(存储器层次结构)。

自测题

  1. 为什么操作系统需要时钟中断?

答:没有它,一个死循环进程会永远占住 CPU;时钟中断给了内核周期性夺回控制权、实施抢占式调度的机会。

  1. DMA 解决什么问题?

答:把批量数据搬运从 CPU 手里接走,让 CPU 在 I/O 期间可以去执行其他进程,只在传输完成时收一次中断。

  1. 主存与 L1 缓存的延迟差大约多少个数量级?

答:约两个数量级(1 ns 对 100 ns),这正是缓存与局部性优化如此重要的原因。

标签:#硬件 #中断 #DMA #缓存 #CPU