1.DMA控制方式的引入
磁盘、磁带等以数据块为单位的存储设备具有容量大、传送速度快的特点。如果仍以中断控制方式实现数据的传送,即每传送一个字节,I/O控制器就向CPU发一次中断,使CPU执行一次中断服务,显然,CPU被中断的次数过多,会降低CPU的工作效率。由于CPU执行中断处理程序,可能延误数据的接收,会导致数据丢失。为了解决这个问题,引入了直接存储器存取(Direct Memory Access,DMA)方式。如果硬件设施中有:DMA控制器,那么操作系统就使用DMA方式,大多数系统中都是这样的。
DMA方式具有以下四个特点:
①数据是在内存和设备之间直接传送的,传送过程中不需要CPU干预。
②仅在一个数据块传送结束后,DMA控制器才向CPU发中断请求。
③数据的传送控制工作完全由DMA控制器完成,速度快,适用于高速设备的数据成组传送。
④在数据传送过程中,CPU与外设并行工作,提高了系统效率。
可以看出,DMA方式与中断控制方式相比,成百倍地减少了CPU对I/O控制的干预,因而,DMA传送的基本思想是用硬件机构实现中断服务程序所要完成的功能。
2.DMA的传送操作
DMA控制器包含几个寄存器,如内存地址寄存器、字节计数寄存器及一个或多个控制寄存器。控制寄存器指明所用的端口、传送的方向(是读还是写)、传送的单位(一次一个字节还是一个字),以及本次传送的字节数。CPU可以读/写这些寄存器。DMA传送操作如图9-2所示。
图9-2 DMA传送操作(www.xing528.com)
DMA的工作过程如下。
①CPU把一个DMA命令块写入内存,该命令块包含传送数据的源地址、目标地址和传送的字节数;CPU把这个命令块的地址写入DMA控制器的寄存器中。CPU向磁盘控制器发送一个命令,让它把数据从磁盘读到内部缓冲区中,并进行校验。然后,CPU就去处理其他任务。当有效数据存入磁盘控制器的缓冲区后,就开始直接存储器存取。
②DMA控制器启动数据传送。通过总线,向磁盘控制器发送一个读(盘)请求,让它把数据传送到指定的内存单元。
③磁盘控制器执行从内部缓冲区到指定内存的数据传送工作,一次传送一个字。
④当把数据字写入内存后,磁盘控制器通过总线向DMA控制器发送一个回答信号。
⑤DMA控制器把内存地址增加1,并且减少字节计数。如果该计数值仍大于0,则重复执行上述步骤②~步骤④,直至计数值为0。此时,DMA控制器中断CPU,告诉CPU传送已经完成。
3.DMA控制器的工作模式
某些DMA控制器可以在每次一字模式和整块模式两种模式下工作。上面所介绍的模式就是每次一字模式,即DMA控制器一次请求传送一个字。在DMA控制器启动数据传送时,它要占用总线。如果此时CPU也想用总线,则CPU必须等待,因为I/O访问的优先权高于CPU访问。在一个数据字从内部缓冲区传送到内存期间,设备控制器偷偷地挪用了CPU的总线周期,即CPU,空出一个总线周期,让磁盘将数据送到内存,所以这种机制也称挪用周期。
在整块模式下,DMA控制器命令设备占用总线,发出一连串数据予以传送,然后释放总线,这种形式的操作也称阵发模式。阵发模式比挪用周期模式效率更高,因为占用总线需要花费时间,而一次传送多个字只需付出一次占用总线的代价。阵发模式的缺点:当进行很长的阵发传送时,会在一段时间内封锁CPU和其他设备。
在上面介绍的每次一字模式中,使用了DMA控制器的内部缓冲区,其作用有如下几点:①磁盘控制器在开始传送之前可以进行校验,以避免传送错误数据;②避免因申请占用总线而延误对后续数据字的接收。因为磁盘控制器把数据直接写到内存时,它必须占用总线来传送每个字。
可以看出,DMA控制方式具有数据成块传送,仅在整块数据传送完成后才中断CPU等特点。但是,并非所有计算机都使用DMA。反对使用DMA的人认为:主CPU往往比DMA控制器的运行速度快得多,可以更快地执行I/O操作。对于低端(嵌入式)计算机来说更是如此。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。