
每年408统考结束后考生们讨论最凶的往往不是最后那道算法题而是计算机组成原理的大题。2022年的44题就是典型表面上考的是I/O设备与主机之间的信息传送控制方式核心落脚点在DMA可真正动笔时前面那些小问却在让你算磁盘容量跳不开磁道、扇区这些外存基础参数。这道题把“DMA方式”和“外存-磁道扇区计算”两块内容焊在一张卷子上恰恰也是近几年I/O大题的常见组合拳。这篇文章以这道题为引子把DMA控制方式的原理、磁盘结构相关计算以及两者结合的解题套路完整梳理一遍正在用王道、唐朔飞教材啃408的读者可以照着这份思路过一遍。1. 一道44题把两个考点焊在了一起先看它到底考了什么1.1 考点定位DMA方式与磁盘结构计算先说44题在408试卷里的位置。408的计算机组成原理部分一般有一道综合题往年稳定在43题或44题分值在12到14分之间。这道题不像选择题那样只考一个孤立知识点它喜欢把I/O控制方式和外存参数计算结合起来形成“先算磁盘参数、再判断传送方式可行性”的连环问。2022年的44题就是按这个套路走的。题目先给出磁盘的物理参数比如盘片数、记录面数、每面磁道数、每磁道扇区数、每扇区字节数、转速让你算磁盘容量和数据传输率然后再给出DMA方式下的一些时间参数让你判断主机能不能跟得上磁盘的传送速度或者在中断方式下会不会丢数据。这道题所考的正好就是大纲里“I/O设备与主机进行信息传送的控制方式”这一节里的DMA方式以及“外存”这一节里的磁道、扇区、容量、数据传输率计算。我在复习时把这组考点叫做“I/O板块的送命题”。说它送分是因为只要把概念理清、公式背准计算本身并不复杂说它送命是因为很多人在单位换算、平均等待时间、盘片与记录面的关系上翻车一步错后面全错。22年这道题之所以值得单独拿出来讲就是因为它把最容易丢分的几个坑全踩了一遍。1.2 I/O控制方式全景大纲里的四种方式必须烂熟要说清楚DMA得先把I/O控制方式的整个家族摆出来。计算机组成原理教材唐朔飞版、王道单科书都是这么划分的里I/O设备与主机进行信息传送的控制方式一共有四种程序查询方式、程序中断方式、DMA方式、通道方式。我复习时习惯用一张表把它们拉通对比这样无论出选择题还是综合题都能快速定位。控制方式数据传送由谁控制CPU是否直接参与数据传送每传送一个数据单元的CPU开销适用场景程序查询方式CPU执行程序主动轮询参与逐字/逐字节传送最大需要不断查询外设状态低速外设、早期系统程序中断方式CPU响应中断后在中断服务程序中传送参与但不必主动等待较大每次都要保护与恢复现场中低速外设、随机事件DMA方式DMA控制器硬件控制不直接参与数据传送很小只在预处理和后处理时打扰CPU高速块设备如磁盘通道方式通道处理器执行通道程序不直接参与甚至整个I/O过程都交给通道更小CPU只需发一条I/O指令大型机、高并发多路I/O四种方式考的深度不太一样。程序查询和通道方式在408里通常以选择题出现中断方式和DMA方式是综合题的主角。尤其是DMA几乎每隔一两年就会在大题里出现一次光会背“DMA是直接存储器存取”这句口诀远远不够你得能把它的工作流程和磁盘场景结合起来算账。2. DMA方式完全拆解本质上是给CPU减负的专职搬运工2.1 DMA为什么诞生中断方式在高频数据传送面前根本扛不住要理解DMA先明白它解决了什么痛点。程序查询方式的问题在于CPU得一直等外设效率极低程序中断方式虽然不用死等但每传送一个字节或一个字CPU都要响应一次中断然后进中断服务程序在里面完成“从外设读数据→写回内存→恢复现场”这一套动作。中断方式的现场保护开销有多大我算给你看。一次中断处理少则几十条指令多则上百条指令还要涉及栈指针、程序计数器、通用寄存器的保存和恢复。假设磁盘内部数据传输率是每秒60MB如果每传送一个字节就中断一次那每秒要发生几千万次中断CPU光处理中断就忙不过来磁盘数据早就丢光了。打个生活化的比方程序查询方式等于你家门口的小卖部每隔几分钟就打电话问你“要不要补货”你得一直守着电话程序中断方式等于小卖部进货了来敲你门但每次来人都要你亲自下楼签字验收DMA方式则是你直接雇了一个仓库管理员他拿着你事先签好的单据自己把货搬到指定货架全部搬完了才来跟你说一声“搞定了”。DMA就是这个专职搬运工CPU只需要交代一次任务、最后听一次汇报。2.2 一次DMA传送的三个阶段预处理、数据传送、后处理DMA的完整工作过程可以分成三个阶段这也是判断一个人是真懂还是只会背概念的分水岭。第一个阶段是预处理由CPU执行I/O指令完成。CPU要做的事包括往DMA控制器填入传送方向外设→内存还是内存→外设、内存首地址、传送的字数或字节数然后启动外设。这个阶段CPU是全程参与的但只参与这一次。第二个阶段是数据传送这也是DMA的核心阶段。外设的数据通过DMA控制器直接与内存交换不再经过CPU。以磁盘读数据为例磁盘控制器把指定扇区的数据读出来放到DMA控制器的数据缓冲寄存器里然后DMA控制器向CPU发出总线请求获得总线使用权后把数据写到内存地址寄存器指向的内存单元同时主存地址寄存器加1、传送字数计数器减1。这个过程反复进行直到字数计数器减到0。这里有一个常考细节DMA申请总线使用权的方式叫“周期挪用”或“周期窃取”也就是在CPU不访存的那个周期里偷偷占用一次总线。所以DMA传送期间CPU并不是完全停摆只是某个时间片被DMA挤掉了反映到宏观上就是CPU的性能有一点点损耗。第三个阶段是后处理。当传送字数计数器减到0说明一整块数据搬完了DMA控制器会向CPU发一个中断请求。CPU响应这个中断后做一些收尾工作比如检查传送过程有没有出错、处理下一个任务。注意这个中断和程序中断方式里“每次传送一个字节就中断一次”完全不同DMA的后处理中断是在整块数据传送完毕后只发生一次。2.3 DMA控制器的主要组成与记忆方法DMA之所以能自己搬数据是因为它有一套专门的硬件寄存器。王道和唐朔飞教材里介绍的典型DMA控制器至少包含这几个核心部件主存地址寄存器MAR存放数据在内存中的首地址每传送一次自动加1。传送长度计数器WC存放还需传送的数据个数每传送一次自动减1减到0表示整块传送完成。数据缓冲寄存器DBR外设与内存之间的中转站数据先到DBR再进内存或先从内存到DBR再送外设。控制与状态逻辑负责控制传送方向、申请总线、产生中断信号。我复习时自己编过一句口诀“地址、计数、缓冲、控制”这四个词对应DMA控制器最核心的四个部件。选择题喜欢考“DMA控制器里有哪些寄存器”“WC的作用是什么”这种点把这句话刻在脑子里基本不会错。还有个容易混淆的概念要单独强调DMA方式和中断方式不是替代关系DMA传送结束后的“善后”仍然要用中断机制。所以准确的说法是“DMA方式在数据传送阶段不打断CPU只在开始和结束时打断CPU”这句话做判断题时非常有用。3. 外存的计算基础磁道、扇区、柱面别再靠死记3.1 磁盘物理结构扫盲把模型装进脑子磁盘计算题的第一步是把磁盘的物理模型在脑子里立起来。一张磁盘组由多个盘片叠在一起每个盘片有上下两个表面称为记录面。每个记录面上有一圈一圈的同心圆这些圆环就是磁道每个磁道又被等分成若干弧段每一段叫一个扇区。所有记录面上半径相同的磁道合在一起构成一个柱面。这里有几个必考的对应关系盘片数、记录面数、磁头数三者之间的关系。一块盘通常一个记录面对应一个磁头所以“记录面数磁头数”。如果题目说“磁盘组有4个盘片”默认最多有8个记录面但有些盘会把最外表面或最内表面留作备用或者不用所以读题时必须仔细看它写的是“4个盘片”还是“8个记录面”。这两个说法看似差不多算容量时差了一倍属于命题人最喜欢埋的坑。扇区为什么是512字节这个问题看着像冷知识其实关联到格式化容量的计算。早期IBM在软盘时代把扇区大小定为512字节后来硬盘延续了这个约定扇区就成了磁盘最小的可寻址单位。现代硬盘虽然也有4K高级格式化扇区但408真题和教材默认都按512字节处理你不用纠结按512B算就好。3.2 五个必会公式与单位陷阱我把磁盘计算题里会出现的公式整理成五条复习时贴在笔记本扉页上格式化容量 记录面数 × 每面磁道数 × 每磁道扇区数 × 每扇区字节数。非格式化容量 记录面数 × 每面磁道数 × 磁道周长 × 位密度这个公式了解即可408大题近年基本只考格式化容量。内部数据传输率数据传输率 每磁道扇区数 × 每扇区字节数 × 转速转/秒。平均等待时间 旋转半圈所需时间 1 /2 × 转速转/秒。平均存取时间 平均寻道时间 平均等待时间 数据传输时间后一项在题目未给数据或数值很小时常忽略。单位换算是这类题最大的暗坑。408默认里存储容量里的MB常按2^20字节理解而数据传输率有时又按10^6字节算不同参考书口径不完全一致。我的建议是凡是涉及容量统一先换算成字节最后再约分成题目要求的单位凡是涉及时间统一用秒或微秒。只要在同一个式子里保持单位一致就不会被换算卡死。3.3 手把手算一道贴近真题风格的模拟题原题的具体参数网上有各种回忆版细节会有些出入但考点非常稳定。我用一组和真题同量级的参数做演示把整个计算过程完整过一遍。题目假设某磁盘组有4个盘片、8个记录面每个记录面有2048个磁道每个磁道划分为1024个扇区每个扇区大小为512字节磁盘转速为7200转/分钟。第一问求磁盘格式化容量。套公式磁盘容量 8 × 2048 × 1024 × 512字节。这串数拆开看2048是2的11次方1024是2的10次方512是2的9次方8是2的3次方乘起来等于2的33次方字节也就是8GB。按2的20次方为1MB来算就是8192MB。第二问求内部数据传输率。转速7200转/分钟换算成秒7200 ÷ 60 120转/秒。每转一圈读出一个磁道的数据即1024 × 512 524288字节约为512KB。传输率 512KB × 120转/秒 61440KB/s 60MB/s按1MB1024KB即2^20字节计。如果题目按十进制MB结果就是61.44MB/s数值略有差异但判断可行性时结论一致。第三问求平均等待时间。平均等待时间是磁盘转过半圈的时间也就是1/2×120 1/240秒约4.17毫秒。如果题目还给了平均寻道时间比如5ms那平均存取时间就是5 4.17 9.17ms再视情况加上数据传输时间。这三问做完DMA那道后续题的“数据底座”就有了。磁盘每秒传送60MB每秒完成120转、每转1024个扇区所以每秒要处理的扇区数是122880个。这几个数字后面考DMA方式时全部要用第一问和第二问如果算错第三问必错这也是这道题最狠的地方前面错的后面没有机会补救。4. 把DMA和磁盘计算焊在一起真题场景的完整解法4.1 DMA在磁盘读写中的实际角色磁盘是典型的块设备数据以扇区为单位读出速度又特别快天然适合DMA方式。磁盘控制器每准备好一个扇区的数据就可以向DMA控制器发出一次请求DMA控制器拿到总线后把这个扇区的512字节一次性搬到内存。对CPU来说它只在下达指令和最后收尾中断时露面中间几万次扇区传送它一概不管。考题的常考问法就是“算账”如果用中断方式CPU能不能扛住磁盘的传送频率如果用DMA方式DMA本身占用总线的时间占多少比例会不会影响到CPU的正常执行。这类题的精髓在于把“单位时间内的传送次数”和“每次传送的开销”都算出来然后比拼总和是否超过1秒。4.2 一道模拟组合题中断方式 vs DMA方式继续用3.3的磁盘参数。已知磁盘内部数据传输率约60MB/s每秒需处理的扇区数约122880个。先看程序中断方式。假设每传送1个字节CPU需要执行一次中断处理耗时8微秒。磁盘每秒要传送约6000万个字节那么每秒需要多少次中断大约6291万次。每秒中断处理总耗时 6291万 × 8微秒 ≈ 503000000微秒 ≈ 503秒。这个数字远远大于1秒说明CPU即使不吃不喝只处理中断也跟不上磁盘的数据产生速度数据一定会丢失。所以结论是中断方式不可行。有些题目换一种问法如果每传送一个扇区才中断一次每次中断处理时间最长不能超过多少才能不掉数据思路是一样的。每秒122880个扇区两次扇区中断之间的间隔是1/122880秒约8.14微秒。也就是说每次中断处理必须在8.14微秒内结束否则下一个扇区就覆盖来了这在实际的中断现场保护开销下非常困难。这样一算为什么磁盘要用DMA就很直观了。再看DMA方式。假设题给条件一次DMA传送可以把一个扇区的512字节全部搬完耗时为2微秒。每秒有122880个扇区那么DMA占用总线的时间总和 122880 × 2微秒 245760微秒 ≈ 0.246秒占总时间的24.6%。剩下的75%左右时间里CPU可以正常访存和执行程序所以这个方案是可行的。这一步就是22年44题那种“判断可行性”的标准答案结构先算总开销是大于还是小于1秒再下结论。注意DMA方式并非零开销周期挪用会占用总线预处理和后处理也会占用CPU时间只不过这些开销和中断方式比是小了几个数量级完全在可接受范围内。4.3 这套题的通用解题四步法做完上面的模拟题我把这类I/O大题的解法压缩成四步考前可以用它自检。第一步先求磁盘的基础参数。把容量、内部数据传输率、每秒扇区数求出来这是后面所有开销计算的基准算错一步全盘皆输。第二步把数据产生频率换算成“每秒多少次事件”。事件可以是字节、扇区、数据块取决于题目用的是哪种传送单位。磁盘是块设备408里基本默认扇区为单位但中断方式部分可能按字节计算这个要看清题目措辞。第三步算单次事件的开销再乘以每秒事件数得到每秒总开销。中断方式的总开销等于中断处理时间乘以中断次数DMA方式的总开销等于单次DMA传送时间乘以每秒传送次数。第四步和1秒比较。总开销折算后大于1秒说明来不及处理必然丢数据小于1秒则可行还可以进一步算CPU或总线的占用率。到这里不要急着收笔用一句话把结论写清楚比如“中断方式无法满足要求DMA方式可行且总线占用约24.6%”阅卷是按步骤给分的结论句也能拿到分。5. 常见问题与避坑指南这些坑我替你们踩过了5.1 高频翻车点盘点第一个翻车点是单位换算。容量题里1MB按2^20字节还是按10^6字节数据传输率题里MB/s又是哪个口径很多同学在考场上反复纠结。我的办法是全程不换算先算字节最后一步再按题目给出的单位约分。换算越晚出错概率越低。第二个翻车点是平均等待时间忘了除以2。磁盘转一整圈的时间是1/转速但平均等待时间按半圈算因为磁头等扇区转过来的时间在0到一圈之间均匀分布期望值正好是半圈。这个除以2超容易被遗漏属于选择题和综合题都会埋的点。第三个翻车点是盘片数、记录面数、磁头数混为一谈。题目说4个盘片如果没有额外说明可以用8个记录面但要是写了“其中一面不用”或者“最上和最下面不用”就必须按实际记录面数算。读题时圈出“记录面”“磁头”这几个关键词。第四个翻车点是“CPU不参与DMA数据传送”被理解成“CPU全程轻松”。DMA的预处理、后处理仍然要CPU干活周期挪用也会挤占总线周期因此DMA的CPU开销不是零。选择题的选项很喜欢在这里做文章。第五个翻车点是数据传输时间。平均存取时间公式里有三项有些题目故意不给传输时间有些题目给了但数值很小可以忽略也有些题目要求算出来。判断标准是看题目有没有给传输时间相关的数据给了就不要擅自省略。5.2 王道、唐朔飞、白中英怎么配合使用真题永远是最好的复习材料但配套教材也要会用。王道计算机组成原理单科书的I/O章节题目很贴近408风格适合用来建立题型套路它的弱点是个别题目比真题模式化容易让人产生“我已经会了”的错觉。唐朔飞《计算机组成原理》课后题概念性更强有些选择题的干扰项特别刁钻能把你的知识短板逼出来适合在第二轮做。白中英的教材原理更细DMA控制器的寄存器级讲解比前两本都清楚如果对DMA内部逻辑始终一团浆糊可以去翻对应的章节。我复习I/O板块的顺序是先王道精讲打底做对应课后题再挑唐朔飞课后题里关于I/O控制方式和磁盘的题目做一遍错题整理到一个本子上最后把所有年份408真题里的I/O大题循环做两遍以上第一遍不限制时间第二遍严格按考试时间。不要颠倒了顺序一上来就刷真题容易把真题价值榨干二轮时反而无题可做。5.3 复习时容易被忽视的细节DMA方式有三种总线使用权申请方式停止CPU访存、周期挪用、交替访存。408选择题偶尔会考“周期挪用”这种细节理解它的本质是DMA在CPU不访存的间隙插一脚就行。另外通道方式虽然考得少但要能说出它和DMA的区别通道有自己的指令系统可以控制多台设备而DMA只针对一台设备的数据块传送。把这一句记住选择题就不会懵。磁盘计算题里还有一个容易漏掉的点格式化容量和非格式化容量的区别。非格式化容量取决于磁道长度和位密度格式化容量取决于扇区数和扇区大小。真题给的是扇区相关参数时求的一定是格式化容量别自己脑补出位密度。最后再分享一个小技巧我个人在刷这类题时有一个习惯拿到题目先不急着抄公式而是把题目里所有的已知参数列成一个清单然后在每个参数旁边标上它对应的单位。磁盘容量题最大的问题不是不会公式而是算到一半发现自己把“每磁道扇区数”和“每面磁道数”混用了。列清单这个动作看上去多花半分钟但能避免绝大多数低级错误。另外考场计算这类题时如果算出来的结果离谱比如“每秒中断耗时503秒”这本身就是一个信号提示你方向可能对了、结论就是不可行不用怀疑是不是自己算错。反过来如果算出来“DMA总线占用1000%”那一定是哪里搞错了单位或次数赶紧回头检查。把这个“合理性校验”作为最后一步能多捡回好几分。