DMA的传送方式:
图解析:
DMA传送前由设备驱动程序设置传送参数,设备每次向数据缓冲寄存器发送完一个字的内容后,就向DMA控制器发送DMA请求,DMA请求触发器接收到DAM请求后置位1,然后DMA控制器请求系统总线的使用权,向主存发送一个字的数据,传送完一个字的数据后,主存地址计数器和传送长度计数器加一,分别表示在主存中要写入的位置发生了一个字的变化和传送长度加一个字的变化,重复这个过程,直到传送长度寄存器溢出,即已经达到一开始CPU给DMA控制器设置的传送任务量上限,这时DMA控制器就可以发送DMA中断请求,CPU再来处理DMA中断请求,主要用于检验主存内写入的数据是否正确等;
DMA传送过程:
- 预处理:每类设备都配置一个设备驱动程序,设备驱动程序向上层用户程序提供一组标准接口,负责实现对设备发出各种具体操作指令,用户程序不能直接和DMA打交道;即DMA传送前由设备驱动程序设置传送参数,初始化DMA控制器中的有关寄存器、设置传送方向、启动该设备;直到IO设备准备好要发送的数据或接受的数据时,I/O设备向DMA控制器发送DMA请求(由设备发出DMA请求),再由DMA控制器向CPU发送总线请求;
- 数据传送:DMA的数据传输可以由单字节为基本单位,也可以由数据块为基本单位,数据传送阶段完全由DMA(硬件)控制;
- 后处理:DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理,包括校验数据是否正确,测试传送过程中是否会出错及决定是否继续使用DMA传送其它数据等;
三种DMA传送方式:
- 停止CPU访存:当IO设备有DMA请求时,由DMA控制器向CPU发送一个停止信号,使CPU脱离总线,停止访问主存,直到DMA传送一块数据结束,才将总线控制权交给CPU,通知CPU可以使用主存;
- 周期挪用:1)当CPU此时不在访存,因此IO的访存请求与CPU未发生冲突。2)CPU正在访存,此时必须等待存取周期结束后,CPU再将总线占有权让出。3)CPU和IO同时请求访存,此时IO访存请求优先级高于CPU访存,此时IO设备挪用一个或者几个存取周期,传送完一个数据后立即释放总线,是一种单字传送方式;即传送完一个数据字后立即释放总线,是一种单字传送方式,每个字传送完后CPU可以访存;【错题:在DMA传输整个数据块的过程中,CPU并不是不能访存,而是在DMA控制器每传送完一个字的内容并且立即释放总线后就可以访问主存】
- DMA与CPU交替访存:这种方式适用于CPU的工作周期比主存存取周期长的情况,例如CPU的工作周期为1.2us,主存的存取周期小于0.6us,则可将一个CPU周期分为C1和C2两个周期,其中C1专供DMA访存,C2专供CPU访存;
跟中断控制方式的不同之处:
- 除了预处理和后处理,其他时候不占用CPU资源;中断方式是程序的切换,所以需要保护和恢复现场,而DMA方式不中断现行程序,无需保护现场;
- 中断控制方式对中断请求的响应只能发生在一条指令执行结束时(执行周期后);而对DMA请求的响应可以发生在任意一个机器周期内
- 中断传送过程需要CPU的干预,而DMA传送过程不需要CPU的干预
- DMA请求优先级高于中断
- 从数据传送方式来看,中断方式是靠程序传送,DMA方式靠硬件传送