基本的DMA控制器

news/2024/12/13 13:07:46

DMA的基本概念    

  直接内存访问(DMA)是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行 。DMA方式一般用于高速传送成组数据。DMA控制器将向内存发出地址和控制信号,修改地址,对传送的字的个数计数,并且以中断方式向CPU报告传送操作的结束。

  DMA方式的主要优点是速度快。由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。在数据传送过程中,没有保存现场、恢复现场之类的工作。内存地址修改、传送字个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。所以DMA方式能满足高速I/O设备的要求,也有利于CPU效率的发挥。

多种DMA至少能执行以下一些基本操作:

(1)从外围设备发出DMA请求;

(2)CPU响应请求,把CPU工作改成DMA操作方式,DMA控制器从CPU接管总线的控制;

(3)由DMA控制器对内存寻址,即决定数据传送的内存单元地址及数据传送个数的计数,并执行数据传送的操作;

(4)向CPU报告DMA操作的结束

注意 在DMA方式中,一批数据传送前的准备工作,以及传送结束后的处理工作,均由管理程序承担,而DMA控制器仅负责数据传送的工作。

 

8.3.2 DMA传送方式         

  DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序。DMA控制器与CPU分时使用内存通常采用以下三种方法:

1.停止CPU访问内存

当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传送。在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。在这种DMA传送过程中,CPU基本处于不工作状态或者说保持状态。这种传送方式的时间图如下:

  优点: 控制简单,它适用于数据传输率很高的设备进行成组传送。

  缺点: 在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周期,即使高速I/O设备也是如此。

2.周期挪用:

当I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。

I/O设备要求DMA传送时可能遇到两种情况

(1)此时CPU不需要访内,如CPU正在执行乘法指令。由于乘法指令执行时间较长,此时I/O访内与CPU访内没有冲突,即I/O设备挪用一二个内存周期对CPU执行程序没有任何影响。

(2)I/O设备要求访内时CPU也要求访内,这就产生了访内冲突,在这种情况下I/O设备访内优先,因为I/O访内有时间要求,前一个I/O数据必须在下一个访内请求到来之前存取完毕。显然,在这种情况下I/O 设备挪用一二个内存周期,意味着CPU延缓了对指令的执行,或者更明确地说,在CPU执行访内指令的过程中插入DMA请求,挪用了一二个内存周期。

这种传送方式的时间图如下:

与停止CPU访内的DMA方法比较,周期挪用的方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。但是I/O设备每一次周期挪用都有申请总线控制权、建立总线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2—5个内存周期(视逻辑线路的延迟而定)。因此,周期挪用的方法适用于I/O设备读写周期大于内存存储周期的情况。

3.DMA与CPU交替访内:

如果CPU的工作周期比内存存取周期长很多,此时采用交替访内的方法可以使DMA传送和CPU同时发挥最高的效率。假设CPU工作周期为 1.2μs,内存存取周期小于0.6μs,那么一个CPU周期可分为C1和C2两个分周期,其中C1供DMA控制器访内,C2专供CPU访内。这种传送方式的时间图如下:

  这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时进行的。CPU和DMA控制器各自有自己的访内地址寄存器、数据寄存器和读/写信号等控制寄存器。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内请求,同样传送地址、数据等信号。事实上,对于总线,这是用C1,C2控制的一个多路转换器,这种总线控制权的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。

  这种传送方式又称为“透明的DMA”方式,其来由是这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。

 

 

8.3.3 基本的DMA控制器      

1.DMA控制器的基本组成

  一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路。这个接口电路是在中断接口的基础上再加DMA机构组成。其逻辑示意图见文字教材图8.12。

一个最简单的DMA控制器由以下逻辑部件组成:

(1)内存地址计数器 用于存放内存中要交换的数据的地址。在DMA传送前,须通过程序将数据在内存中的起始位置(首地址)送到内存地址计数器。而当DMA传送时,每交换一次数据,将地址计数器加“1”,从而以增量方式给出内存中要交换的一批数据的地址。

