DMA
「DMA」(Direct Memory Access)是一种IO 控制方式,允许 I/O 设备直接与内存交换数据,而无需通过CPU进行数据传输。
中断 IO 控制驱动方式以字(节)为单位进行数据传送,每完成一个字(节)的传送,控制器产生一次中断。系统需占用 CPU 进行现场的保存和和恢复。特别是高速直接存储设备的出现,中断处理开销过大,CPU 利用率急剧下降。
如果 I/O 设备能直接与内存交换数据而不占用 CPU,利用率还可提高,由此产生了直接存储器存取 DMA 方式。
工作方式
- CPU 通过设置 DMA 控制器实现 DMA 编程,启动磁盘控制器并测试设备。
- DMA 控制器向磁盘控制器发出读请求,并将内存地址放在地址总线上;
- 磁盘控制器将字节传送到内存指定单元;
- 磁盘控制器向 DMA 控制器发送应答;DMA 控制器将内部地址寄存器加 1 同时将计数器减 1;
- 重复 2-4,当计数器为 0 时,DMA 控制器向 CPU 发出中断信号。
硬件要求
- 内存地址寄存器
- 字计数器
- 数据缓冲寄存器或数据缓冲区
- 设备地址寄存器
- 中断机制和控制逻辑
控制器组成
- DMA 控制器与块设备的接口
- I/O 控制逻辑
- 主机与 DMA 控制器的接口
- 命令/状态寄存器CR:接收从CPU发来的I/O命令或有关的控制信息,或设备的状态。
- 内存地址寄存器MAR:存放数据从设备传到内存的目的地址,或由内存到设备的内存源地址。
- 数据寄存器DR:暂存设备和内存间交换的数据。
- 数据计数器DC:存放本次CPU要读/写的字(节)数。
特点
- DMA 与内存间采用字传送,DMA 与设备间可能是字位或字节传送,所以,DMA中还要设置数据移位寄存器、字节计数器等硬件逻辑。
- DMA 设有中断机制和 DMA 传输控制机制,若出现 DMA 与 CPU 同时经总线访问内存,CPU 总把总线占有权让给 DMA (称“周期窃用”),让设备和内存之间交换数据,不再需要 CPU 干预,减轻 CPU 的负担,每次传送数据时,不必进入中断系统,能进一步提高CPU资源的利用率。
- 优点:CPU只需干预 I/O 操作的开始和结束,而其中的一批数据读写无需 CPU 控制,适于高速设备。
- 数据传输的基本单位是一个连续的数据块。
- 内存与设备之间直接数据传送,不用 CPU 的干预。
- 仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。
DMA 方式较之中断驱动方式,减少了 CPU 对 I/O 控制的干预,进一步提高了 CPU 与 I/O 设备的并发程度。