计算机组成
Computer Organization
CPU + 内存 + IO = 一台完整的冯·诺依曼计算机。
计算机组成(Computer Organization)研究如何将 CPU、内存、IO 设备通过总线(Bus)连接成完整的冯·诺依曼系统。核心组件包括:CPU(执行指令)、主存(存储程序和数据)、IO 设备(键盘、显示器、磁盘等)、总线(数据总线、地址总线、控制总线)。指令周期包括取指(Fetch)、译码(Decode)、执行(Execute)、访存(Memory)、写回(Writeback)。中断(Interrupt)机制允许 IO 设备在需要服务时通知 CPU,避免 CPU 轮询等待。DMA(Direct Memory Access)允许 IO 设备直接与内存交换数据,不经过 CPU。
CPU、内存、IO 设备单独存在时无法完成有用的计算。计算机组成将这些独立组件整合为协调工作的系统,实现存储程序(Stored Program)概念:程序和数据以相同方式存储在内存中,CPU 按顺序执行指令。中断机制使 CPU 能够响应外部事件(如键盘输入、网络数据包),而不需要不断轮询。DMA 减轻 CPU 负担,使 IO 操作与计算并行。
程序员通过系统调用(System Call)与 IO 设备交互。操作系统提供设备驱动程序,屏蔽硬件细节。理解计算机组成有助于理解:为什么 IO 操作是异步的(中断驱动);为什么 DMA 对高性能 IO 至关重要;为什么系统调用比函数调用慢(需要上下文切换到内核态)。嵌入式系统程序员可能需要直接操作 IO 端口和中断控制器。
Bottom-up:由下层如何构建
本层建立在以下层级之上:
Top-down:向上暴露什么接口
Programmer View:程序员视角
我能操作吗?
通过系统调用(read/write/open/close)访问 IO 设备。操作系统提供统一的文件抽象。底层可通过设备驱动程序直接控制硬件。
成本模型
| 指标 | 量级 | 备注 |
|---|---|---|
| 系统调用开销 | ~1000-2000 周期 | 上下文切换到内核态 |
| 中断响应延迟 | ~1-10 μs | 从中断发生到处理程序执行 |
| DMA 传输速率 | 数 GB/s | 取决于总线带宽(PCIe 3.0: ~16 GB/s) |
常见陷阱
- !IO 阻塞:同步 IO 操作会阻塞进程,直到数据就绪。高并发服务器应使用异步 IO(epoll、io_uring)
- !中断风暴:IO 设备频繁触发中断会导致 CPU 过载。应使用中断合并(Interrupt Coalescing)或轮询模式
- !总线争用:多个设备同时访问总线会导致性能下降。现代系统使用点对点连接(如 PCIe)替代共享总线