(2)字计数器用于记录传送数据块的长度(多少字数)。其内容也是在数据传送之前由程序预置,交换的字数通常以补码形式表示。在DMA传送时,每传送一个字,字计数器就加“1” ,当计数器溢出即最高位产生进位时,表示这批数据传送完毕,于是引起DMA控制器向CPU发中断信号。

(3)数据缓冲寄存器 用于暂存每次传送的数据(一个字)。当输入时,由设备(如磁盘)送往数据缓冲寄存器,再由缓冲寄存器通过数据总线送到内存。反之,输出时,由内存通过数据总线送到数据缓冲寄存器,然后再送到设备。

(4)“DMA请求”标志每当设备准备好一个数据字后给出一个控制信号,使“DMA请求” 标志置“1”。该标志置位后向“控制/状态”逻辑发出DMA请求,后者又向CPU发出总线使用权的请求(HOLD),CPU响应此请求后发回响应信号HLDA,“控制/状态”逻辑接收此信号后发出DMA响应信号,使“DMA请求”标志复位,为交换下一个字做好准备。

(5)“控制/状态”逻辑 由控制和时序电路以及状态标志等组成,用于修改内存地址计数器和字计数器,指定传送类型(输入或输出),并对“DMA请求”信号和CPU响应信号进行协调和同步。

(6)中断机构 当字计数器溢出时(全0),意味着一组数据交换完毕,由溢出信号触发中断机构,向CPU提出中断报告。这里的中断与上一节介绍的I/O中断所采用的技术相同,但中断的目的不同,前面是为了数据的输入或输出,而这里是为了报告一组数据传送结束。因此它们是I/O系统中不同的中断事件。

2.DMA数据传送过程

  DMA的数据块传送过程可分为三个阶段:传送前预处理;正式传送;传送后处理。

  预处理 由CPU执行几条输入输出指令,测试设备状态,向DMA控制器的设备地址寄存器中送入设备号并启动设备,向内存地址计数器中送入起始地址,向字计数器中送入交换的数据字个数。在这些工作完成后,CPU继续执行原来的主程序。

  正式传送当外设准备好发送数据(输入)或接受数据(输出)时,它发出DMA请求,由DMA控制器向CPU发出总线使用权的请求(HOLD)。下图示出了停止CPU访内方式的DMA传送数据的流程图。

图8.13 DMA传送数据的流程图

  DMA的数据传送是以数据块为基本单位进行的,因此,每次DMA控制器占用总线后,无论是数据输入操作,还是输出操作,都是通过循环来实现的。当进行输入操作时,外围设备的数据(一次一个字或一个字节)传向内存;当进行输出操作时,内存的数据传向外围设备。

  后处理 一旦DMA的中断请求得到响应,CPU停止主程序的执行,转去执行中断服务程序做一些DMA的结束处理工作。这些工作包括校验送入内存的数据是否正确;决定继续用DMA方式传送下去,还是结束传送;测试在传送过程中是否发生了错误等等。

基本DMA控制器与系统的连接方式:

 

(1)公用的DMA请求方式;(2)独立的DMA请求方式,这与中断方式类似。

8.3.4 选择型和多路型DMA控制器:

1.选择型DMA控制器

  选择型DMA控制器在物理上可以连接多个设备,而在逻辑上只允许连接一个设备。换句话说,在某一段时间内只能为一个设备服务。

  选择型DMA控制器的逻辑框图请见CAI演示。 

选择型DMA控制器的工作原理

  与前面的简单DMA控制器基本相同。除了前面讲到的基本逻辑部件外,还有一个设备号寄存器。数据传送是以数据块为单位进行的,在每个数据块传送之前的预置阶段,除了用程序中I/O指令给出数据块的传送个数、起始地址、操作命令外,还要给出所选择的设备号。从预置开始,一直到这个数据块传送结束,DMA控制器只为所选设备服务。下一次预置再根据I/O指令指出的设备号,为另一选择的设备服务。显然,选择型DMA控制器相当于一个逻辑开关,根据I/O指令来控制此开关与某个设备连接。

  选择型DMA控制器只增加少量硬件达到了为多个外围设备服务的目的,它特别适合数据传输率很高以至接近内存存取速度的设备。在很快地传送完一个数据块后,控制器又可为其他设备服务。

