DMA方式

原创作者:Daniel

时间:2017.9.29

地点:大连理工大学软件学院

DMA(Direct Memory Access)方式中与主存交换数据可采用三种方法:

1、停止CPU访存

一听名字就觉得挺LOW的,停止CPU访存,那CPU干什么。具体过程是,当外设要传送一批数据时,DMA接口向CPU发出一个停止信号,要求CPU放弃地址线、数据线、以及相关控制总线的使用权,由DMA接口接管总线的控制权,进行数据传输。在数据传输完成后,DMA接口通知CPU接手总线的使用权。

这种方式效率比较低下,CPU在DMA阶段不访问主存,但是DMA设备在数据准备阶段往往耗时,这就导致了主存没人用的情况。

2、 周期挪用(周期窃取)

当I/O设备发出DMA请求时,I/O设备挪用总线占用权一个或者几个主存周期,DMA接口不请求时,主存可以正常访问主存。

当DMA接口发出DMA请求时,可能出现三种情况:

1)CPU未访存,CPU直接同意将总线控制权转让

2)CPU正访存,CPU与DMA冲突,CPU继续执行当前访存,在此存取周期结束后,将总线控制权移交DMA

3)CPU与DMA同时访存,DMA优先级高于CPU

周期窃取实际上就发生在了2)3)步骤中。

3、DMA与CPU交替访问

即CPU的一次访存操作分成了两个部分,C1 and C2。C1专供CPU访存,C2专供DMA访存。总线在两端时间里又可以转换控制权,不需要进行申请。但是这种方式很明显缺乏灵活性。

DMA接口部件组成(以周期窃取为例):

                                                                      

1、AR(address register)

用于存放需要与主存交换的数据地址,在DMA传输开始之前由CPU设定。每次传完一个word后由DMA控制逻辑 + 1 。

2、WC(words counter)

字计数器,存放一次传输的字规模,在DMA开始之前由CPU设定,一般存放字数的补码,每次传输后 ++,直到WC中数据最高位置0 的时候溢出,并将溢出信号传给中断机构。

3、DAR(device address register)

设备地址寄存器,用于存放I/O设备地址码,或者设备信息的存储地址。

4、DBR(data buffer register)

用来暂存每次需要传送的数据,通常为一个字。DBR内部由装配或拆解字信息的硬件逻辑

5、DMA控制逻辑

用来发出DMA请求和接受DMA允许,控制数据的传输,处理总线控制权的移交

6、中断机构

用来接受溢出信号。并且向CPU发出中断请求

DMA的工作过程:

1)预处理

由程序开启DMA传输过程,需要的初始量有

DMA传输方向,即读还是写

给DMA设备地址号,并启动设备

向AR中送入交换数据的主存地址

向WC中送入要交换数据的规模

2)数据传送

准备好一个字后,设备向DMA控制器发出请求

DMA控制器向CPU申请总线占用权

DMA接收CPU总线占用同意信号

DMA处理总线占用权的移交

DMA将AD中的地址送至总线,并且命令主存写

通知设备为下一个字做准备

将DBR中数送给数据总线

修改WC和AR中的值

DMA放弃总线占用

  重复上述过程直到数据溢出,发出中断

3)后处理

后处理需要CPU停止原来的程序,转到中断服务程序,校验主存数据是否正确,测试传送过程是否发生错误,若出错,转到错误处理程序。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值