
考412的时候最让人崩溃的不是某个知识点不会而是两个知识点同时出现在一道题里。22年计算机统考408的第44题就是这样一块硬骨头题目表面在讲磁盘读写骨子里考的是I/O控制方式里的DMA还顺带把磁道、扇区、转速这些外存基础数据加在流程里。很多学生考完跟我吐槽“DMA也背了扇区公式也记了但一合起来就废了”。这道题说白了就是在考你一个关键认知DMA不是一种硬件型号而是一整套“I/O设备与主机之间信息传送的控制方式”它和磁盘这种块设备有什么关系和磁道扇区的物理读写过程又怎么换算。真正把这三个词串起来你才可能拿全这道题的分。这篇文章我就从DMA的底层逻辑、磁道扇区的计算模型、再到综合大题怎么现场拆解一次讲透备考408或者正在学计算机组成原理的朋友都适用。1. 先搞懂DMA这题要的到底是什么它凭什么比中断方式“快”1.1 DMA不是中断方式的加强版而是把搬运工从CPU手上拿走了中断方式和DMA方式最本质的区别不在于谁快谁慢而在于数据搬移的负责人不同。中断方式下一个字节或一个字的数据传送CPU都要全程参与外设准备好了发中断请求CPU停下当前工作保存现场转去执行中断服务程序从I/O端口读数据再写进内存最后恢复现场。这个过程看起来很合理但仔细一算每传一个字节CPU都得折腾一轮中断响应的开销全部压在CPU身上。DMA方式则是换了一个思路数据传送这件事直接交给DMA控制器去干。DMA控制器和内存之间有一条直接的通路外设的数据可以不走CPU的计算单元直接从设备搬到内存里。CPU只在传送开始前给DMA控制器交代三件事数据从哪来、往哪去、搬多少。传送过程中CPU该干嘛干嘛直到整块数据搬完DMA控制器才向CPU发一次中断告诉它“活干完了”。所以考题问你“DMA方式与中断方式的主要区别是什么”标准答案永远落在“中断方式是程序控制下的数据交换DMA方式是硬件控制下的数据交换CPU只在传送前后介入传送过程中不参与逐字节或逐字的数据搬运”这层意思上。别答成“DMA更快中断更慢”那个虽然不算错但不是改卷要的点。1.2 周期挪用、块传送、透明传送这三种DMA实现题里最爱考第一种刚才说的是DMA的整体思想但真正落到做题层面你还要知道DMA和CPU争总线时有几副面孔。课程里通常讲三种周期挪用方式DMA需要传数据时挪用CPU一个存取周期传送一个字节或者一个字然后立刻把总线还给CPU。如果下一字节还没准备好DMA就继续等总线仍然是CPU用。这种方式硬件的利用率高CPU的损失小408的计算题也最爱用这种模型。块传送方式也叫突发方式DMA一次申请过来总线直接连续占用把一批数据全部搬完再释放。这种方式适合连续数据块比如磁盘整条磁道的数据往内存里搬但缺点是会“憋住”CPU数据量一大CPU可能长时间拿不到总线。透明传送方式只在CPU不访问内存的时候DMA才出来干活CPU完全感知不到有数据在搬。这种方式CPU损失最小但硬件判断逻辑复杂考试里最多考个概念很少出计算。周期挪用方式之所以高频出现在真题里是因为它好出计算题给你CPU的存储周期、总线的宽度、外设的传输速率让你算DMA每传送一个字节需要占用多少时间、CPU被挪用的比例是多少。比如总线宽度是32位也就是一次能挪4个字节存储周期是几百纳秒外设每秒传多少字节这些数据一套一算答案就出来了。这个计算逻辑到后面第三节我会用综合题带大家完整算一遍。1.3 DMA传送过程的三步曲和四种寄存器画图比背文字更牢DMA传送的完整过程考试里既可以直接问文字也会让你和中断服务程序对比。不管怎么问核心都是三个阶段初始化阶段CPU执行I/O指令往DMA控制器里写三个关键信息内存起始地址、要传送的字数或字节数、传送方向和控制命令。这三个信息分别放在DMA控制器里的地址寄存器、字计数器、控制寄存器里另外还有一个状态寄存器记录当前DMA忙不忙、传完没传完。数据传送阶段DMA控制器自己向内存发起读/写请求源地址和目标地址由它自己维护每传一个数据就自动把计数器的值减一直到计数器归零。传送结束阶段字计数器减到0DMA控制器向CPU发出中断请求CPU响应该中断做善后处理比如校验数据、更新文件系统的表项、唤醒等待这个I/O完成的进程。这里有个特别容易踩的坑很多同学把步骤记成了“DMA先请求中断再传送数据”这是错的。DMA方式只在传送结束后才产生中断传送过程本身不需要CPU干预也不需要CPU去“响应”什么请求。反之中断方式里每一次数据交换都要CPU响应一次。你把这两种模式搞定考场上只要看到“每次传送后CPU需要响应中断吗”这种题就不会再懵了。我给学生上课的时候经常让他们画一条时间轴左边是中断方式每隔一小段就有一个“CPU响应”右边是DMA方式从头到尾只有开头和结尾两个节点画完自己就明白了。2. 磁道扇区计算题核心就三句话面数乘道数乘扇区数转速算等待寻道算开销2.1 容量计算不要硬背公式从“一个扇区能存多少”往前推磁盘的容量计算是外存这一章最基本但出错率最高的地方。公式看起来很面熟“磁盘容量盘面数×每面磁道数×每磁道扇区数×每扇区字节数”但真到题目里经常有人漏项。我建议拿到题先做一件事把磁盘的物理结构在草稿纸上画一个剖面图。硬盘里面是若干张盘片叠在同一个主轴上每张盘片有两个面正反面都能存数据但最外面和最里面可能有一面不参与记录。题目如果说“一个盘组有n个盘片”通常有效盘面数就是2n或者2n-2具体看它说没说“上下两面是否可用”这是第一个容易被扣分的点。画完盘面再看磁道。每一面上从圆心往外一圈一圈的同心圆就是磁道磁道编号从外圈或者内圈开始题目会明确说。所有盘片的相同半径磁道纵向看过去形成一个“柱面”这个名词也常常和磁道一起考。接下来每个磁道又切成若干个扇区扇区是磁盘读写的最小单位传统上每个扇区512字节但题目里也可能给别的容量。如果你记不住整体的公式不妨反过来推一个扇区有多少字节一个磁道能放几个扇区一个面有多少磁道一个盘组有多少有效面把四个量从底往上乘一遍就是总容量。这样就算考场上紧张忘记了公式也能靠推理写出来。反过来给你总容量让你倒推某个量的题目同样用除法一层层解不容易乱。2.2 平均访盘时间寻道时间加旋转等待时间加传输时间三条要分开算磁盘存取一张数据块的时间通常由三个部分构成寻道时间磁头从当前磁道移动到目标磁道的时间平均值题目直接给比如10ms。这个和磁盘转速无关是机械臂移动的代价。旋转等待时间磁头到达目标磁道后要等磁盘把目标扇区转到磁头底下。平均情况下目标扇区可能在磁头正下方也可能在正对面最坏要等一整圈所以平均等待时间是磁盘旋转半圈的时间。传输时间真正把扇区数据读出来或者写进去的时间通常用“要传输的数据量÷数据传输率每秒读写的字节数”来算。如果题目只问“平均存取时间”多数情况下默认的公式是“平均寻道时间平均旋转等待时间”。这里的平均旋转等待时间经常有人算成“一转的时间”错应该是半转。假设磁盘转速为7200转/分钟换算过来是120转/秒转一圈需要约8.33ms平均旋转等待时间就是约4.17ms。如果转速是5400转/分钟一圈约11.11ms平均等待就是大约5.56ms。很多题给一组数据让你比较不同转速磁盘的访问快慢区别往往就体现在这个半转换算上。传输时间这个部分最容易栽的跟头是单位。题目给的数据传输率可能是MB/s扇区大小是B存储容量是GB你得先把单位全部换算成同一个。我见过太多学生对着计算器按了半天最后发现第一行单位就错了1MB到底是按10的6次方还是按2的20次方算也要格外小心408统考里两种进制都出现过解题时要看题干给的换算前提。2.3 扇区编号从0开始还是从1开始这题里可能藏着一个“陷阱”扇区的编号方式表面上是个约定但一旦题目要求你计算“某逻辑块在磁盘上的物理位置”编号起始值就会直接影响答案。很多教材里扇区从0开始编号磁盘分区工具里显示的“起始扇区”也通常从0开始但有些硬件文档里扇区从1开始编号逻辑块的绝对位置就会差一个扇区。做题的时候看到“起始于2403585280扇区共65536个扇区”这样的数据就自然知道这是从某个固定起点偏移出来的逻辑地址。这个问题在考场上的标准处理法只有一个看题干。题目如果没明确说就默认按照常规模型但你自己心里要清楚这个潜在差异。给你一个逻辑块号让你求它在第几号磁道和第几号扇区时如果每磁道的扇区数是固定的通常用的就是用逻辑块号除以每磁道扇区数取商和余数商是磁道号或者柱面号余数就是扇区号。商怎么进位、余数要不要加一全看编号起点所以千万别跳过审题这一步直接在草稿纸上演算。2.4 顺带提一句“坏扇区”和日常工具磁盘调度那点事离生活并不远热词里有关chkdsk和DiskGenius扇区编辑的搜索其实都指向同一个物理概念扇区是磁盘读写的基本单位坏了就是真坏了操作系统只能把故障扇区标记出来并且用备用扇区替换。这和考试里“磁盘坏扇区、备用扇区、地址映射”的题目是同源的。如果你日常见过chkdsk报告“当前待映射扇区数1”你就能真切感受到备用的目的在于透明替换而这种设计思路恰恰是磁盘可靠性考点背后的实际应用。做题时如果遇到“替换扇区、缺陷管理”相关描述理解成“硬盘有个不动声色帮你换坏块的机制”就可以了。3. 2022年这个综合题的思路拆解DMA和磁道扇区怎么串起来算3.1 这种题的材料看起来吓人其实是“两个小问拼成一个大题”22年44题这类题题干往往很长给你磁盘的转速、平均寻道时间、磁道扇区分布、数据传输率还给你DMA控制器的参数比如外部设备每准备好一个单位数据就向DMA发一次请求DMA用周期挪用的方式传数据总线宽度多少位、存取周期多少纳秒最后问你好几问。第一问通常是磁盘侧的比如某个文件在磁盘上占了多少扇区、读写需要多长时间第二问就切到DMA侧比如这个设备持续向内存传送数据CPU的暂停率是多少。这种题目最大的坎不是公式而是“不知道从哪个量下爪”。我的建议是拿到题目不要急着算先把题干给的数据列成一张清单分清哪些属于磁盘模型哪些属于DMA模型再用我之前说的方式把两张图都画在草稿纸上。磁盘那边画盘片和磁道DMA那边画CPU、DMA控制器、内存、外设之间的连线。只要这两张图出来了题目就变成填数字。3.2 我带学生走的完整计算流程这里用一套参数示范一遍下面这套数据是模拟真实的考试节奏设计的目的不在于套数字而在于让你看清解题顺序。假设一块磁盘的参数如下参数数值转速7200转/分钟平均寻道时间8ms每面磁道数1000道每磁道扇区数200个扇区每扇区字节数512B有效盘面数8面逻辑块数量某一文件占用连续200个扇区第一步先算磁盘总容量。总容量8面×1000磁道×200扇区×512B。算出来8×1000×200×512先做200×512102400B约等于100KB再乘1000得到每面约100MB最后乘8面总容量约800MB。这个数字本身不重要重要的是你能在一分钟内准确算出单位并判断结果合理不合理。第二步算访问这200个连续扇区的平均时间。假设文件正好分布在同一磁道上先算磁头移到目标磁道的时间给的是8ms。平均旋转等待时间7200转/分钟120转/秒转一圈约8.33ms平均等待取半圈约4.17ms。传输时间200个扇区共200×512B100KB如果数据传输率是每秒10MB那么传输时间就是100KB÷10MB/s0.01s10ms。三者相加总共大约22ms多一点。这一步就是磁盘小问的完整流程。第三步切换到DMA小问。假设外部设备的数据传输率是5MB/sDMA每传送一个单位数据就挪用一个存取周期总线宽度32位也就是每次挪用一个周期传4字节。那么每秒需要传送5MB字节换算成字节数是5×2的20次方还是5×10的6次方要看题干约定这里先按字节数来理解。用每秒字节数除以4字节就得到每秒需要挪用的次数。知道一次挪用占用一个存储周期比如存储周期是500ns每秒挪用的总时间就是“挪用次数×500ns”。这个总时间占1秒的百分比就是CPU因DMA而被暂停的时间比例。这个比例算出来之后题里可能还会接着问这个开销是否会成为系统瓶颈或者CPU还能剩下多少比例跑计算任务。你要会判断如果比例很小比如百分之几那DMA的成本几乎可以忽略如果算出来是百分之几十就得重新检查是不是把单位换算错了因为正常题目里周期挪用给CPU造成的负担不该高到离谱。3.3 答题纸上的“得分句式”是什么样的改卷老师愿意给你分很多学生算都对但写在答题纸上只有两三行最后被扣了过程分这个最亏。综合题改卷是按步骤给分的你至少要写清这几步先写文章中的概念依据比如“磁盘平均存取时间平均寻道时间平均旋转等待时间传输时间”写出来即使后面数字错了一小点前面这一行的分也已经拿到了。再写单位换算比如“7200转/分钟120转/秒故旋转一圈时间为8.33ms平均等待时间为4.17ms”。单位换算单独占一步阅卷老师一眼看得到。再写代公式的过程比如“文件占用200扇区100KB传输时间100KB÷10MB/s10ms”。把中间量都写出来别直接甩一个答案。最后写DMA部分的结论比如“DMA控制器每传送4字节需挪用一次存储周期每秒需挪用约…次CPU因DMA暂停时间占比约…%”。这样的答案结构基本就是按标准答案的步伐走的即使最中间某个数值算错前后的逻辑分数也不会全丢。4. 冲刺期怎么把“I/O方式”和“外存”合并复习才不会再被这种题收割4.1 王道、唐朔飞、真题三种材料的正确用法复习408计算机组成原理的人群里最常听到的路子就是王道配唐朔飞。但这两者定位完全不同别搞混。唐朔飞的教材胜在原理讲得深DMA控制器内部硬件逻辑、设备与主机的连接图画得尤其细适合第一遍理解王道的教辅则偏向题型归纳和解题技巧中断和DMA的对比表格、磁盘容量计算的各种变式整理得很全适合第二遍刷题。我个人的节奏是先花一个下午把唐朔飞那几页DMA控制器的图吃透再用王道把对应的选择题和综合题做完。这样等于先用“硬件视角”打了底再用“考试视角”来检验。反过来如果直接拿王道刷题你会发现很多概念都能蒙对但一到需要自己画图推导的综合题就露馅。4.2 我批改学生作业时最常看到的三个失分共性现在提前给你打预防针第一个是单位混乱。磁道扇区的题给的是转/分钟、MB/s、ms、字节几个单位混在一起不换算就代公式结果自然离谱。我的强制要求是任何一步计算前先把单位写在草稿纸的单据位置每秒、每毫秒、每字节统一成一组。第二个是弄混“平均”和“最大”。平均旋转等待时间是半圈最大等待时间才是一整圈选择题最爱在这里设坑。问“最坏情况下”要用一整圈问“平均”要用半圈题目字眼一定要抠死。第三个是把DMA中断和传送过程混在一起说比如答题时写“DMA每传一个字节就向CPU发中断”。在周期挪用模型下DMA每次挪用总线确实像一个“请求”但它不是中断请求更不需要CPU去跑中断服务程序。只有在整块数据传送结束时DMA才会发出真正的中断请求。这一句话的分值往往就是一个小问的分值。4.3 我自己踩过的坑和调整后的复习节奏当年我学DMA的时候也闹过笑话一直以为DMA是“把内存的数据直接搬到设备”后来才发现方向性也分两种设备和内存之间的数据搬运既可以是读设备到内存也可以是写内存到设备DMA控制器里的控制寄存器就是用来标记方向的。第一遍复习时我压根没注意到这一点直到做真题时发现题目里有“往磁盘写入数据”的说法才意识到方向搞反了。所以现在我会特别提醒一句做题第一步先看是读还是写千万别默认都是“把磁盘读进内存”。调整后的复习节奏我更推荐把I/O方式和外存两章放在一起做复盘而不是按章节顺序前后相隔很久。具体安排可以是第一天精读唐朔飞的DMA控制器结构第二天把磁盘容量、寻道时间、扇区这些基本题刷一遍第三天做两套包含DMA加磁盘的中型综合题。这么三轮下来你再看到DMA和磁道扇区出现在同一道题里就不会觉得它们是两个知识点了反而会觉得这本来就是一套完整的物理链条磁盘上的一块数据由DMA控制器负责搬回内存每一步都有速度的参数可以计算。我把这个复习方法分享给不少二战的学生他们反馈说最大的改变是“看到长题干不发抖了”因为心里清楚长得再复杂也不过是扇区算容量、转速算时间、DMA算开销这三个模块的组合。408里真正值钱的综合题往往就是这样把两个章节的硬核知识点焊在同一个场景里你提前把焊缝摸清楚考试就是按部就班地填数而已。真题做多了以后你会发现44题的位置并不固定但“块设备加DMA”这个组合却是轮番上阵的今年不在这里考明年也会换个样子再回来。你要是能把这道题想透周边一大片选择填空也顺便就拿下了。