2.多路型DMA控制器

  选择型DMA控制器不适用于慢速设备。但多路型DMA控制器适合于同时为多个慢速外围设备服务。

  链式多路型DMA控制器和独立请求方式多路型DMA控制器请见CAI演示。

  多路型DMA不仅在物理上可以连接多个外围设备,而且在逻辑上也允许这些外围设备同时工作,各设备以字节交叉方式通过DMA控制器进行数据传送。

【例3】下图中假设有磁盘、磁带、打印机三个设备同时工作。磁盘以30μs的间隔向控制器发DMA请求,磁带以45μs的间隔发DMA请求,打印机以150μs间隔发DMA请求。根据传输速率,磁盘优先权最高,磁带次之,打印机最低,图中假设DMA控制器每完成一次DMA传送所需的时间是5μs。若采用多路型DMA控制器,请画出DMA控制器服务三个设备的工作时间图。

图8.16 多路DMA控制器工作时间图

【解】

由图看出,T1间隔中控制器首先为打印机服务,因为此时只有打印机有请求。T2间隔前沿磁盘、磁带同时有请求,首先为优先权高的磁盘服务,然后为磁带服务,每次服务传送一个字节。在150μs时间阶段中,为打印机服务只有一次(T1),为磁盘服务四次(T2,T4,T6,T7),为磁带服务三次(T3,T5,T8)。从图上看到,在这种情况下DMA尚有空闲时间,说明控制器还可以容纳更多设备。

  由于多路型DMA同时要为多个设备服务,因此对应多少个DMA通路(设备),在控制器内部就有多少组寄存器用于存放各自的传送参数。

  多路型DMA控制器的逻辑结构请见文字教材图8.17。通过配合使用I/O通用接口片子,多路型DMA控制器可以对8个独立的DMA通路(CH)进行控制,使外围设备以周期挪用方式对内存进行存取。

  8条独立的DMA请求线或响应线能在外围设备与DMA控制器之间进行双向通信。一条线上进行双向通信是通过分时和脉冲编码技术实现的。也可以分别设立DMA请求线和响应线实现双向通信。每条DMA线在优先权结构中具有固定位置,一般DMA0线具有最高优先权,DMA7线具有最低优先权。

  控制器中有8个8位的控制传送长度的寄存器,8个16位的地址寄存器。每个长度寄存器和地 址寄存器对应一个设备。每个寄存器都可以用程序中的I/O指令从CPU送入控制数据。每一寄 存器组各有一个计数器,用于修改内存地址和传送长度。

当某个外围设备请求DMA服务时,操作过程如下:

(1)DMA控制器接到设备发出的DMA请求时,将请求转送到CPU。

(2)CPU在适当的时刻响应DMA请求。若CPU不需要占用总线则继续执行指令;若CPU需要占用 总线,则CPU进入等待状态。

(3)DMA控制器接到CPU的响应信号后,进行以下工作:①对现有DMA请求中优先权最高的请求 给予DMA响应;②选择相应的地址寄存器的内容驱动地址总线;③根据所选设备操作寄存器 的内容,向总线发读、写信号;④外围设备向数据总线传送数据,或从数据总线接收数据; ⑤每个字节传送完毕后,DMA控制器使相应的地址寄存器和长度寄存器加“1”或减“1”。 

  以上是一个DMA请求的过程,在一批数据传送过程中,要多次重复上述过程,直到外围设备表示一个数据块已传送完毕,或该设备的长度控制器判定传送长度已满。 

【例4】教材图8.18所示为微型机中软盘控制器的系统接口电路,请进行分析说明。

