在DMA运行方式下,高速I/O设备与主存储器每交换一个数据(例如一个字的内容)一般要占用一个总线周期。要交换一批数据,则可以有不同的处理方式。一是独占总线方式,从传送第一个字开始直到这批数据传输完成的整个过程,DMA都把住总线不放,使总线只为本DMA使用。其缺点是CPU和其他DMA等bus
masters都要停止运行,会影响系统运行效率。二是周期挪用方式,DMA占用总线周期传送一个字的期间,若CPU在此期间并不使用总线,它就继续执行指令,二者均可运行,互不干涉,若CPU也要使用总线,则发生了争用总线的矛盾,此时CPU要让出一个总线周期先给DMA使用,之后自己才能得到总线使用权并继续运行。
一个计算机系统内,可以有多个DMA通道,为了管理,也要为他们分配DMA处理的优先级,优先级高的将可以得到优先响应与处理。
DMA卡是插接在总线插槽上的一块逻辑线路板,它的一端通过总线与计算机主存储器连接,另外一端通过电缆与高速设备连接。与一般接口卡不同的是,DMA可以变化自己的角色,当CPU对它进行读写时,CPU是bus
master,DMA是bus slave,当DMA控制高速设备与主存交换数据时,DMA是bus master。
一块功能完备的DMA卡的组成,通常应包括一般通用可编程接口卡的全部组成部分,例如设备识别逻辑(片选信号),控制/状态逻辑,数据缓冲电路,中断处理逻辑等,又要多出其他几个组成部分,例如主存储器的地址计数器,数据数量计数器,DMA请求线路等。下面介绍这后几个组成部分的功能,如图5.21所示。
图5.21 DMA接口的内部组成
(1) 主存地址计数器,存放读写主存用到的主存地址,一批数据传送开始前,由CPU写入其初值,以后每传送一个字,该地址计数器加1,使其指向下一个主存单元。
(2) 数据数量计数器,存放传送数据的数量,通常用补码给出,由CPU写入其初值,以后每传送一个字,该计数器加1,当计数到0时,表示这批数据传送完毕,此时DMA应向CPU发中断请求信号。
(3) DMA的控制/状态逻辑,由控制和状态等逻辑电路组成,用于修改主存地址计数器和数据数量计数器,指定传送功能(输入还是输出),协调CPU和DMA信号的配合与同步。
(4) DMA请求(与屏蔽)触发器,接收并记忆设备送来的请求数据传送的信号,该触发器的"1"输出端接到DMA的控制/状态逻辑,使其向CPU发出DMA请求信号,CPU接到这一请求信号并响应后,送回响应回答信号,DMA的控制/状态逻辑接到这一回答信号,就取得了总线的使用权,启动数据传送,清
"0" DMA请求触发器,为下一次的请求做好准备。
(5) 数据缓冲寄存器,用于存放高速设备与主存之间交换的数据,也有的DMA卡上不设置数据缓冲寄存器,而由送出数据的一方,在指定的时刻直接把数据放到数据总线上。
(6) 中断机构,与通用接口中的中断逻辑电路的组成完全相同,中断请求发生在数据数量计数器计数到0值的时刻,用于向CPU报告本组数据传送完成,并等待新的传送命令。
|
|