☰
DMA与磁盘容量计算:一道题拆解408真题高频考点
2026/9/28 2:07:59 网站建设 项目流程

每年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(按1MB=1024KB,即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%”,那一定是哪里搞错了单位或次数,赶紧回头检查。把这个“合理性校验”作为最后一步,能多捡回好几分。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询