美团笔试题:DMA的基本概念

有这样一道美团笔试题:


关于DMA 的说法,哪些是错误的?

A.DMA,Direct Memory Access 直接存储器访问,使得不同速度的硬件设备可以直接通信,不通过 CPU 干预

B.DMA 访问的时候需要从 CPU 那里夺得总线控制权

C.DMA 速度快

D.DMA 不需要中断控制


答  案:A、D


  析: DMA Direct Memory Access 的缩写,翻译为直接存储器访问。 DMA 是一种 I/O 方式,主要用于像磁盘一类的快速设备与主机交换数据。这类设备采用成批数据传送方式,一旦启动设备进行数据传输,设备便以较高的数据传输率读出或写入数据。


DMA方式下,为了控制外设和主存直接交换数据,需要有专门的数据传送控制电路,通常把这样的控制逻辑称为DMA控制器。整个过程分以下三个阶段:


(1)DMA控制器初始化。首先,对DMA控制器和设备接口中的参数寄存器进行初始化,以设定主存首地址、传送数据个数、传送方向(读出/写入)、设备地址(如磁头号、磁道号、起始扇区号)等,这些初始化工作由CPU执行指令完成。初始化工作的最后是向外设接口发送启动读或写的命令。


(2)DMA传送。外设接口接受到CPU送来的启动命令后,就开始控制设备进行读或写操作,当外设准备好数据以后,外设接口就会向DMA控制器发送相应的“DMA请求”信号,DMA控制器接受到该信号后,就会向CPU发送“总线请求”信号,要求CPU释放总线,请求由DMA控制器控制总线以进行外设和主存之间的数据交换。CPU总是在一个总线事务结束后让出总线。DMA控制器每传送一个数据,就使数据个数计数器减1。当该计数器为0时,表示传送过程结束。此结束信号被送到外设接口,引起外设接口向CPU发送一个“DMA传送结束”中断请求。


(3)DMA结束处理。当CPU接收到“DAM传送结束”中断请求后,就调出相应的中断服务程序进行DMA结束处理。


选项A中前半部分的描述是正确的,但是,显然,“DMA使得不同速度的硬件设备可以直接通信,不通过 CPU 干预”这句话存在问题。首先,DMA传送方式用于快速设备和主存之间直接交换数据,而不是用于不同速度的设备之间直接通信;其次,DMA传送之前和DMA传送之后,还是需要CPU参与,并不是完全不需要CPU干预。


选项B是正确的。如果在DMA需要访问主存时,正好CPU也正好需要访问主存或正在访问主存,那么,DMA控制器的优先级比CPU的优先级更高,CPU会让出总线。如果DMA需要访问主存时,总线正好是空闲的,那么,DMA控制器可直接使用总线。


选项C是正确的。无论把“DMA速度快”理解成“采用DMA方式进行输入输出时外设和主机之间的数据传输速度快”,还是理解成“采用DMA方式进行输入输出时CPU利用率高,从而使得整个系统的处理速度加快”,把“DMA”和“速度快”关联起来总是正确的。


选项D是错误的。DMA控制输入输出方式下,在DMA传送结束时,外设会向CPU发出“DMA传送结束”中断请求,由CPU执行中断服务程序来进行DMA结束处理。


本文已收录于《横扫Offer--程序员招聘真题详解700题》一书,开点工作室著,清华大学出版社,该书目前已编写修改完成,7月即将上市。更多程序员笔试面试真题的精彩详解请参见该书。

全部评论
答案那栏写错了哦,应该写AC
点赞 回复 分享
发布于 2016-07-13 08:21

相关推荐

叁六玖:你看,最后不是让你加油,就是鼓励你,还祝福你求职顺利。
点赞 评论 收藏
分享
10-09 17:17
已编辑
门头沟学院 Java
活泼的代码渣渣在泡池...:同学你好,我也是学院本,后天要面这个亚信科技,是实习,请问问题都啥样呀,我项目就做了网上的,这是第一次面试
投递多益网络等公司10个岗位
点赞 评论 收藏
分享
10-23 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
评论
5
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务