说实话在408计算机组成原理里I/O这一章内容少、考法稳但恰恰是很多同学最容易丢分的地方。尤其是DMA方式别看概念就那么几句话真正做题的时候什么时候响应中断、什么时候挪用周期、CPU怎么让出总线浑水摸鱼的细节一个比一个多。今天这篇就把DMA方式从头到尾捋一遍结合唐朔飞教材和王道课上的常见说法再把三种总线仲裁方式、完整传送流程、DMA和中断的对比表格说透最后用408真题常考的题型演示做题思路。不管你现在刚复习到I/O还是已经在刷真题这篇文章都能当一份直接拿来用的复习笔记。1. I/O设备与主机信息传送的四种控制方式DMA到底站在什么位置1.1 程序查询方式CPU忙到死效率最差先看最原始的方式——程序查询方式。这种方式的核心逻辑很简单CPU不断读取设备的状态寄存器发现设备准备好就执行数据传送没准备好就一直等。等于你一边写作业一边不停看手机消息消息没来也得盯着屏幕CPU的大段时间全部消耗在等待上。因为没有中断机制CPU和设备之间是串行工作的设备在工作的这段时间CPU几乎是空转。所以程序查询方式的优点是硬件结构简单、控制逻辑容易实现缺点也极其明显CPU利用率极低I/O期间CPU无法处理其他任务。在408考试中这个方式一般只考两个点查状态的那条指令循环以及它和中断方式的对比。不会出太深的题目但你要能一眼判断出什么场景下适合用查询方式——比如对实时性要求不高、设备速度很慢的情况。1.2 程序中断方式让CPU从轮询中解脱但传输还得靠CPU到了程序中断方式CPU终于不用死等设备了。设备完成准备后主动发中断请求CPU暂停当前程序去执行中断服务程序也就是中断响应→中断处理→中断返回这个流程。这里要注意中断方式解决的只是CPU不用轮询的问题数据的传输本身还是在中断服务程序里由CPU执行指令完成的。什么意思呢比如从键盘输入一个字符设备准备好之后向CPU发中断CPU响应中断进入中断服务程序后执行输入指令把字符从设备的数据缓冲寄存器读到CPU的寄存器再写到内存。每个字符来一次都要经历保护现场→传输数据→恢复现场→返回断点这一整套开销。所以中断方式适合数据量小、但设备速度不快的场景比如键盘、打印机。CPU虽然解放了轮询的时间但每次传输数据都要被中断一次对高频数据传送来说仍然吃不消。1.3 DMA方式的定位数据搬运交给专用硬件DMADirect Memory Access直接存储器存取方式的核心思想就一句话数据在内存和外设之间的传送不再经过CPU的寄存器中转而是由专门的DMA控制器直接控制总线来完成。CPU只在传输开始前做准备工作在传输结束后做收尾工作。中间那一大段数据搬运CPU完全可以干别的事这是DMA和中断方式最大的分野。你就想象成大货车司机设备运送货物进仓库内存传统方式是每搬一箱货都要叫老板CPU过来清点入库老板啥也干不了DMA方式是老板提前写好入库单和货位安排然后雇了一个专门的仓库调度员DMA控制器在门口盯着货车直接开进仓库卸货老板继续开他的会。传送结束调度员再报告一声。效率差距一目了然。1.4 还有一条通道方式但408重心不在它教材上通常把I/O控制方式列成四种程序查询、程序中断、DMA和通道。通道方式其实是DMA思想的进一步延伸——通道是一个更独立、更智能的I/O处理器能执行一组通道指令来完成更复杂的I/O管理。但在408统考当中通道方式的占比非常小绝大多数年份压根不考最多在选择题选项里出现一个干扰项。你只要知道通道方式比DMA更高级、CPU介入程度更低就够了不用花太多时间深挖。2. DMA方式的核心原理和硬件组成2.1 一次DMA传送的三个阶段预处理、数据传送、后处理DMA的一次完整传送过程按教材的经典划分是三个阶段。预处理阶段由CPU执行指令完成设置传送方向是外设往内存写还是内存往外设读给DMA控制器的内存地址寄存器赋初始地址给字计数器赋传送的数据块长度并向DMA控制器发出启动命令。数据传送阶段是DMA控制器自动完成的不需要CPU参与。它按一次传送一个字节或者一个字地控制总线每传送一个数据单元后修改内存地址寄存器和字计数器直到计数器归零或者收到外设发来的传送结束信号。后处理阶段DMA控制器向CPU发送中断请求CPU响应后执行中断服务程序做一些善后工作比如检查传送过程有没有出错、更新一些状态变量等。我把这三个阶段反复强调因为很多题会让你判断数据传送过程中CPU在干嘛答案就是CPU可以继续执行原来的程序这才是DMA的灵魂。2.2 DMA控制器的核心部件寄存器组和逻辑电路要理解DMA就得看懂DMA控制器的内部结构。唐朔飞教材上那张DMA控制器框图可以说是必背图。组件主要有以下几个。内存地址寄存器MAR用来存放当前要访问的主存地址每传送一个数据单元就自动加1。字计数器WC用来记录剩余待传送的字数或字节数每传一次减1减到0表示数据块传送完毕。数据缓冲寄存器DR用来暂存外设和主存之间的数据它是数据传送的中转站。除此之外还有控制逻辑电路、中断机构、设备地址寄存器等。把这几个寄存器搞明白实际上很多题就是围绕它们展开的。比如有的选择题会问DMA传送结束后怎么判断数据块传送完了答案就是字计数器归零。有的题问DMA每传送一个数据单元哪些寄存器变化那就是内存地址寄存器加1、字计数器减1。这些细节点不止考记忆更考你是否真正理解了DMA的工作机制。2.3 数据传送模式单字传送和成组传送DMA数据块内部的传送组织方式有两种。单字传送指的是DMA控制器每获得一次总线控制权只传送一个字或一个字节传送完就释放总线下一次传送再重新申请。这种方式对CPU的影响比较均匀总线占用时间短适合设备数据速率比较高、总线竞争比较激烈的场景。成组传送方式指的是DMA控制器一旦拿到总线控制权就一直占用总线连续把整块数据传送完中间不释放。这种方式效率高但缺点是如果数据块很大CPU可能会长时间访问不了主存造成CPU停顿过久。可以理解成单字传送是每次搬一箱货搬完就让路成组传送是直接包下整条通道一次性搬完。这两种方式会在后面的总线仲裁方式里进一步体现因为总线仲裁方式本质上就是在讨论DMA怎么拿总线、拿多久的问题。3. 三种总线控制权获取方式DMA怎么和CPU相处3.1 停止CPU访存方式最粗暴代价最大DMA控制器申请总线成功后会向CPU发出一个停止信号迫使CPU放弃地址线、数据线、控制线的使用权。在DMA传送期间CPU完全无法访存等于整个主机被DMA接管。这种方式的控制逻辑最简单适合I/O设备数据传输速率很高的情况因为既然数据来得急DMA干脆就把总线霸占到底。但代价也很明显CPU在DMA传送期间几乎停止工作。虽然CPU仍然可以执行内部寄存器操作但只要涉及访存指令就无法执行相当于一个高速设备把整个CPU拖住了。所以这种方式在实际中很少单独使用更多是作为理解和对比的起点。3.2 周期挪用方式最常见408最爱考周期挪用方式的核心是DMA控制器每次只挪用CPU一个或几个主存周期传送一个数据单元然后立刻释放总线。CPU暂停访存的时间被压缩到极短每次最多就几个时钟周期对CPU总体性能的影响要小得多所以这是实际系统中最常用的一种方式也是408考试的重头戏。关键在于理解挪用这两个字。当外设准备好一个数据要传送时DMA控制器会在CPU正在执行指令的过程中插一脚强行占用一个存储周期去完成一次数据传送。如果恰好此时CPU也要访存两者就会发生冲突这时CPU得让出总线。判断题里常说DMA传送期间CPU被暂停严格来说在周期挪用方式下是不准确的应该说CPU只是被挪用的那几个存储周期中暂停访存其余时间照常运行。3.3 交替访存方式CPU和DMA轮流用互不干扰交替访存方式的思路是把一个存储周期分成两半前半个给CPU访存后半个给DMA访存两边轮流来。这样就省去了申请、释放总线的过程CPU和DMA各用各的时间片理论上不会产生冲突。但它的限制也很明显DMA的数据传送时机必须固定不能灵活适应外设速度的变化。如果外设传送速率不高就会白白浪费DMA那一半时间片。这种方式的实用性有限考试里更多是作为概念对比出现你要知道它的特点是透明二字因为它对CPU程序执行完全没有影响CPU感觉不到DMA的存在。3.4 三种方式对比一张表解决选择判断学习到这很多同学会有一个困惑三种方式到底怎么区分我给你整理一个对比表。对比维度停止CPU访存周期挪用交替访存DMA传送单位一个数据块一个数据单元字/字节一个数据单元总线占用时间整个数据块传送期间单个存储周期半个存储周期CPU受影响程度完全停止访存偶尔被挪用周期基本无感知控制逻辑复杂度最简单较复杂较复杂适用场景高速大批量传送大多数实际系统固定速率外设选择题只要看到每次传送一个字节/字后立即释放总线基本就是周期挪用。看到CPU完全不能访存是停止CPU访存方式。看到将存储周期一分为二是交替访存。这三个特征词记牢选择题基本不会错。4. DMA方式的完整工作流程和具体实例4.1 预处理阶段的操作顺序别搞混很多同学把DMA预处理阶段的步骤背得滚瓜烂熟但一做题就把顺序搞反。我按标准流程帮你拆一下。首先是CPU执行几条指令向外设接口和DMA控制器发送命令确定数据传送的方向。然后是初始化地址和计数器将要访问的主存起始地址送入DMA控制器的内存地址寄存器将传送的数据个数送入字计数器。最后是启动外设一旦外设准备好数据或者准备好接收数据就开始正式的DMA传送。这里要注意一个细节CPU往DMA控制器写寄存器的时候是通过一种特殊的DMA接口寄存器完成的这些寄存器在CPU看来是像外设接口一样编址的所以预处理本质上还是CPU通过访存或I/O指令去设置。理解这一点后面的过程你就不会觉得CPU到底怎么控制DMA很抽象了。4.2 数据传送阶段以磁盘读取为例数据传送阶段是DMA的核心我拿最常见的磁盘读取场景来走一遍。假设CPU要从磁盘读一批数据到内存。预处理阶段已经把主存起始地址和读取长度都设置好了外设也开始启动。第一步磁盘控制器把数据从盘片读出送入磁盘控制器的数据缓冲寄存器。第二步当数据准备好后磁盘控制器向DMA控制器发出DMA请求。第三步DMA控制器向CPU申请总线使用权获得批准后响应DMA请求接管总线。第四步数据从磁盘控制器的缓冲寄存器读出经由数据总线传送到内存的指定地址同时内存地址寄存器加1、字计数器减1。第五步如果字计数器不为零继续循环第二轮如果为零表示整个数据块传送完毕DMA控制器释放总线并向后处理阶段过渡。注意第四步里DMA传送数据时的数据通路并没有经过CPU的通用寄存器这一点和中断方式完全不同。中断方式里数据链路是外设→CPU寄存器→主存DMA是外设→DMA控制器数据缓冲寄存器→主存。CPU不碰数据本身只碰控制信息。4.3 后处理阶段DMA结束中断和普通中断的区别传送结束后需要通知CPU这时候DMA控制器会发出中断请求。但你要清楚这个中断请求的性质和一般的程序中断方式完全不同。DMA结束中断请求的目的不是为了传送每一个数据而是为了报告整个数据块已经传完了你可以来做善后了。这个区别非常关键因为有的题目会这么设计一个有10000个字节的数据块要通过DMA方式传送问你CPU会被中断几次。正确答案是1次因为DMA只在最后发一次中断如果是程序中断方式可能需要中断10000次。这一数字上的悬殊对比正是DMA适合高速大块数据传送的原因。后处理阶段CPU要做的事情包括检查DMA控制器的状态寄存器确认传送过程是否正确完成如果有校验错误则进行错误处理更新文件读写指针等相关数据结构恢复被中断的程序的现场并继续执行。4.4 内存往外设方向的DMA传送方向反过来流程镜像刚才讲的是外设往内存读的方向那内存往外设写呢流程是镜像对称的。预处理阶段设置方向为内存到外设并把起始地址和长度设好。传送阶段DMA控制器申请总线从内存指定地址读出数据暂时存入DMA控制器的数据缓冲寄存器然后写入外设的数据缓冲寄存器外设再将其输出。每传送一个数据单元同样改地址和计数。要注意这里涉及一个问题数据要先从内存搬到DMA控制器的缓冲寄存器然后再由外设取走。为什么不能直接内存到外设因为外设的速度往往比内存慢得多DMA控制器需要用一个缓冲寄存器先暂存数据等待外设准备好。所以DMA控制器的数据缓冲寄存器是数据传输的必经之路别把它当摆设。4.5 一个完整的计算例子数据量的匹配比如某记录仪采样频率是每秒10000个采样点每个采样点2字节那么每秒产生的数据量是20000字节。如果采用DMA方式进行数据块传送每个数据块大小为100字节请问平均每秒需要启动多少次DMA传送计算很简单每秒数据量除以每个数据块大小20000除以100等于200次。也就是说DMA控制器每秒需要完成200次数据块传送即平均5毫秒一次。这类计算题的变体很多但本质都是速率×单位大小的换算熟能生巧。5. DMA方式与中断方式的对比高频考点深度拆解5.1 五个关键维度的差异对比DMA和程序中断方式的区别几乎每年都有题目直接或间接考到。我把它们放到一张表里对照着看最清楚。对比维度程序中断方式DMA方式数据传送主体CPU执行中断服务程序DMA控制器硬件数据传送路径外设→CPU寄存器→主存外设→DMA缓冲寄存器→主存CPU介入程度每传送一个数据都要介入只需预处理和后处理响应时机指令执行结束后响应存储周期结束即可响应总线空闲时适用场景低速、小数据量设备高速、大数据块设备中断次数每个数据一次每个数据块一次这里面最容易考的两个点一是中断的响应时机程序中断必须等当前指令执行完才能响应而DMA在CPU不访存的间隙就能盗用总线二是中断次数DMA传送10000个字节只中断一次程序中断方式理论上要中断10000次。5.2 常见误区DMA中断和程序中断别混淆我批改作业时发现一个高频错误很多同学认为DMA传送过程中也要一直发中断请求。这是把DMA理解成了用硬件完成中断服务程序里的数据搬运但实际并非如此。DMA中断只发生在整个DMA传送结束时目的是告诉CPU数据块传完了。传送过程中DMA控制器是持续自动运行的不需要也不应该打断CPU。另一个误区是把DMA请求和中断请求混为一谈。DMA请求是DMA控制器向外设或总线仲裁逻辑提出的总线使用权申请属于硬件级的握手信号中断请求是设备或DMA控制器向CPU提出的程序级请求。一个发生于传送过程中一个发生于传送结束后。判断题里常设中断请求一次只能传送一个字节这种干扰项本质都是在考你对两者机制的理解。5.3 响应机制的更深层次差异程序中断方式中CPU响应中断是在一条指令执行结束后涉及程序断点的保存和恢复过程比较复杂。DMA方式下CPU对DMA请求的响应不需要保存断点只需要在总线空闲时让出总线使用权等DMA传送结束后继续执行原来的指令流。这也意味着DMA对程序的透明性更高CPU几乎无感知。更深入的教材内容还会提到程序中断方式不能保护现场因为CPU的响应需要保存断点并转入中断服务程序而DMA方式不破坏CPU现场因为CPU只是暂停访存几个周期寄存器和状态不受影响。考题中常出现的DMA传送过程中CPU是否需要保存现场答案就是不需要。抓到这一层判断题想错都难。6. 从408真题视角看DMA题型怎么做6.1 常见题型和分值分布DMA在试卷里长什么样DMA在408统考中主要出现在选择题和大题两种形态。选择题一般考基本概念比如四种方式的特征识别、DMA阶段判断、中断次数问题。大题则多和存储系统、总线仲裁结合比如给出一个设备的数据传输速率和应用场景要求分析应选用哪种传送方式或者结合周期挪用计算CPU的暂停时间。从历年真题的命题规律来看DMA这一块很少单独出特别复杂的计算题但经常作为综合题的一个小问出现可能是计算周期挪用比例也可能让你画DMA传送的流程框图。复习时不要只盯计算概念的准确表述同样重要。6.2 周期挪用计算题的标准解法周期挪用相关的计算题几乎是固定套路。我们以一道典型题来演示。某外设的数据传输率为2MB/s数据以4字节为单位进行DMA传送DMA周期挪用方式下每次挪用需占用一个存储周期存储周期为0.5μs求DMA操作占CPU时间的比例。解题第一步算每秒挪用的次数。数据传输率是2MB/s每次传送4字节那么每秒挪用次数 2MB ÷ 4B 524288次约52.4万次。第二步算每次挪用占用的时间一个存储周期0.5μs。第三步每秒挪用总时间 524288 × 0.5μs换算成秒约0.26秒。第四步比例 0.26秒 ÷ 1秒 26%。这个思路可以总结成公式挪用比例 (数据传输率 ÷ 每次传送字节数) × (一次挪用时间) ÷ 1秒。很多同学算错往往是把单位搞混数据率里的MB、KB和字节数没有统一。做题时先把所有单位统一成B/秒和秒再代入公式逻辑就完全清晰了。6.3 判断型题目的快速准确策略再来说判断型题目。给你一个设备让你选合适的控制方式这种题目要给一个判断的框架。第一看数据量大小每秒钟上千字节以上的优先考虑DMA或通道。第二看设备速度磁盘、高速网卡、图像采集设备这些基本是DMA。第三看实时性要求如果数据必须不间断地持续传送CPU中断方式可能来不及响应更适合DMA。有一个小技巧键盘、鼠标、打印机这类低速设备选程序中断方式磁盘、显卡、网络这类高速设备选DMA方式。选择题如果在这里犯迷糊可以先用这个经验法则定位再回头看题干有没有其他特殊条件。去年很多同学抱怨24年45题难其实就是把周期挪用和中断次数的概念混在一起先用上面这套判断框架锁定是周期挪用再按公式计算分数就拿到了。6.4 做题避坑清单最后给一份我总结的易错点清单。第一个是单位换算MB和B、μs和s之间的换算经常被忽略宁可多写一步也要求稳。第二个是CPU暂停不等于CPU停止周期挪用下CPU只是暂停访存不是完全停机有些题会在这个措辞上做文章。第三个是DMA传送单位有的题目说以字为单位有的说以字节为单位计算挪用次数时要严格按题目给的来。第四个是响应时机判断程序中断和DMA的区别时永远回到是否保存断点、是否介入数据传送这两个根本点。结尾一点实在的复习建议复习DMA这一块我最深的体会是别死记阶段名称和概念而是要抓住两条主线。一条是数据从外设到内存到底经过哪条路这是DMA和中断的本质分水岭另一条是DMA控制器和CPU之间的总线控制权怎么交接这是所有仲裁方式、挪用计算题的老家。真题里不管怎么出花样最后都能回到这两条线上。建议你把唐朔飞教材里的DMA控制器框图亲手画一遍再拿近五年的I/O选择题练手每道错题都回到这篇文章的对比表里定位效果比闷头刷十遍知识点快得多。
企业数字化 ERP 产品动态
相关推荐
用AD8544运放实现差分信号转单端:从原理到调试的完整指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:24:03
基于模型的强化学习:从样本效率到算法选型与工程实践 深度强化学习课程进入中段之后,讨论的重点往往从“怎么让智能体学会一个任务”转向“怎么让智能体更快、更省交互地学会一个任务”。伯克利 2026 春季深度强化学习课程把第 15 讲留给基于模型的强化学习(Model-Based Reinforcement Learning, MBRL&#… · 2026/9/28 1:24:03
嵌入式PT100温度查表法:精度、实时性与内存优化实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:24:03
Spingboot启动预热的实现 启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12
学Java别走弯路,这5个方向最吃香 学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25