转载于:https://www.cnblogs.com/yeahwell/p/4720770.html


https://dhexx.cn/news/show-17109.html

相关文章

Filebeat入门及使用-2 从文件读入,控制台输出

1 新建配置文件 a_1.yml # 输入 filebeat.inputs: - type: logenabled: truepaths:- /data/logs/test.log- /data/logs/2.log # 输出 output.console:pretty: trueenable: true 2 指定配置文件运行filebeat 命令:./filebeat -e -c a_1.yml 3 用另一个窗口&…

OC语言-02-OC语言-基础知识

一、基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言OC语言继承了C语言,并增加了面向对象的思想以下内容只介绍OC语言与C语言的不同之处2> 关键字 OC语言的关键字大部分以开头,也有小部分一字母或下划线开头3…

aip格式转化为pdf_图片转pdf快速转换方法?为你轻松解决格式问题

图片怎么转pdf?很多时候在网上下载了很多有用的学习资料,但是很多时候都是图片格式,图片格式根本不好编辑而且也不够清晰!那么能把图片转换PDF文件,更加清晰而且能够被编辑和合并,也更利于整理,…

ArcGIS10.2 网络分析之路径分析(一)---构建要素集

ArcGIS 网络分析之路径分析 说明: 1、本文主要是为了介绍网络分析服务及开发的流程,不会对网络分析服务的每一个细节进行探讨, 2、在进行以下分析之前要准备好路网图层的shp文件,如果没有需要自己建立; 3、主要通过路径…

Filebeat入门及使用-3 文件输入,ES中输出

ES7.6.1 安装,可参考博文【ElasticSearch】 ElasticSearch安装(一) - H__D - 博客园 1 新建配置文件 a_3.yml # 输入 filebeat.inputs: - type: logenabled: truepaths:- /data/logs/*.log# 指定索引的分区数 setup.template.settings:inde…

raid5通常需要几块盘_从原理到实现,RAID5原理详解及代码实现浅析

前文我们介绍了Linux下面的RAID技术基本原理,并通过RAID1介绍了其大致的实现流程。今天我们介绍一下RAID5,因为RAID5还是比较复杂的,因此觉得有必要介绍一下。RAID5的算法关于RAID5的算法,我们在网上看到最多的一张图恐怕就是下面…

工作总结

一.付出不亚于任何人的努力. 二.要谦虚,不要骄傲. 三.要每天反省. 四.人活着,要回会感恩. 五.积善行,思利他. 六.不要有感性的烦恼. 过去的失败,反省之后就坚决把它忘掉,将精力投进新的工作.转载于:https://www.cnblogs.com/xiaoguozi0218/p/4725503.html

二级指针也引用

#include <iostream>void fun1(int*& p)//引用p等于就是传过来的p&#xff0c;引用改变了p也就改变了 {p new int;*p 90; }void fun2(int** p)//直接将指针的地址传过来&#xff0c;直接通过指针的地址操作指针 {*p new int;**p 90; }int main() {int *p;fun1(p)…

Filebeat入门及使用-4 自定义标签和字段,文件输入,ES输出,并用kibana展示

作用&#xff1a;在日志中设置一些个性化的标记&#xff0c;方便后期做处理 tags 和 fields 添加其中一个&#xff0c;或都添加&#xff0c;都可以&#xff0c;自己确定1 新建配置文件 a_4.yml # 输入 filebeat.inputs: - type: logenabled: truepaths:- /data/logs/*.log# Be…

c语言double型小数点后几位_C语言探索之旅 | 第一部分第五课:变量的世界(二),变量声明...

内容简介变量是什么&#xff1f;给变量起个名字变量的类型声明变量const 关键字第一部分第六课预告1. 变量是什么&#xff1f;上一课我们学习的是 C语言探索之旅 | 第一部分第四课&#xff1a;变量的世界(一)&#xff0c;内存那档事 。相信我&#xff0c;上一课对于内存的初探绝…