小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

计算机组成原理笔记第五章(5.6)

2018年10月14日 1691点热度 0人点赞 0条评论

第六节 DMA方式

一、DMA方式的特点

DMA是直接存储器访问的意思。

1.DMA和程序中断两种方式的数据通路

图6.1 DMA和程序中断两种方式的数据通路

由图6.1所示,由于主存和DMA接口之间有一条数据通路,因此主存和设备交换信息时,不通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场,因此工作速度比程序中断方式的工作速度高。这一特点特别适合于高速I/O或辅存与主存之间的信息交换。因为高速I/O设备每次申请与主机交换信息时,都需要等待CPU做出中断响应后在进行,很可能因此丢失数据。

2.DMA与主存交换数据的三种方式

在DMA方式中,由于DMA接口与CPU共享主存,这就有可能出现两者争用主存的冲突,为了有效分时使用主存,通常DMA与主存交换数据时采用如下三种方法:

(1)停止CPU访问主存。这种方式中,实际上只要外部设备要和内存数据交换,那么一块数据交换过程中,从第一个数据开始CPU就放弃了总线控制权,放弃了对内存的访问权,把这些权都交给了DMA。适合大量数据传输。这种方式控制简单,但是CPU出于不工作状态或保持状态,未充分发挥CPU对主存的利用率。

(2)周期挪用(周期是指访存周期)。

DMA访问主存有三种可能:

①CPU此时不访问。那么就直接分配给DMA就可以了。

②CPU正在访存。DMA只能等待。

③CPU与DMA同时请求访存。此时CPU将总线控制权让给DMA。

图6.2 周期挪用示意图

    如图6.2所示。数据准备好了,DMA就会窃取一个或多个主存周期完成数据传输。在数据准备时候,CPU可以控制和使用主存。提高了利用率。

(3)DMA和CPU交替访问。实用性不强。

CPU工作周期分为C1和C2两段时间,C1专供DMA访存,C2专供CPU访存。这种方法不需要申请建立和归还总线的使用权。如图6.3所示。

图6.3 DMA与CPU交替访问示意图

二、DMA接口的功能和组成

1.DMA接口功能

(1)向CPU申请DMA传送

(2)处理总线控制权的转交。

(3)管理系统总线、控制数据传送

(4)确定数据传送的首地址和长度,修正传送过程中的数据地址和长度。

(5)DMA传送结束时,给出操作完成信号。

2.DMA接口的组成

图6.4 DMA接口的组成

DMA接口是一个黑盒子,根据功能可以分析其结构。要进行数据传输,CPU要告诉DMA接口传输的内存地址是什么,所以需要一个地址寄存器(AR),需要知道数据量,所以需要一个计数器(WC),假设传入内存或者从内存输出,假设是从低地址开始,每次传输的数据单位和编址单位一致,每完成一个数据输入或输出,就要对地址进行修改,进行+1。WC保存的是一个补码,每传输一次要+1,我们需要一个数据缓存器,即BR。另外我们还需要一个设备地址寄存器(DAR),用来设备选择电路使用,还用来对硬盘进行访问时,保存硬盘的磁道号扇区号等。AR把要访问的地址送给主存,通过数据线要给AR置值,设备地址也通过数据线。外部设备直接用BR相连。

输入输出需要DMA控制逻辑,用来内部协调,控制在给定时序发出给定信号。外部设备要向DMA控制逻辑DREQ,DMA控制逻辑给出应答DACK信号,DMA还得通过总线向CPU发出总线请求信号HRQ,CPU回复HLDA。DMA接口电路还有一个中断机构,用于数据传输完成后对后续工作进行处理的。

具体各部分功能如下:

(1)主存地址寄存器(AR)。AR用于存放主存中需要交换数据的地址。在DMA传送数据前,必须通过程序将数据在主存中的首地址送到主存地址寄存器。在DMA传送过程中,每交换一次数据,AR+1,直到一批数据传输完成。

(2)字计数器(WC)。WC用于记录传送数据的总字数,通常以交换字数的补码值预置。在DMA传送过程中,每传送一个字,WC+1,直到计数器为0时,表示该批数据传送结束,于是DMA接口向CPU发送中断请求信号。

(3)数据缓冲寄存器(BR)。BR用于暂存每次传送的数据。

(4)DMA控制逻辑。DMA控制逻辑负责管理DMA的传送过程,由控制电路、时序电路和命令状态控制寄存器组成。

(5)中断机构。当一批数据交换完毕,由“溢出信号”通过终端机构向CPU提出中断请求,请求CPU作DMA操作的后续处理。

(6)设备地址寄存器(DAR)。DAR存放I/O设备的设备码或表示设备信息存储区的寻址信息,如对硬盘进行访问时,保存硬盘的磁道号扇区号等。具体内容取决于设备的数据格式和地址的编址方式。

三、DMA的工作过程

1.DMA传送过程:预处理、数据传送、后处理

(1)预处理

通过几条输入输出指令预置如下信息:

①通知DMA控制逻辑传送方向(入/出);

②设备地址àDMA的DAR;

③主存地址àDMA的AR;

④传送字数àDMA的WC。

(2)DMA传送过程示意

图6.5 数据传送流程

图6.5左侧是DMA传送过程,右侧是数据传送阶段的细化。结合图6.4可以描述一下数据输入传送过程:

①当设备准备好一个字时,发出选通信号,将该字读到DMA的BR中,表示BR“满”。

②与此同时,设备向DMA接口发请求(DREQ)。

③DMA接口向CPU申请总线控制权(HRQ)。

④CPU发回HLDA信号,表示允许将总线控制权交给DMA接口。

⑤将DMA主存地址寄存器中的主存地址送地址总线,并命令存储器写。

⑥通知设备已被授予一个DMA周期(DACK),并为交换下一个字做准备。

⑦将DMA数据缓冲寄存器的内容送数据总线。

⑧主存将数据总线上的信息写至地址总线指定的存储单元中。

⑨修改主存地址和字计数值。

⑩判断数据块是否传送结束,若未结束,继续传送;若已结束(WC溢出),则向CPU申请程序中断,标志数据块传送结束。

结合图6.4可以描述一下数据输出传送过程,如图6.6所示:

①当DMA数据缓冲寄存器已将输出数据送至I/O设备后,表示数据缓冲寄存器已“空”。

②设备向DMA接口发请求(DREQ)。

③DMA接口向CPU申请总线控制权(HRQ)。

④CPU发回HLDA信号,表示允许将总线控制权交给DMA接口。

⑤将DMA主存地址寄存器中的主存地址送地址总线,并命令存储器读。

⑥通知设备已被授予一个DMA周期(DACK),并为交换下一个字做准备。

⑦主存将相应地址单元的内容通过数据总线读入到DMA的数据缓冲寄存器中。

⑧将DMA数据缓冲寄存器的内容送到输出设备,若为字符设备,则需将其拆成字符输出。

⑨修改主存地址和字计数值。

⑩判断数据块是否传送结束,若未结束,继续传送;若已结束,则向CPU申请程序中断,标志数据块传送结束。

图6.6 输出过程演示图

(3)后处理——中断服务程序完成

当DMA的中断请求得到响应,后,CPU停止源程序的执行,转去执行中断服务程序,做一些DMA的结束工作,包括:

①校验送入主存的数据是否正确;

②决定是否继续使用DMA传送其它数据块,若继续传送,则又要对DMA进行初始化,若不需要传送,则停止外设;

③测试在传送过程中是否发生错误,若出错则转错误诊断及处理错误程序。

2.DMA接口与系统的连接方式

(1)具有公共请求线的DMA请求

图6.7 公共请求线的DMA请求

(2)独立的DMA请求

图6.8 独立的DMA请求

排队工作是在CPU内部完成。

3.DMA方式与程序中断方式的比较

中断方式 DMA方式
数据传送 程序 硬件
响应时间 指令执行结束 存取周期结束
处理异常情况 能 不能
中断请求 传送数据 后处理
优先级 低 高

 

四、DMA接口类型

1.选择型:在物理上连接多个设备,在逻辑上只允许连接一个设备。如图6.9所示。

图6.9 选择型接口

2.多路型:在物理上连接多个设备,在逻辑上允许连接多个设备同时工作(数据准备的时候),在真正数据传输的时候,只能一个设备工作。

图6.10 多路型接口

假设磁盘每隔30微秒提出数据请求,这30微秒包括数据传送和数据准备时间,磁带每隔45微秒提出一次DMA请求,打印机隔150微秒提出DMA请求,并假设真正数据传输是5微秒。一个多路型接口连接了这3个设备。

由于打印机是最早提出请求的,那么首先响应打印机请求,把5微秒时间给打印机数据传输,这个5秒结束后,磁盘和磁带同时发出请求,速度越高的设备优先级越高,所以优先响应磁盘的操作,用5微秒进行数据传输,响应完磁盘后响应磁带的请求。以此类推下去,这就是整个过程。

图6.11 多路型DMA接口的工作原理

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 计算机组成原理
最后更新:2018年10月14日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
志愿高校团体掠影 Java语言程序设计(进阶)(第八章)整理 算法笔记之线性规划网络流问题(2) Leetcode题目解析(191022) [leetcode]题目解析(190423) 元旦竞猜活动开启
标签聚合
Python 生活 高中 python学习 鸟哥的linux私房菜 Java 学习 算法 leetcode linux
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号