Appearance
DMA vs 中断 vs 程序查询——模拟器使用指南
这是一份工具说明,不是知识笔记
本文只讲怎么用这个模拟器。对应的大纲条目是:
六(三)I/O 方式
- 程序查询方式 2. 程序中断方式 3. DMA 方式
概念本身在 I/O 方式对比、程序查询方式与程序中断方式、DMA 方式 三节里,先读那三节,再回来用这个模拟器验证自己读懂了没有。
这个模拟器帮你看清什么
三种 I/O 方式的结论很容易记住——"DMA 最省 CPU、程序查询最费"。真正说不清的是那句"CPU 在等待期间可以做别的事"到底长什么样:CPU 具体在哪几个周期空转、哪几个周期在干活、数据是谁搬的。
这个模拟器把同一件事(读一块数据)用三种方式各跑一遍,时间线是并排可比的。用完你应当能指着任意一个周期说出 CPU 此刻在做什么。
界面速览
| 位置 | 控件 | 作用 |
|---|---|---|
| 顶部 | 程序查询 / 中断驱动 / DMA 三个按钮 | 切换 I/O 方式,时间线随之重算 |
| 中部 | CPU 状态块、设备状态块 | 显示当前周期各自在做什么 |
| 中部 | CPU 利用率条 | 绿=有效计算、红=忙等浪费、蓝=数据传输 |
| 底部 | ◀ | ▶/⏸ | ▶ | 上一步 | 播放/暂停 | 下一步 |
| 底部 | N / 总数 | 当前在第几个周期 |
| 底部 | 速度下拉 | 0.5x / 1x / 2x |
| 底部 | 「重新播放」 | 跑到末尾才出现 |
颜色对照(读时间线全靠它):
| CPU 状态 | 颜色 | 含义 |
|---|---|---|
| 忙等轮询 | 红 | 反复读状态寄存器,纯浪费 |
| 正常计算 | 绿 | 在跑别的程序,这才是有效工作 |
| 搬运数据 | 蓝 | 数据正经过 CPU 寄存器 |
| 中断服务 | 橙 | 正在执行中断服务程序 |
设备侧只有三态:准备中 / 数据就绪 / 空闲。
三种模式怎么看
程序查询
操作:点顶部「程序查询」,把速度调到 0.5x,点 ▶ 播放。
盯哪里:CPU 状态块的颜色,以及利用率条里红色占多长。
该看到:设备显示"准备中"的整段时间里,CPU 一直是红色的"忙等轮询",利用率条几乎全红,一次有效计算都没有。
看懂的标志:你能回答"这段时间 CPU 执行指令了吗?"——执行了,但执行的全是查询状态寄存器的指令,对程序毫无贡献。忙等不是停机,是空转。
中断驱动
操作:点「中断驱动」,用 ▶ 单步走,不要连播。
盯哪里:CPU 状态从绿变橙的那一刻,以及橙色持续几个周期。
该看到:设备"准备中"期间 CPU 是绿色(正常计算)——等待时间被利用起来了;设备"数据就绪"后 CPU 转橙色(中断服务)再转蓝色(搬运数据)。
看懂的标志:你能指出绿色那段就是中断方式相对程序查询省下来的东西。省的不是 I/O 开销本身,是等待时间。
DMA
操作:点「DMA」,先连播一遍看整体,再单步回看开头和结尾。
盯哪里:CPU 状态块几乎全程是绿的,而数据仍在传。
该看到:CPU 只在开头(初始化 DMA 控制器:给主存首址、传送个数、传送方向)和结尾(收完成中断)各参与一次,中间整段数据传送它完全不在场。
看懂的标志:你能说出"这段时间数据在动,但它没经过 CPU"——数据通路是设备接口 ↔ 主存,CPU 不在通路上。这正是 DMA 与前两种方式的本质差别。
三个动手任务
做完这三个,这个模拟器的价值就榨干了:
- 切到程序查询,数一数利用率条里红色占了几个周期;再切到中断驱动数绿色。两个数字的差就是"CPU 被解放出来的时间"。
- 在中断模式下单步到中断发生的那一拍,记下 CPU 状态从绿变橙的周期号。想一想:如果要传的不是 1 个数据而是 1000 个,这个橙色段会出现多少次?(1000 次——这就是中断方式的天花板。)
- 在 DMA 模式下找出 CPU 参与的两个时刻,用自己的话说出它各做了什么。说不出来就回 DMA 方式 再读一遍传送三阶段。
概念去哪里学
- I/O 方式对比——三种方式是 CPU 介入程度递减的连续谱,含 CPU 占比公式与并排算例
- DMA 方式——DMAC 的组成、传送三阶段、周期挪用、总线请求次数
- 程序查询方式与程序中断方式——独占查询与定时查询、中断方式成立的物理前提