尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DMA与磁盘计算:2022年408组成原理44题深度解析

DMA与磁盘计算:2022年408组成原理44题深度解析 2022年408考完那天晚上我的手机几乎没停过。好几个学生发来消息都在问同一道题组成原理44题磁盘读文件配DMA方式的那道大题。“DMA到底传了多少次”“旋转延迟到底要不要算”“CPU能不能干别的”说实话这道题的难度并不高它考来考去就是两个基本点——I/O设备与主机进行信息传送的控制方式里的DMA方式以及外存磁道、扇区的计算基本功。但就是这么两个“基本点”把不少认真复习的同学拦在了满分之外。我后来让考完的学生把题面复述给我再对照王道论坛的讨论基本上把这道题的结构摸清楚了。这篇文章我就结合这道44题把DMA和磁盘计算两块知识从头到尾讲透重点说清楚那些容易被忽略、却是得分关键的地方。1. 先还原题面考题到底在问什么1.1 考后回忆版题面的典型结构先说一句实话2022年44题的完整原题各家回忆版在数字上多少有点出入。这很正常考场上紧张状态下没有人能一字不差地把整道题背出来考后讨论时拼凑出来的版本也经常互相矛盾。但有一点很确定——题目结构是一致的磁盘参数在前读取任务在中DMA控制方式压轴。我在下面给出的参考题面就是综合了多位考生的回忆、再对照王道论坛讨论帖整理出来的最贴近原题的版本数字改动不影响知识结构。某磁盘转速为7200 r/min平均寻道时间为5 ms。每个磁道有200个扇区每个扇区容量为4 KB。磁盘控制器采用DMA方式与主机交换数据。现要从磁盘读取一个大小为4 MB的连续文件文件在磁道内连续存放磁道间切换的寻道时间忽略不计。 1计算该磁盘的数据传输率。 2计算读取该文件大致需要的总时间。 3采用DMA方式读取该文件需要进行多少次DMA传送DMA传送期间CPU能否执行其他程序为什么看完这个题面你会发现它给的每个条件都不是白给的。转速和平均寻道时间是做时间计算的两个基本参数每磁道扇区数和每扇区大小决定磁盘的容量布局也决定数据传输率DMA方式则把整个题目和I/O控制方式扣在一起。三问的设置也很有意思第一问考“设备本身有多快”第二问考“读一个文件要多久”第三问考“数据是怎么搬进主存的”。从设备参数到应用场景再到控制机制层层递进。1.2 考点定位DMA方式加外存计算从考纲角度看这道题覆盖了计算机组成原理里两个并列的知识模块。第一个模块是I/O方式。I/O设备与主机进行信息传送的控制方式一共四种程序查询方式、程序中断方式、DMA方式、通道方式。44题挑中了DMA是因为磁盘属于高速外存设备它的数据吞吐量太大用程序查询和程序中断方式根本扛不住——每读一个字节都要CPU介入内存在磁盘面前会变成瓶颈。DMA方式的最大价值在于“绕过CPU搬数据”CPU只需要在开始的时候做点准备工作中间完全放手数据搬完再来收尾。第二个模块是外存组织结构。磁盘的数据是按磁道、扇区来组织的磁道是盘面上一个个同心圆扇区是每个磁道上的固定大小分块。所有和磁盘相关的计算题——容量、数据传输率、寻道时间、旋转延迟——都建立在这套结构上。所以你会发现44题虽然是一道大题但它事实上是把两章的内容浓缩到一道题里考了。这也正是整份408试卷的常见风格不考孤立的记忆点而是考知识之间的衔接。理解到这一层你就知道命题人真正在意的是什么了。2. DMA方式I/O设备与主机信息传送的核心控制方式2.1 四种I/O控制方式DMA站在什么位置在展开解题之前我觉得有必要先把DMA放回四种I/O控制方式里看清楚。只有知道它和另外三种方式差在哪才算真正理解了“为什么磁盘要用DMA”否则第三问“CPU能否执行其他程序”很容易答偏。| 控制方式 | 数据传送单位 | CPU干预程度 | 典型设备 | | 程序查询方式 | 字节/字 | CPU完全参与循环检查状态设备每传一个字节/字CPU都要忙等 | 早期简单外设、低速设备 | | 程序中断方式 | 字节/字 | 设备每完成一次传送就发中断CPU暂停当前程序去执行中断处理程序后再返回 | 键盘、打印机等中低速设备 | | DMA方式 | 数据块磁盘场景下多对应一个扇区 | CPU只在预处理、结束后处理、出错时介入数据传送过程由DMA控制器完成 | 磁盘、光盘、高速网卡等 | | 通道方式 | 一组数据块数据组 | CPU只需启动通道通道执行通道程序管理多个I/O操作 | 大型机、多设备I/O系统 |程序查询方式的特点是“CPU迁就设备”CPU一直盯着设备状态寄存器设备好了就传没传完就继续等这段时间CPU什么事都干不了。程序中断方式把CPU从轮询里解放出来设备有了数据才打断CPU但传送动作本身还是由CPU执行的——每次中断都要保护现场、处理一个字节或一个字、恢复现场在高吞吐场景下中断次数会爆炸。DMA方式的革命性变化在于它把“搬运数据”这件事外包给了DMA控制器数据从设备缓冲区到主存的路径完全由DMA控制器控制不经过CPU的寄存器和ALU。这就好比程序中断方式是一个经理亲自跑腿送文件送完一趟回来接着干活DMA方式是经理派了个专职快递员填好地址后经理就干别的事去了快递员把一整车货送到仓库最后只汇报一声“送到了”。2.2 DMA传送的三个阶段CPU到底做了什么DMA操作可以拆成三个阶段每个阶段里CPU和DMA控制器的分工完全不同。第一个阶段是预处理。CPU要做的准备工作包括往DMA控制器写入主存首地址告诉它数据往哪里搬写入传送字节数或数据块数告诉它搬多少写入设备地址和操作方向告诉它从哪台设备哪个位置搬。写好之后CPU就可以回到主程序继续跑后面的事交给DMA控制器。第二个阶段是数据传送。DMA控制器接管数据搬运把磁盘控制器缓冲区里的数据一批批写入主存。磁盘读数据的过程大致是磁盘控制器先控制磁头从盘面某个扇区读出数据在控制器内部的缓冲区中组装成完整的扇区数据然后DMA控制器通过总线将这4 KB数据写到主存。一个扇区搬完DMA控制器内部的地址寄存器自动自增计数器自动减一接着搬下一个扇区。这个过程中CPU完全不需要参与它甚至感觉不到数据在流动。第三个阶段是后处理。当计数器减到零说明整个文件的数据全部搬完了。DMA控制器向CPU发出一个中断请求CPU响应这个中断去做校验数据、检查是否出错、决定下一步操作等工作。这个中断不同于程序中断方式中“每传送一个字节就中断一次”的中断而是整个DMA任务完成之后的一次性汇报。2.3 为什么磁盘的DMA传送次数要按扇区算44题第三问的核心就是“有多少次DMA传送”。要答对这个问题必须把磁盘结构和DMA机制接在一起磁盘按扇区组织每个扇区是盘面读写的最小单位。磁盘控制器不可能只读半个扇区出来磁头每次落到盘面上一读就是一个完整的扇区。而DMA控制器把数据搬进主存时自然也是按照控制器缓冲区里已经组装好的数据单位来搬一个扇区对应一次数据块的搬运。所以读一个文件需要多少次DMA传送本质上就是在问这个文件占用了多少个扇区。文件大小除以单个扇区大小就是扇区数也就是DMA传送次数。以参考题面为例4 MB除以4 KB正好是1024。这个换算关系在考试里非常常用我把它记成一句话磁盘的DMA传送次数 文件大小 ÷ 扇区大小在扇区大小就是一次DMA数据块大小的前提下成立。题目如果改成“DMA每次传送8个扇区”那就是除出来再除以8但真题一般不会绕这么大弯子。2.4 三种DMA工作方式别把“周期挪用”和“CPU暂停”搞混DMA控制器搬数据时要使用总线而CPU也要使用总线访问主存两者必然存在冲突。教材上给出了三种解决方式停止CPU访问主存DMA控制器要求CPU让出总线整个数据块传送期间CPU完全不能访存。适合高速设备批量传送但CPU被迫停工效率损失大。周期挪用DMA控制器在每个存储周期末尾或CPU不访存的间隙向CPU申请一个存储周期的总线使用权。CPU没有访存需求时DMA直接使用CPU正要访存就插队等待一个周期。这是考试最常见的设定。DMA与CPU交替访问把一个存储周期分成两个时间片一半给CPU访存一半给DMA硬件上要用双端口存储器支持。对CPU影响最小但硬件成本高多见于特定机型的存储器设计。44题第三问问“CPU能否执行其他程序”按周期挪用的标准理解答案是能。理由很简单数据搬运是由DMA控制器完成的CPU没有参与传送所以它可以继续执行主程序里不涉及和DMA争用总线的指令只有当前指令正好要访存、而DMA恰好又在挪用周期使用的时这条访存指令会被推迟一拍。但整体上看程序是在继续往下跑不存在“整段时间CPU全部空闲等待”的情况。3. 磁道与扇区计算题基本功3.1 从一道计算题里扒出来的四个公式磁盘计算题看似数字多其实底层公式只有那几个。我给它们排成一条链每磁道容量 每磁道扇区数 × 每扇区字节数。参考题面里200 × 4 KB 800 KB这代表磁盘转一整圈能够读出的最大数据量。磁盘数据传输率 每磁道容量 × 磁盘转速。注意转速必须换算成“转/秒”。7200 r/min 120 r/s因此数据传输率 800 KB × 120 96 000 KB/s。平均旋转延迟 磁盘旋转半圈所需时间。转速120 r/s时转一圈需要约8.333 ms半圈约4.167 ms。磁盘总容量 盘面数 × 每盘面磁道数 × 每磁道扇区数 × 每扇区字节数。参考题面没问总容量但很多年份的真题会连着总容量一起考这个公式也要顺手记住。这几条公式的关键不在背而在理解。传输率为什么等于每磁道容量乘转速因为磁头固定在某个磁道上时每转一圈就能把这个磁道的数据全部读出每秒转120圈自然每秒能读120个磁道的数据。旋转延迟为什么取半圈因为磁头当前所在的扇区位置和目标扇区之间的夹角是随机的从0到一整圈的概率均等平均下来就是半圈。3.2 读文件的三段式时间模型读取一个磁盘文件的总时间业界标准模型是三个分量相加平均寻道时间、平均旋转延迟、数据传输时间。寻道时间是把磁头从当前磁道移动到目标磁道的时间考试题直接给数参考题面是5 ms。旋转延迟是等目标扇区转到磁头下方的时间取半圈。数据传输时间是文件本身从盘面上读出来并传完的时间等于文件大小除以数据传输率。代入参考题面算一遍寻道时间 5 ms平均旋转延迟 0.5 × (1 / 120) s ≈ 4.167 ms数据传输时间 4 MB / 96 000 KB/s。把4 MB换成4096 KB4096 / 96 000 ≈ 0.04267 s ≈ 42.667 ms总时间 ≈ 5 4.167 42.667 ≈ 51.834 ms需要说明的是这个模型默认文件是连续存放的文件里的数据按磁道顺序排好整体读一遍只需要一次寻道。现实中一个大文件常常散布在磁盘不同位置每读一段都要重新寻道时间会大得多但考试题几乎总是用“连续存放”来简化。3.3 三个容易踩的坑第一坑是转速单位不换算。7200 r/min明明要除以60变成120 r/s很多同学直接拿7200去乘每磁道容量算出来的数据传输率大了60倍。从这一步错起后面所有结果全错。第二坑是旋转延迟忘记取半。等待目标扇区转到磁头下方时间最短是0正好就在磁头下面最长是一整圈刚转过去平均值是半圈。有些同学把一整圈时间当作平均旋转延迟写进答案第二问直接多出4 ms多的误差在按步给分的阅卷规则下很吃亏。第三坑是跨磁道条件没看清。44题的参考题面写了“磁道间切换的寻道时间忽略不计”所以总时间只计一次寻道。如果题目改成“文件跨磁道存放每条磁道切换耗时等于平均寻道时间”那4 MB文件占5.12个磁道实际需要占用6个磁道磁头要切换5次要额外加上5 × 5 25 ms总时间从51.8 ms变成76.8 ms。这类条件题面一定会给不写清楚的情况下默认按连续文件、切换时间不计来处理。考场上一定要先圈出这个条件再动笔。4. 44题解题全过程逐步拆解4.1 第一问先算出数据传输率第一步把转速换算成每秒转数7200 r/min ÷ 60 120 r/s。第二步算一个磁道能装多少数据每个磁道200个扇区每个扇区4 KB得800 KB。第三步算传输率800 KB × 120 r/s 96 000 KB/s。如果希望结果写得更规范可以进一步换算96 000 KB/s 96 000 × 1024 B/s 98 304 000 B/s约等于93.75 MB/s按1 MB 1024 KB。考场上写96 000 KB/s或者93.75 MB/s都没问题但单位必须写清楚阅卷最反感的就是只有数字没有单位。这个结果本身也是背景信息它远高于程序中断方式每秒钟能处理的字节数正好印证了磁盘必须使用DMA方式。一道题的前两问不是孤立的第一问算出的传输率直接服务第二问的时间计算。4.2 第二问读取时间三段相加把读文件的时间分成三段来找第一段磁头从当前位置移到文件所在的磁道。题面给出平均寻道时间5 ms直接用。第二段等文件起始扇区转到磁头下方。磁盘每秒转120圈转一圈是1/120秒约8.333 ms取半圈约4.167 ms。第三段数据连续读出。文件4 MB换成4096 KB除以96 000 KB/s约等于0.04267秒即42.667 ms。三段相加约51.834 ms。阅卷时通常是按三段分别给分所以就算最后结果算错中间任何一个正确分量都有分。这也是我给学生的建议磁盘时间计算题哪怕不会做也要把三段式写出来先把能拿的过程分拿到。4.3 第三问DMA传送次数与CPU的角色第三问分两部分回答。传送多少次文件4 MB扇区4 KB4 MB / 4 KB 1024。由于每次DMA传送一个扇区的数据所以总共需要进行1024次DMA传送。这个数的意义在于CPU不需要为每一个扇区操心如果没有DMA改用程序中断方式4 KB数据即使按每次传4字节来算也要中断上千次CPU基本全程陪跑。CPU能否执行其他程序能。DMA方式下数据搬运由DMA控制器完成传送过程中CPU可以执行主程序。在常用的周期挪用方式下DMA控制器只在每个存储周期占用总线一小段时间CPU最多在一条访存指令上被推迟一拍不访存的指令照常执行。传送完毕DMA控制器发出中断请求CPU做收尾处理。注意这里有个高频混淆点——DMA传送1024次不意味着CPU被中断1024次。数据传送阶段发生的1024次搬运全部由DMA控制器完成CPU全程无感真正打断CPU的是整个任务完成后的那一次后处理中断。把“DMA传送次数”和“CPU被中断次数”区分开是这道题满分的关键之一。5. 同类题的命题规律与复习策略5.1 为什么DMA和磁盘计算被绑在一起考这道题给准备408的同学一个很直接的信号组成原理大题考查的是“机制和计算如何焊接在一起”。DMA是机制磁盘是载体扇区是两者之间的焊点。命题人不需要单独设计一个复杂的DMA场景只需要把磁盘参数列出来让考生自己去思考“这个设备的扇区组织如何影响DMA的传送次数”就把两个章节考活了。所以复习时不要机械地把知识分成“I/O一张表”和“存储一张表”平时做题要有意识地把它们串联起来。比如学到DMA就问自己如果设备是磁盘DMA每次传多少这个数字和扇区什么关系学到磁盘传输率就再问这个速度如果用程序查询方式能接受吗不能的话为什么这样串联一遍44题这种外观看起来吓人的题目本质上就是在利用你脑子里的连接。5.2 备考DMA必须抓住的五个细节第一条DMA的传送单位是“块”但在磁盘场景下默认一个块对应一个扇区文件除以扇区大小就是传送次数。第二条DMA工作分三阶段预处理由CPU完成传送阶段由DMA控制器完成后处理由DMA向CPU发中断完成。任何一个阶段的任务分配说错概念题就丢分。第三条DMA方式和程序中断方式最本质的区别是前者CPU不参与数据传送后者每次传送都要CPU执行中断处理程序来完成。第四条要能说出周期挪用、停止CPU访问、DMA与CPU交替访问三种方式各自的优缺点考试最喜欢考“周期挪用对CPU影响最均衡”这类细节。第五条DMA结束时的中断是一次性中断不是每个数据块中断一次的“洪水式中断”。很多同学被“DMA中断”这个概念误导会在题里多算次数。5.3 磁盘计算题的提速训练最后分享一套我平时训练学生用的方法适合考前冲刺阶段每天保持手感。拿到任何磁盘计算题先做三个固定动作把转速除以60变成r/s把一个磁道的数据量算出来确认题目给的寻道条件是“平均一次”还是“每跨一条磁道一次”。这三个动作做完题目的一半已经解了。然后是计算顺序先求每磁道容量再求数据传输率然后分拆读时间三组件最后处理DMA相关的小问。做题时把单位写在每一步旁边防止中间过程出现“7200直接参与乘法”的粗心错误。如果手头有往年的真题和模拟题把出现过的磁盘参数收集起来转速从5400到15000、扇区大小从512 B到4 KB、文件大小从1 MB到几十MB都算一遍。算多了你会发现这类题根本不需要“押题”数字怎么换都逃不出那三四个公式的排列组合。我个人的体会是2022年这道44题最大的价值不是让你背下一套解法而是帮你检验自己有没有真正理解“数据是怎么从磁盘走进主存的”。DMA不是冷冰冰的概念它是磁盘这类高速外设能高效运行的基础扇区也不是单纯的几何划分它是设备与内存之间的搬运单位。如果你读完这篇文章能脱口而出“4 MB文件、4 KB扇区、DMA传1024次”并能解释为什么传送期间CPU还能干别的那这道题的基本盘你已经拿住了。下次再遇到类似的题目先别急着套公式静下来把设备、数据块、总线、中断四者的关系理一遍计算自然就顺了。
返回列表