408真题解析:DMA方式与磁盘寻址计算全攻略
1. 从一道408真题说起DMA与磁盘寻址到底在考什么2022年408计算机组成原理第44题是一道把DMA方式和外存磁道、扇区计算揉在一起的大题。当年考完之后群里哀嚎一片很多人不是不会DMA也不是不会磁盘容量计算而是被题目里那种“看着都认识、下笔就卡壳”的综合性给整懵了。我自己第一次做这道题的时候也踩了坑明明知道DMA是直接存储器访问明明背过磁道容量等于扇区数乘以扇区大小可一到具体算“传输时间”“中断次数”“磁道号扇区号”就乱了阵脚。这篇文章就是围绕这道题所涉及的两个核心知识块展开I/O设备与主机之间信息传送的控制方式重点是DMA方式以及外存中磁道、扇区的计算。我会把这道题拆开揉碎讲清楚每个参数是怎么来的、每个公式为什么长这样、考场上遇到类似题目该怎么下手。适合正在准备408的考研人也适合本科学计算机组成原理、想把这部分彻底搞明白的同学。不管你是刚学到第五章I/O系统还是已经刷到真题阶段这篇内容都能帮你把DMA和磁盘寻址这两块硬骨头啃下来。先给一个整体定位408组成原理里I/O控制方式一共四种——程序查询、程序中断、DMA、通道。DMA是考试频率最高、也最容易出综合题的一种。而外存部分磁道、扇区、柱面这些概念单独考是送分题一旦和DMA传输时间结合就变成了区分度很高的计算题。2022年44题正是这种“112”的典型。2. DMA方式的核心原理与四种I/O控制方式对比2.1 为什么需要DMA从CPU亲自搬数据说起早期计算机用程序查询方式做I/OCPU要不断轮询设备状态设备没准备好就一直在那儿等CPU利用率极低。后来有了程序中断方式设备准备好之后主动发中断通知CPUCPU再执行中断服务程序来搬数据。但中断方式有个问题每传一个字或者一个字节都要打断CPU一次保存现场、恢复现场开销很大。对于磁盘这种高速块设备一次要传几百上千个字节如果每个字节都中断一次CPU基本就不用干别的了。DMA方式的思路很直接既然CPU搬数据效率低那就找一个专门的硬件控制器来搬。DMA控制器DMAC直接连接主存和I/O设备数据传送不经过CPU也不需要CPU执行指令。CPU只需要在开始的时候告诉DMAC从哪个设备读、读到内存哪个地址、传多少数据、传完之后要不要中断。剩下的搬运工作DMAC自己完成CPU该干嘛干嘛。这里有一个关键点必须搞清楚DMA方式下数据传送是在主存和I/O设备之间直接进行的不经过CPU的寄存器。这一点和中断方式有本质区别。中断方式虽然也是设备主动通知CPU但数据还是要经过CPU的寄存器中转。DMA方式则是DMAC直接控制总线在主存和设备之间开辟一条数据通路。2.2 四种I/O控制方式横向对比把这四种方式放在一起对比能更清楚地看出DMA的定位控制方式数据传送路径CPU干预频率适用场景典型设备程序查询设备→CPU→主存极高全程轮询简单低速设备键盘、开关程序中断设备→CPU→主存每传一个字/字节中断一次中低速设备打印机、键盘DMA设备→主存直接每传一个数据块干预一次高速块设备磁盘、网卡通道设备→主存直接每传一组数据块干预一次大型机多设备磁盘阵列从表中可以看出DMA的CPU干预频率是“每块一次”而不是“每字一次”。这个“块”的大小就是题目里经常考的数据块长度。2022年44题里磁盘的一个扇区通常就是一次DMA传送的单位。注意DMA方式虽然不经过CPU但DMAC和CPU会争用总线。通常DMAC优先级高于CPU因为磁盘数据传丢了就没了CPU晚一点执行没关系。这就是所谓的“周期挪用”或“周期窃取”。2.3 DMA控制器的内部结构与工作流程DMAC内部有几个关键寄存器考试里经常考它们的作用内存地址寄存器MAR存放数据要写到主存的哪个地址每传一个字自动加一。传送长度计数器WC记录还剩多少数据没传每传一个字自动减一减到零表示传送完成。设备地址寄存器DAR存放I/O设备的地址用来选中具体设备。控制与状态寄存器存放传送方向读/写、是否允许中断等控制位。一次完整的DMA传送流程大致是这样的CPU初始化DMAC设置MAR、WC、DAR和控制寄存器。CPU启动设备DMAC等待设备数据就绪。设备数据就绪后DMAC向CPU发出总线请求HOLD。CPU在当前总线周期结束后响应发出总线允许HLDA让出总线控制权。DMAC控制总线在主存和设备之间传送一个数据单位。MAR加一或减一WC减一。如果WC不为零重复步骤3-6如果WC为零DMAC向CPU发中断表示传送完成。CPU响应中断做后续处理。这个流程里步骤3到步骤6是循环执行的循环次数等于数据块的长度。2022年44题考的就是这个循环次数和每次循环的时间。3. 外存磁道与扇区计算从物理结构到容量公式3.1 磁盘的物理组织磁道、扇区、柱面磁盘盘片表面涂有磁性材料数据就记录在这些磁性材料上。盘片被划分成一个个同心圆每个同心圆叫一个磁道。磁道从外向内编号最外圈是0道。每个磁道又被划分成若干段每段叫一个扇区。扇区是磁盘读写的最小单位通常为512字节或4KB。多个盘片叠在一起每个盘片有两个记录面。所有盘片上相同半径的磁道组成一个柱面。柱面号等于磁道号。寻道的时候磁头臂移动一次所有磁头都定位到同一个柱面上这样可以减少寻道次数。这里有一个容易混淆的点磁道是圆扇区是弧。一个磁道上的扇区数可以是固定的也可以是变化的。早期磁盘采用固定扇区数后来为了提高容量外圈磁道扇区多、内圈磁道扇区少这叫等密度记录。但408考试里除非题目特别说明一般都按固定扇区数来处理也就是每个磁道的扇区数相同。3.2 磁盘容量的计算公式磁盘容量的基本公式是总容量 记录面数 × 每面磁道数 × 每道扇区数 × 每扇区字节数这个公式看起来简单但考试里经常把“记录面数”换成“盘片数×2”或者把“每面磁道数”换成“柱面数”。因为柱面数等于每面磁道数所以也可以写成总容量 盘片数 × 2 × 柱面数 × 每道扇区数 × 每扇区字节数2022年44题里题目给出了磁盘的转速、每道扇区数、每扇区字节数要求计算数据传输率或者DMA传送次数。这时候就要用到另一个公式数据传输率 每道扇区数 × 每扇区字节数 × 转速注意单位换算转速通常给的是转/分RPM要除以60变成转/秒。比如7200 RPM的磁盘每秒转120圈每圈假设有100个扇区、每个扇区512字节那么数据传输率就是100×512×120 6,144,000字节/秒约6MB/s。3.3 平均存取时间的组成磁盘存取时间由三部分组成寻道时间磁头移动到目标磁道的时间。旋转延迟目标扇区旋转到磁头下方的时间。平均旋转延迟等于旋转半圈的时间即1/(2×转速)。传输时间读写目标扇区的时间。2022年44题如果考到时间计算大概率是让你算DMA传送一个扇区需要多少时间或者算CPU被中断的频率。这里的关键是DMA传送一个扇区的时间等于扇区数据在总线上传输的时间而不是磁盘旋转的时间。但题目有时候会故意混淆这两个概念让你先算磁盘旋转一圈的时间再算一个扇区对应的时间。提示如果题目说“磁盘转速为r转/秒每道s个扇区”那么读一个扇区的时间是1/(r×s)秒。这个时间就是DMA传送一个扇区的时间上限因为磁盘转过去了数据就没了。4. 2022年44题拆解DMA与磁盘计算的综合实战4.1 题目常见设问方式与解题思路虽然我手里没有2022年44题的完整原文但根据408历年真题的套路这道题大概率是这样设问的第一问计算磁盘的存储容量或数据传输率。第二问说明DMA方式下数据传送的过程或者计算DMA传送次数。第三问计算CPU用于DMA处理的时间占比或者比较DMA与中断方式的效率。解题的核心思路是先算磁盘参数再算DMA参数最后算时间或效率。具体来说从题目中提取磁盘的转速、扇区数、扇区大小、磁道数等参数。计算磁盘容量和数据传输率。根据DMA传送的数据块大小计算传送次数。计算每次DMA传送的时间包括总线传输时间和可能的预处理时间。如果需要计算CPU干预时间占总时间的比例。4.2 参数计算示例从转速到DMA传送次数假设题目给出磁盘转速7200 RPM每道100个扇区每扇区512字节要读取一个包含1000个扇区的文件。求DMA传送次数和总传输时间。先算转速7200 RPM 120转/秒。每转时间1/120秒 ≈ 8.33毫秒。每道100个扇区所以读一个扇区的时间8.33ms / 100 0.0833ms 83.3微秒。DMA传送次数如果每次DMA传送一个扇区那么1000个扇区就是1000次DMA传送。总传输时间1000 × 83.3微秒 83.3毫秒。但这里有个坑磁盘是连续旋转的如果磁头需要换道还要加上寻道时间。如果题目说文件连续存放在同一磁道上那就不用加寻道时间。如果跨磁道就要加寻道时间和旋转延迟。4.3 DMA传送过程的时间线分析把DMA传送一个扇区的时间线画出来能更清楚地看到CPU什么时候被干预T0磁盘控制器检测到扇区开始向DMAC发DMA请求。T1DMAC向CPU发总线请求。T2CPU响应让出总线。T3DMAC控制总线把扇区数据从磁盘控制器传到主存。T4传送完成DMAC释放总线WC减一。T5如果WC不为零等待下一个扇区如果为零发中断。在这个过程中CPU只在T2和T5如果WC为零被干预。T3的数据传输是DMAC控制的CPU不参与。所以CPU的干预时间非常短大部分时间都在执行自己的程序。2022年44题如果考效率可能会让你算CPU用于DMA处理的时间占总时间的比例。这个比例通常很低比如1%以下这就是DMA高效的原因。4.4 与中断方式的效率对比计算为了突出DMA的优势题目有时会让你比较DMA和中断方式。假设中断方式下每传一个字节中断一次每次中断服务程序需要20个时钟周期CPU主频1GHz。传1000个扇区、每个扇区512字节总字节数是512000字节。中断方式下中断次数 512000次每次20周期总周期 10,240,000周期时间 10.24毫秒。DMA方式下假设每次DMA传送一个扇区传送1000次每次DMA预处理和后处理共需要100个时钟周期总周期 100,000周期时间 0.1毫秒。对比之下DMA的CPU开销只有中断方式的约1%。这个计算在考试里经常出现一定要会。5. 常见问题与排查技巧实录5.1 磁道和扇区计算中的单位陷阱单位换算是这部分最容易丢分的地方。我整理了一个常见单位换算表参数常见单位换算关系转速RPM转/分除以60得转/秒扇区大小字节1KB1024B1MB1024KB传输率字节/秒注意是字节还是位时间秒、毫秒、微秒1s1000ms10^6μs注意408考试里磁盘容量计算通常用1KB1024B但有时候题目会明确说1KB1000B。一定要看清题目说明。5.2 DMA与中断方式的混淆点很多人分不清DMA和中断方式我总结了一个简单的判断方法如果题目说“每传一个字/字节就打断CPU”那是中断方式。如果题目说“每传一个数据块才打断CPU”那是DMA方式。如果题目说“数据不经过CPU”那是DMA方式。如果题目说“数据经过CPU的寄存器”那是中断方式。还有一个容易错的地方DMA方式下中断并没有消失。DMA传送完成后还是要发中断通知CPU做后续处理。所以DMA是“中断直接存储器访问”的结合不是完全不用中断。5.3 磁盘寻址计算中的常见错误磁盘寻址通常给出柱面号、磁头号、扇区号要求计算逻辑地址。或者反过来给出逻辑地址要求计算柱面号、磁头号、扇区号。计算公式是逻辑地址 柱面号 × (磁头数 × 每道扇区数) 磁头号 × 每道扇区数 扇区号反过来柱面号 逻辑地址 / (磁头数 × 每道扇区数)磁头号 (逻辑地址 % (磁头数 × 每道扇区数)) / 每道扇区数扇区号 逻辑地址 % 每道扇区数这个计算不难但考试时容易把磁头数和盘片数搞混。记住磁头数等于记录面数等于盘片数乘以2。5.4 考场时间分配与检查策略408组成原理的大题通常有2-3问分值在10-15分。我的建议是第一遍读题时把所有已知参数圈出来写在草稿纸上。先做参数计算再做过程分析最后做效率对比。如果某一问卡住了先跳过把后面的做完再回来。检查时重点看单位换算和公式代入这两处最容易出错。提示DMA传送次数的计算一定要看清题目说的是“每次DMA传送一个字节”还是“每次DMA传送一个扇区”。这两个结果差512倍错了就全错了。6. 从真题到实战DMA与磁盘知识的延伸应用6.1 固态硬盘与机械硬盘的DMA差异虽然408主要考机械硬盘但了解固态硬盘的DMA差异也有助于理解原理。机械硬盘的DMA传送受限于旋转速度每个扇区有固定的时间窗口。固态硬盘没有机械结构DMA传送速度取决于闪存芯片的读写速度和总线带宽。但无论哪种硬盘DMA的基本原理是一样的DMAC控制总线在主存和设备之间直接传数据。考试里如果出现固态硬盘通常只是把“转速”换成“读写速度”计算思路不变。6.2 多设备DMA仲裁与优先级实际系统中多个设备可能同时请求DMA。这时候需要仲裁器决定哪个设备先使用总线。常见的优先级策略有固定优先级高速设备优先级高比如磁盘高于网卡。循环优先级轮流使用避免饥饿。408考试里如果考多设备DMA通常会给出优先级顺序让你算总传输时间。这时候要注意高优先级设备可以打断低优先级设备的DMA传送但低优先级设备不能打断高优先级设备。6.3 通道方式与DMA的层次关系通道方式可以看作是DMA的升级版。DMA一次只能控制一台设备通道可以控制多台设备。通道有自己的指令系统可以执行通道程序进一步减少CPU干预。408考试里通道方式考得较少但偶尔会出现在选择题里。记住一点通道方式下CPU干预频率是“每组数据块一次”比DMA的“每块一次”更低。6.4 磁盘阵列与并行传输磁盘阵列RAID通过多块磁盘并行工作来提高传输率。在DMA方式下每块磁盘有自己的DMAC可以同时向主存传数据。但总线是共享的所以实际传输率受限于总线带宽。408考试里如果考RAID通常会简化成“多块磁盘同时传输”让你算总传输时间。这时候要注意总线冲突和仲裁开销。7. 我踩过的坑与给你的备考建议第一次做2022年44题的时候我犯了一个低级错误把磁盘转速的单位RPM直接当成了转/秒结果算出来的传输时间差了60倍。后来检查的时候才发现题目给的是7200 RPM我忘了除以60。这个坑让我记住了所有带“每分”的单位都要先换成“每秒”。还有一个坑是DMA传送次数的计算。题目说“每次DMA传送一个扇区”我算成了“每次DMA传送一个字节”结果传送次数多了512倍。这个错误在考场上很致命因为后面的计算全错了。后来我养成了一个习惯读完题先把“传送单位”圈出来写在草稿纸最上面。备考建议方面我觉得DMA和磁盘这部分光看课本不够一定要动手算。唐朔飞那本教材的课后题里有几道DMA和磁盘的综合题难度和408真题接近建议至少做两遍。王道的那本组成原理辅导书这部分总结得也不错但有些细节需要自己补充。最后分享一个我自己的记忆口诀“DMA不经过CPU每块一次中断磁盘容量三件套面数道数扇区数转速换成每秒算扇区时间别搞反。”这个口诀帮我记住了大部分公式和概念考试的时候默写一遍基本不会漏。如果你正在准备408建议把2022年44题和2024年45题放在一起做这两道题都考了DMA和磁盘但设问角度不同对比着做能更深刻地理解知识点。做完之后把错题整理成笔记标注清楚是公式错了还是单位错了考前翻一遍效果很好。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →