DMA(Direct Memory Access)直接存储器存取

高速大容量存储器和主存之间交换时,若采用程序直接传送或程序中断传送的方式,则会有如下问题发生。
    1)采用程序直接传送,主机工作效率受到限制。
    2)采用中断控制数据传送可以提高主机效率,但用于高速外设和主机交换信息,会使主机处于频繁的中断与返回过程中,从而加重了与中断有关的额外负担(即保护旧现场,恢复新现场),这样降低了CPU的性能,还有丢失数据的可能。

DMA是l/O设备与主存之间由硬件组成的直接数据通路,主要用于高速I/O设备与主存之间的成组数据传送。
数据传送时是在DMA控制器控制下进行的,由DMA控制器给出当前正在传送的数据字的主存地址,并统计传送数据的个数以确定一组数据的传送是否已结束。在主存中要开辟连续地址的专用缓冲器,用来提供或接收传送的数据。在数据传送之前和结束后要通过程序或中断方式对缓冲器和DMA控制器进行预处理和后处理。
 对磁盘的读写是以数据块为单位进行的,一旦找到数据块的起始位置就将连续地读写。

一、DMA控制器

主要功能:

组成:

DMA控制器包括多个设备寄存器、中断控制和DMA控制逻辑等。主要的寄存器有:
  (1)主存地址寄存器(MAR):存放要交换数据的主存地址
  (2)外围设备地址寄存器(ADR):存放I/O设备的设备码,或者表示设备信息存储区的寻址信息。
  (3)字数计数器(WC):对传送数据的总字数进行统计。
  (4)控制与状态寄存器(CSR):用来存放控制字和状态字。
  (5)数据缓冲寄存器(DBR):暂存每次传送的数据。

二、DMA传送过程

DMA的数据传送过程可分为三个阶段:

DMA预处理
DMA数据传送
DMA传送后处理

在上面数据传送的过程中,CPU和DMA控制器访问主存时可能会产生冲突 ,争夺总线的访问权。那么应该如何安排CPU和DMA的访存?

三、DMA传送方式

四、DMA方式特点

五、DMA方式与中断方式比较

用一道例题来分析这两种方式对CPU的占用情况。

 使用DMA方式虽然预处理和后处理所占用的时钟周期开销比较大,但是由于传送的数据块比较大,一秒内需要CPU管理的次数就比较少,综合起来就是占用CPU时间的百分比比较小。

而中断方式,虽然一次中断所占用的时间比DMA预处理和后处理所占用时间小,但一次中断传送的数据量小,一秒内需要CPU管理的次数就比较多,所以占用CPU时间的百分比就比较大了。

对于该题,需要知道的是中断方式下,CPU用于访问外设的时间响应中断服务的时间开销;而DMA方式下,CPU用于访问外设的时间是DMA预处理和后处理的时间开销,数据传输的工作交给了CPU去执行。

六、总结

计算机组成原理——DMA存取方式的更多相关文章

  1. 计算机组成原理 — CPU 中央处理器

    目录 文章目录 目录 前文列表 逻辑电路部件 组合逻辑电路 时序逻辑电路 阵列逻辑电路 中央处理器(CPU) 控制单元(控制器) 运算单元(运算器) 存储单元(寄存器组和片内缓存) CPU 的工作原理 ...

  2. 计算机组成原理往年试题以及答案(tzf!!!)

    计算机组成原理往年试题以及答案(下载链接!!!) 太子妃升职记(1~36) ::http://pan.baidu.com/s/1dDP5Kqd

  3. linux的系统组成和计算机组成原理,linux常用操作

    Linux入门 linux简介   学习目的:linux服务器操作系统稳定长期运行,python,pycharm装于linux上 linux系统组成 应用软件:调用系统软件接口 linux操作系统分两 ...

  4. 计算机组成原理实验之CPU组成与指令周期实验

    (实验五  CPU组成与指令周期实验) 课程 计算机组成原理实验 实验日期 2015 年 12 月  8 日 一.实验目的 1.将微程序控制器同执行部件(整个数据通路)联机,组成一台模型计算机. 2. ...

  5. day01-编程与计算机组成原理

    什么是编程 编程语言:是人与计算机沟通交流的介质,通过标准化的规则传递信息 编程:就是为了使计算机能够理解人的意图,通过编程语言写出一个个文件,这堆文件完成相应的目的 编程的目的:用计算机取代人完成工 ...

  6. 【0725 | Day 1】计算机编程/计算机组成原理/计算机操作系统

    什么是编程 编程语言:人与计算机交流的手段 编程:通过编程语言编写文件 学习编程的目的:让计算机代替人力,为我们服务 计算机组成原理 计算机由五大部分组成:控制器.运算器.存储器.输入设备.输出设备. ...

  7. 重学计算机组成原理(五)- "旋转跳跃"的指令实现

    CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if-else.for这样的条件和循环存在,这些指令也不会一路平直执行下去. 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CP ...

  8. 重学计算机组成原理(六)- 函数调用怎么突然Stack Overflow了!

    用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面 ...

  9. 重学计算机组成原理(十)- "烫烫烫"乱码的由来

    程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二 ...

随机推荐

  1. 细解JavaScript ES7 ES8 ES9 新特性

    题记:本文提供了一个在线PPT版本,方便您浏览 细解JAVASCRIPT ES7 ES8 ES9 新特性 在线PPT ver 本文的大部分内容译自作者Axel Rauschmayer博士的网站,想了解 ...

  2. 建议3:正确处理Javascript特殊值---(1)正确使用NaN和Infinity

    NaN时IEEE 754中定义的一个特殊的数量值.他不表示一个数字,尽管下面的表达式返回的是true typeof(NaN) === 'number' //true 该值可能会在试图将非数字形式的字符 ...

  3. Provider模式应用demo

    参考ObjectPool对象池设计原理还原一个简易的Provider模式. using System; using System.Dynamic; using System.Reflection.Me ...

  4. POJ2182题解——线段树

    POJ2182题解——线段树 2019-12-20 by juruoOIer 1.线段树简介(来源:百度百科) 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线 ...

  5. CefSharp禁止弹出新窗体,在同一窗口打开链接,或者在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接

    说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 gi ...

  6. Android 插件化开发(三):资源插件化

    在前面的文章中我们成功的加载了外部的Dex(Apk)并执行了插件的Bean代码.这时我们会想,能不能加载并运行插件Apk的Activity.答案当然是能,否则后续我们的研究就没意义了,但是想实现Act ...

  7. leetcode——二分

    (1)4. 寻找两个有序数组的中位数(中) https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 给定两个大小为 m 和 n 的有 ...

  8. Linux ipv6 无状态 设置为 eui64

    Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...

  9. ROS--自定义消息类型

    一.msg 用于发布-订阅的通信方式中. 1.在包的src 中创建msg文件夹. 2.在msg文件夹中,创建.msg文件 3.编辑.msg文件 4.编辑package.xml , 添加依赖 <b ...

  10. Git实战指南----跟着haibiscuit学Git(第八篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...