首页/计算机组成原理/I/O系统/程序中断和DMA方式 🔗 在 Obsidian 中打开
计算机组成原理 · I/O系统

程序中断和DMA方式

难度 ★★★重要度 ★★ 考查频率 低题型 选择 / 综合 中断DMAIO控制数据传输
速查
I/O 控制方式由低效到高效:程序查询 → 程序中断 → DMA → 通道。中断每传一个数据 CPU 介入一次;DMA 以数据块为单位,CPU 仅初始化与收尾介入。二者访存冲突:停止 CPU 访存 / 周期挪用 / 交替访存。

核心概念

I/O 控制方式解决 CPU 与外设之间的数据传输问题,从低效到高效依次为:程序查询方式 → 程序中断方式 → DMA 方式 → 通道方式。

程序中断方式

CPU 启动外设后继续执行现行程序,外设准备好后向 CPU 发中断请求,CPU 响应中断后转入中断服务程序完成数据传输。

中断处理过程:

  1. 关中断:防止新的中断干扰当前处理
  2. 保存断点:将 PC 和 PSW 压栈
  3. 中断服务程序识别:通过中断向量表(向量地址 = 中断类型号 $\times$ 向量表项大小 + 向量表基址)找到入口
  4. 保存现场和屏蔽字
  5. 开中断:允许更高优先级中断(中断嵌套)
  6. 执行中断服务程序
  7. 关中断
  8. 恢复现场和屏蔽字
  9. 开中断 + 中断返回

中断优先级与判优

  • 硬件判优:链式判优器(菊花链)、独立请求方式
  • 软件判优:程序查询各设备状态
  • 中断屏蔽字:每个中断源一个屏蔽位,可动态改变处理优先级
多重中断(嵌套)在中断服务程序中开中断 + 正确设置屏蔽字,允许更高优先级中断打断当前处理。

DMA 方式

DMA 在外设和主存之间建立直接数据通道,数据传输不经过 CPU,由 DMA 控制器(DMAC)控制。

  1. CPU 向 DMAC 发送初始化信息(方向、主存地址、数据量)
  2. DMAC 接管总线,控制数据在 I/O 设备与主存间直接传送
  3. 每传送一个数据,地址计数器 +1,字计数器 -1
  4. 传送结束(字计数器溢出),DMAC 向 CPU 发中断请求

DMA 与 CPU 访存冲突的解决

  • 停止 CPU 访存:DMA 期间 CPU 不能访存,效率低
  • 周期挪用/窃取:DMA 在 CPU 不访存的空闲周期插入访存,冲突时 DMA 优先
  • 交替访存:CPU 与 DMA 交替使用总线周期,不冲突但需特殊时序

关键定义

概念定义
中断CPU 暂停现行程序,转去处理突发事件,处理完返回原程序继续执行
中断向量中断服务程序的入口地址
中断向量表存放所有中断向量的表格
中断屏蔽字标识各中断源是否被屏蔽的位串,可动态改变优先级
中断嵌套高优先级中断打断低优先级中断的处理过程
DMA直接存储器访问,外设与主存直接传送数据
周期挪用DMA 利用 CPU 不访存的总线周期传送数据
DMACDMA 控制器,管理 DMA 数据传送的硬件
单字传送DMA 每次传送一个字后归还总线
成组传送DMA 连续占用总线直到整个数据块传送完成

常见考法

考点说明
中断处理过程排序给出中断处理步骤,要求正确排序
中断响应条件判断 CPU 何时能响应中断(中断允许标志、优先级等)
向量地址计算由中断类型号和向量表参数计算向量地址
中断屏蔽字分析给定屏蔽字矩阵,分析各中断源优先级与嵌套
DMA 传送时间计算计算 DMA 传送数据所需时间
DMA 与 CPU 访存冲突分析周期挪用方式下 CPU 的时间损失
中断与 DMA 对比比较特点、场景、CPU 开销

易错点

必记
  • 中断向量 $\neq$ 中断向量地址;向量地址是存储中断向量的存储单元地址。
  • 中断响应发生在每条指令执行完后(指令周期末尾检查),不是任意时刻。
  • DMA 传送期间 CPU 仍可执行不需访存的指令(寄存器运算等)。
  • 周期挪用下 DMA 与 CPU 同时请求访存时 DMA 优先,但 CPU 的总线周期不会被中途打断
  • 中断屏蔽字可改变处理的优先级顺序,但不能改变中断请求的优先级。
  • 程序中断方式每传一个数据就需 CPU 介入一次,不适合高速大量数据传输。

核心结论

  1. 程序中断方式适用于低速外设(键盘、鼠标),每次中断传送一个数据。
  2. DMA 方式适用于高速外设(磁盘),以数据块为单位,CPU 干预少。
  3. 中断方式 CPU 开销 = 响应 + 保存/恢复现场 + 服务程序;DMA 仅在初始化和结束时介入。
  4. DMA 三种访存方式中,周期挪用对 CPU 影响最小,成组传送 DMA 效率最高。
  5. 中断优先级可通过屏蔽字动态调整,是 408 常考的综合分析题。

记忆卡片

中断处理关键步骤?
关中断→保存断点(PC+PSW)→识别入口→保存现场→开中断→执行服务→关中断→恢复现场→开中断+返回
DMA 三种访存冲突解决?
停止CPU访存(效率低)/周期挪用(CPU空闲插入,DMA优先)/交替访存(不冲突需特殊时序)
中断响应发生在何时?
每条指令执行完后(指令周期末尾)统一检查请求
屏蔽字能/不能改变什么?
能改处理的优先级顺序;不能改请求的优先级(硬件固定)
中断与DMA适用场景?
中断=低速外设(键盘)逐次介入;DMA=高速外设(磁盘)成块,仅初始化/结束介入
中断向量≠向量地址?
向量是入口地址;向量地址是存放该入口的存储单元地址

交互动画 · 中断 vs DMA 数据通路

数据通路(点亮 = 数据实际经过的路径) I/O 设备 CPU 寄存器 主存
选择一种方式,查看数据实际经过的通路
点击上方按钮开始
程序中断:I/O→CPU→内存(经 CPU 中转,每字介入);DMA:I/O→内存(直连,不经 CPU)。

相关知识点

io-control-comparison interrupt-response-process dma-controller-detail exception-and-interrupt-handling

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。