ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从22年408真题拆解DMA与磁盘寻址:原理、计算与避坑指南

从22年408真题拆解DMA与磁盘寻址:原理、计算与避坑指南 1. 从一道408真题说起DMA与磁盘寻址到底在考什么22年408那道44题我第一次做的时候也卡了很久。题目本身不算长但把DMA方式和外存磁道、扇区计算揉在一起信息量相当密集。后来复盘才发现这道题真正想筛的不是你会不会背DMA的定义而是你能不能把数据从磁盘搬到内存这条完整链路上的每个环节都算清楚、想明白。先把这道题涉及的知识框架摆出来。它考的核心是两块第一块是I/O设备与主机之间信息传送的控制方式重点落在DMA方式上包括DMA的传输单位、传输过程、与中断方式的区别、DMA控制器的组成第二块是外存的物理结构具体到磁盘的磁道、扇区、柱面这些概念以及由这些概念衍生出的容量计算、寻址时间计算、数据传输率计算。为什么这两块会放在一道题里因为磁盘本身就是典型的块设备它和内存之间传数据最合适的方式就是DMA。你想想一个扇区512字节一次读一个磁道可能几十KB如果每个字节都让CPU插手那CPU啥也别干了。所以磁盘I/O天然就是DMA的主战场。命题人把这两块绑在一起逻辑上是自洽的。这道题适合谁来啃如果你正在准备408那没得说必做。如果你已经上岸但想回头补一补组成原理的底层逻辑这道题也是个很好的切入点因为它把存储和I/O两个章节串起来了。哪怕你是学软件的理解磁盘怎么寻址、DMA怎么搬运数据对你写高性能I/O代码、理解文件系统底层行为都有实打实的帮助。我下面会按整体设计思路—核心细节—实操计算—常见坑这个顺序展开把这道题背后的知识网络完整拆一遍。你跟着走完再回头看44题会有一种原来就这点东西的感觉。2. 整体设计思路拆解为什么命题人要这么出题2.1 DMA方式在I/O控制方式中的定位要理解DMA得先把它放进I/O控制方式的演进序列里看。主机控制I/O设备传数据历史上走过四条路程序查询方式、程序中断方式、DMA方式、通道方式。这四种不是随便排的它们的演进主线就一条——不断把CPU从数据搬运中解放出来。程序查询方式最原始CPU发命令后就在那儿死等设备没准备好就反复读状态寄存器CPU利用率极低。程序中断方式进了一步CPU发完命令可以去干别的设备准备好了发中断通知CPUCPU再执行中断服务程序一个字节一个字节地搬。但问题来了每传一个字节或一个字就要中断一次如果传1KB数据就是上千次中断CPU光进出中断现场就累死了。DMA方式就是来解决这个问题的。它的核心思想是数据搬运这件事交给专门的硬件DMA控制器去做CPU只负责开头下命令、结尾收通知。传输过程中CPU完全不参与等一整块数据传完了DMA控制器再发一个中断告诉CPU活干完了。这样中断次数从每字节一次降到每块一次CPU效率大幅提升。通道方式则是更进一步把DMA控制器升级成能执行通道程序的处理器一条通道指令能控制一组数据块的传输。但对408来说通道方式考得少DMA是绝对重点。注意DMA方式并没有完全取代中断方式两者是配合关系。DMA负责数据搬运中断负责传输完成后的善后处理。这个配合关系是很多简答题的得分点。2.2 磁盘物理结构为什么必须和DMA一起考磁盘的物理结构决定了它的数据传输特性。一个磁盘盘片上有若干磁道同心圆每个磁道被分成若干扇区扇区是磁盘读写的最小单位。多个盘面上相同位置的磁道组成柱面。读写数据时磁头要先移动到目标磁道寻道然后等待目标扇区旋转到磁头下方旋转延迟最后才开始读写传输。这个过程中一旦磁头定位到目标扇区数据就是连续、成块地流出的。这种块传输特性恰好和DMA的块搬运能力完美匹配。如果磁盘用中断方式传数据每个扇区512字节就要中断512次按字节中断这显然不合理。所以磁盘I/O用DMA是物理特性决定的必然选择。命题人把这两块放一起其实是在考你一个完整的因果链磁盘是块设备→块设备适合块传输→块传输用DMA→DMA传输需要计算传输时间和传输量→传输量又依赖磁道扇区的容量计算。你把这条链想通了题目怎么变都不怕。2.3 这道题的能力考查层次我复盘下来这道题至少考了三个层次的能力。第一层是记忆你得知道DMA控制器有哪些寄存器、磁盘容量怎么算。第二层是理解你得明白DMA传输的三个阶段预处理、数据传送、后处理各自干什么明白寻道时间、旋转延迟、传输时间分别对应磁盘操作的哪个环节。第三层是应用计算题目会给你磁盘转速、每道扇区数、传输数据量让你算总时间或者算DMA传输次数。很多同学第一层没问题第二层模模糊糊第三层就崩了。崩的原因往往不是不会算而是没搞清楚要算的到底是什么。比如题目问传输一个磁道的数据需要多长时间你得先知道一个磁道有多少字节再除以数据传输率。而一个磁道的字节数就是每道扇区数乘以每扇区字节数。这些量之间的换算关系必须在脑子里形成条件反射。3. 核心细节解析与实操要点3.1 DMA控制器的内部组成与工作寄存器DMA控制器不是个黑盒它内部有几个关键寄存器理解了它们DMA的工作过程就一目了然。主要的有这几个内存地址寄存器MAR存放数据在内存中的起始地址每传一个字或字节自动加一指向下一个存储单元。传送长度计数器DC存放还要传送多少数据每传一个单位自动减一减到零表示传输完成。设备地址寄存器DAR存放I/O设备的地址用来选中要通信的设备。控制与状态寄存器存放控制信息如传输方向、传输单位和状态信息如是否完成、是否出错。工作流程是这样的CPU在预处理阶段把内存起始地址、传送长度、设备地址、传输方向都写进DMA控制器的对应寄存器然后启动DMA。DMA控制器接管总线后每传一个数据单位MAR加一、DC减一直到DC为零发出中断。CPU收到中断后进入后处理阶段检查状态、决定是否继续。实操心得很多同学记不住MAR和DC的加减方向我教你一个记法——MAR是地址往前走所以加DC是剩余量往少走所以减。两个都是往终点走方向一致不会记混。3.2 DMA与中断方式的本质区别这是简答题高频考点也是理解DMA的关键。我用一个表格把两者的区别列清楚对比维度程序中断方式DMA方式数据传送控制者CPU执行中断服务程序DMA控制器硬件传送单位字或字节数据块中断时机每传一个数据单位中断一次一整块数据传完后中断一次CPU参与程度传输全程参与仅预处理和后处理参与优先级较低较高DMA请求优先于中断请求适用场景低速设备、随机出现的I/O高速块设备、大批量数据这里有个容易错的点DMA请求的优先级高于中断请求。为什么因为DMA传输的是高速设备的数据如果被中断打断数据可能丢失磁盘旋转不等人。所以当DMA和中断同时请求总线时CPU优先响应DMA。这个点在选择题里经常挖坑。还有一个细节DMA方式下CPU和DMA控制器会争用总线。解决方式有三种——停止CPU访存、周期挪用、交替访存。408常考的是周期挪用也叫周期窃取。DMA控制器趁CPU不访存的那些总线周期偷偷挪用一个周期来传数据。这种方式对CPU影响小是实际中最常用的。3.3 磁盘容量与寻址的核心公式磁盘这块公式不多但必须记牢而且要理解每个量的物理意义。磁盘总容量 盘面数 × 每面磁道数 × 每道扇区数 × 每扇区字节数这个公式里盘面数通常等于磁头数每个盘面一个磁头。每面磁道数取决于记录密度和盘面半径范围。每道扇区数和每扇区字节数是格式化时确定的。平均寻道时间磁头从当前位置移动到目标磁道的时间。题目一般给平均寻道时间这个直接值或者给最大寻道时间让你取一半。平均旋转延迟目标扇区旋转到磁头下方的时间。磁盘转一圈的时间是 60/转速秒平均旋转延迟是转半圈的时间即 60/(2×转速)。比如7200转/分的磁盘转一圈8.33毫秒平均旋转延迟约4.17毫秒。数据传输时间传输的数据量除以数据传输率。数据传输率 每道字节数 × 转速转/秒。比如每道512×6432768字节转速7200转/分120转/秒数据传输率就是32768×120≈3.93MB/s。总访问时间 寻道时间 旋转延迟 传输时间注意计算旋转延迟时转速单位要统一。题目给转/分你要除以60换成转/秒再取倒数得到每转时间。这一步单位换算错后面全错。3.4 扇区编号与磁道内寻址的细节磁盘寻址时要先定位柱面所有盘面上相同编号的磁道再定位磁头盘面最后定位扇区。为什么先柱面后磁头因为换柱面要移动磁头臂机械动作慢换磁头只是电子切换快。所以连续读写时优先在同一柱面内换盘面减少寻道。扇区的编号方式有两种交错编号和连续编号。早期磁盘为了给CPU留出处理时间采用交错编号比如1、5、2、6、3、7、4、8这样排读完一个扇区后下一个逻辑扇区还没转过去CPU有时间处理。现代磁盘速度快多用连续编号。408题目如果没特别说明一般按连续编号处理。还有一个概念叫簇是文件系统层面的分配单位一个簇包含若干个扇区。但408考磁盘物理结构时一般考到扇区为止簇是操作系统的内容。4. 实操过程与核心环节实现把44题算一遍4.1 题目条件的提取与整理22年44题的具体条件我按记忆还原一下不同版本表述略有差异但核心参数一致磁盘转速、每道扇区数、每扇区字节数、要传输的数据量以及DMA相关的一些设定。拿到题第一步不是急着算而是把所有已知量列成一张表标注单位和物理含义。我习惯这样整理已知量数值单位物理含义转速n转/分盘片旋转速度每道扇区数s个一个磁道分多少扇区每扇区字节数b字节扇区容量传输数据量D字节本次要传的总量整理完这张表很多关系就自动浮现了。比如每道字节数 s × b数据传输率 s × b × (n/60)传输D字节需要的时间 D / 数据传输率。4.2 关键参数的计算过程假设题目给的条件是转速7200转/分每道64个扇区每扇区512字节要传输一个磁道的数据。我们来算。第一步算每道字节数64 × 512 32768字节 32KB。第二步算转速的每秒值7200 / 60 120转/秒。第三步算数据传输率32768 × 120 3932160字节/秒 ≈ 3.75MB/s。第四步算传输一个磁道数据的时间32768 / 3932160 1/120秒 ≈ 8.33毫秒。你会发现传输一个磁道的时间恰好等于转一圈的时间。这不是巧合——转一圈正好扫过一个磁道的所有扇区所以传输一个磁道的数据物理上就是转一圈的时间。这个直觉很重要能帮你快速验证答案。如果题目问的是传输一个扇区的时间那就是8.33毫秒除以64约0.13毫秒。或者直接用每扇区字节数除以数据传输率512 / 3932160 ≈ 0.13毫秒。两种算法结果一致互相验证。4.3 DMA传输次数的计算DMA传输次数取决于DMA一次能传多少数据。如果DMA按字节传那传32KB就要32768次如果DMA按字假设字长4字节传那就是8192次。408题目一般会明确DMA的传输单位。这里有个易错点DMA的传输单位和磁盘的扇区单位不是一回事。磁盘按扇区读写但DMA可以按字节、按字、按块搬运。题目如果说DMA每次传送一个32位字那你就按4字节算次数。如果说DMA以数据块为单位那可能一个扇区算一次。我见过一道变体题问DMA控制器需要多少次总线请求答案是传输次数因为每次DMA传送都要请求一次总线。如果按字节传就是32768次总线请求。这个数字大得吓人也正说明了为什么实际中DMA要按块传而不是按字节。4.4 完整时间线的构建把寻道、旋转、传输三段拼起来才是完整的磁盘访问时间。假设平均寻道时间8毫秒平均旋转延迟4.17毫秒传输一个磁道8.33毫秒那总时间就是8 4.17 8.33 20.5毫秒。但要注意如果连续传输多个磁道的数据寻道和旋转延迟只算一次或者按实际情况算后续磁道的传输时间要累加。比如传3个磁道总时间 8 4.17 8.33×3 37.16毫秒。这个批量传输摊薄固定开销的思路是理解磁盘性能的关键。实操心得做这类题时我习惯画一条时间轴把寻道、旋转、传输三段标上去再把要传的数据量对应到传输段上。画完图该加该乘一目了然比纯列公式不容易错。5. 常见问题与排查技巧实录5.1 单位换算错误最高频的失分点我统计过自己做错的题单位换算错误占了将近一半。磁盘题里涉及的单位特别多转/分、转/秒、毫秒、微秒、字节、KB、MB。稍不留神就错。最常见的三个坑第一转速给的是转/分算旋转延迟时忘了除以60。第二时间单位混用寻道时间给毫秒传输时间算出来是秒直接相加就错了。第三容量单位混用1KB到底是1000字节还是1024字节。408题目里磁盘容量一般按1KB1024字节算但有些题目会明确说按1000算一定要看清。排查技巧算完后做一次量纲检查。比如传输时间 数据量 / 数据传输率单位是字节 / (字节/秒) 秒量纲对得上说明公式没用错。如果量纲不对立刻回头查。5.2 DMA与中断的混淆概念题的隐形陷阱选择题里经常出现这样的选项DMA方式下每传送一个数据都需要CPU执行中断服务程序。这明显是错的但如果你把DMA和中断的传输单位记混了就可能选错。我整理了一个速查表帮你快速判断说法对错原因DMA传送不需要CPU干预对数据搬运由DMA控制器硬件完成DMA传送完全不需要CPU错预处理和后处理仍需CPUDMA每传一个字节中断一次错那是一整块传完才中断DMA优先级低于中断错DMA优先级高于中断DMA和CPU不能同时访存错周期挪用方式下可以交替访存这张表里的每一条都是真题里出现过的干扰项。把它们记牢选择题基本不会翻车。5.3 磁道扇区计算的边界情况有些题目会玩文字游戏。比如磁盘有200个柱面每个柱面有20个磁道每个磁道有64个扇区问总容量。这里柱面数×每柱面磁道数其实就是盘面数×每面磁道数因为一个柱面包含所有盘面上的一个磁道。所以总容量 200 × 20 × 64 × 512字节。如果你把柱面和磁道的关系搞混就会多乘或少乘。还有一种边界情况题目说磁盘最内圈磁道直径X最外圈直径Y让你算磁道数。这需要用到记录密度磁道数 (Y-X)/2 / 道密度。这种题考的是几何关系不是纯记忆要理解磁道是同心圆半径差除以道间距就是磁道数。5.4 传输时间计算的两种问法题目问传输时间时有两种可能一种是纯传输时间数据量/传输率另一种是包含寻道和旋转的总访问时间。这两种问法答案差很多一定要看清题干。我的判断方法如果题干问读取某个文件需要多长时间那通常是总访问时间如果问数据传输时间或传输一个磁道的时间那通常只算传输段。如果拿不准就把两种都算出来看哪个更符合题意。一般来说408题目表述比较严谨不会故意模糊但你自己要养成先分清问的是哪一段的习惯。5.5 常见问题速查表问题现象可能原因解决方法旋转延迟算出来特别大转速没除以60转/分先换成转/秒再取倒数总时间比预期小很多漏加了寻道或旋转时间检查是否只算了传输时间DMA次数算成小数传输单位没对齐确认DMA传输单位向上取整容量算出来不对柱面和盘面关系搞混柱面数×每柱面磁道数总磁道数传输率单位不对字节和位混淆确认题目问的是字节还是位6. 从这道题延伸出去的知识网络6.1 DMA方式在现代系统里的影子虽然408考的是经典DMA模型但现代计算机里DMA无处不在。你写程序时用的read()系统调用读文件底层就是磁盘通过DMA把数据搬到内核缓冲区。网卡收包也是DMA数据直接从网卡搬到内存CPU只处理协议栈。甚至GPU渲染也是DMA在显存和内存之间搬数据。理解DMA的预处理—传输—后处理三段式对你理解现代I/O模型很有帮助。比如为什么异步I/O快因为它把传输这段交给了DMACPU只处理预处理和后处理中间那段耗时最长的搬运完全不占用CPU。这就是DMA思想在软件层面的体现。6.2 磁盘寻址与文件系统的关系磁盘的物理寻址柱面、磁头、扇区是硬件层面的文件系统层面用的是逻辑块号。文件系统把逻辑块号映射到物理地址这个映射过程叫地址转换。理解物理结构你就能明白为什么文件系统要尽量让文件连续存放——连续存放意味着寻道和旋转延迟只付一次随机存放则每个块都要付一次性能差几十倍。这也是为什么机械硬盘上碎片整理有意义而固态硬盘不需要——固态硬盘没有寻道和旋转延迟随机访问和顺序访问速度差不多。这个对比能帮你把组成原理和存储系统两块知识串起来。6.3 408复习中这道题的正确用法我的建议是这道题不要只做一遍。第一遍按正常做题卡住了看解析。第二遍合上答案自己把每个计算步骤写出来包括单位换算。第三遍把题目条件改一改比如把转速从7200改成5400把每道扇区数从64改成32自己重新算一遍。改条件重算是检验你是否真懂的最好方法。如果你时间充裕还可以把这道题和24年45题对比着做。24年45题也是考存储和I/O但角度可能不同。对比两题你能看出命题人喜欢在哪些地方设陷阱哪些知识点是反复考的。这种以题带面的复习方法比单纯刷题效率高得多。最后分享一个我自己用的小技巧把磁盘计算的所有公式写在一张A4纸上贴在书桌前每天看一遍。不用刻意背看多了自然就记住了。等到考场上这些公式会像条件反射一样跳出来你只需要专注在题目问的是什么上而不是公式是什么上。这个状态就是408复习到位的感觉。
返回列表