1.DMA控制方式
虽然中断I/O控制方式消除了程序直接I/O控制方式的重复测试,但数据传输仍以字(字节)为单位,即设备每完成一个字(字节)的传输后,设备控制器就要向CPU发一次中断。另外,内存与设备控制器之间传送数据仍需要CPU干预。尽管这种控制方式可以满足低速字符设备的I/O要求,但用于块设备的I/O却十分低效。
目前在块设备的I/O系统中,普遍采用直接存储器存取(Direct Memory Access,DMA)I/O控制方式,即DMA控制方式。在该方式中,外部设备在DMA控制器支持下绕过CPU直接与内存交换数据,每次交换可以传送一个数据块,在每个数据块的传送期间无须CPU的干预。DMA控制方式下的地址总线和数据总线以及一些控制信号线都是与CPU共用的。平时这些总线和控制信号线由CPU管理使用,当采用DMA进行直接内存数据交换时,DMA采取挪用CPU工作周期和DMA控制器总线控制权的方法,由DMA控制器接管CPU所管理的总线,然后由DMA控制器控制外部设备与内存之间的成批数据传送,在所有数据传送完成后由CPU回收总线控制权。即DMA控制方式进一步减少了CPU对I/O过程的干预,从每传输一个字(字节)干预一次减少到每传输一个数据块干预一次。因此,这是一种效率很高的传输方式。
DMA控制方式具有以下3个方面的特点:
(1)内存与设备之间以数据块为单位进行数据传输,即每次至少传输一个数据块;
(2)DMA控制器获得总线控制权而直接与内存进行数据交换,CPU不介入数据传输事宜;
(3)CPU仅在数据块传送的开始和结束时进行干预,而数据块的传输和I/O管理均由DMA控制器负责。
注意:DMA控制方式实际上有以下3种。
(1)周期窃取方式。在每一条指令执行结束时,CPU测试有无DMA服务申请,如果有,则CPU进入一个DMA周期,即借用一个CPU的工作周期来完成数据交换工作。采用周期窃取方式内存不与外部设备直接相连接,而只与CPU连接,外部设备与内存的数据交换与程序直接I/O控制方式和程序中断I/O控制方式一样都要占用CPU的时间。
(2)直接存取方式。真正的DMA控制方式,DMA控制器的数据传送申请不是发向CPU,而是直接发往内存。在得到内存的响应之后,整个数据传送工作全部在DMA控制器中用硬件完成。
(3)数据块传送方式。数据块传送方式是一次传送一个数据块,即在每次中断I/O过程中是以数据块为单位获得或发送数据的,这一点与上面两种DMA控制方式相同,因此通常也把这种I/O方式归入DMA控制方式。
需要注意的是,直接存取方式是在设备控制器中设置一个比较大的数据缓冲存储器,一般要能够存放下一个数据块,设备控制器与内存之间的数据交换以数据块为单位,一次传送一批数据,并采用程序中断方式进行,这一点与一次只传送一个数据块的数据块传送方式不同。
2.DMA控制器的组成
DMA控制器由三部分组成:主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。我们主要介绍主机与DMA控制器之间的接口。(www.xing528.com)
为了实现主机与DMA控制器之间成块数据的直接交换,必须在DMA控制器中设置以下4类寄存器。
(1)命令/状态寄存器(CR)。用于接收从CPU发来的I/O命令或控制信息,或者存放设备的状态。
(2)内存地址寄存器(MAR)。在输入时(从设备传送到内存)存放数据在设备(如磁盘)的起始地址;在输出时(从内存传送到设备)存放数据在内存的源地址。
(3)数据寄存器(DR)。用于暂存从设备到内存或从内存到设备的数据。
(4)数据计数器(DC)。用于记录本次要读/写的字(字节)数。
3.DMA控制方式的处理过程
DMA控制方式传送数据的步骤如下。
(1)进程请求I/O时,CPU就向DMA控制器发出一条“0”命令,该命令被送至命令状态寄存器。同时,CPU挪用一个系统总线周期(工作周期),将准备存放输入数据的内存起始地址(或准备输出数据的内存源地址),以及要传送的字(字节)数分别存入内存地址寄存器和数据计数器,且将磁盘中的源地址(或目标地址)直接送入DMA控制器的I/O控制逻辑,然后启动DMA控制器进行数据传送。
(2)CPU将总线让给DMA控制器,由DMA控制器获得总线控制权来控制数据的传输。在DMA控制器控制数据传输期间,CPU不使用总线。
(3)DMA控制器按照内存地址寄存器的指示,不断在设备与内存之间进行数据传输,并随时修改内存地址寄存器和数据计数器的值。当一个数据块传输完毕或数据计数器的值减少到0时(所有数据都已传输完毕),传输停止并且向CPU发出中断信号。
(4)CPU响应:DMA控制器的中断请求。如果数据传输完成,则转向相应的中断处理程序进行后续处理;如果还有数据需要传输,则按照相同方法重新启动剩余数据的传送。
DMA控制方式与中断I/O控制方式相比,减少了CPU对I/O的干预,进一步提高了CPU与I/O设备之间的并行能力。DMA控制方式是在一个数据块传输完毕后发出中断,而中断I/O控制方式则在每个单位(字或字节)数据传输结束后发出中断,显然DMA控制方式的效率要高得多。在DMA控制方式中,CPU只是在每个数据块传输的开始和结束实施控制,在数据块的传输过程中则由DMA控制器控制,而中断I/O控制方式的数据传输则始终都是在CPU的控制下完成的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。