资讯详情

DMA与外存计算:从408真题看磁盘I/O综合题解法

📅 2026/9/28 19:34:36 | 华诺云谱 👁 阅读
DMA与外存计算:从408真题看磁盘I/O综合题解法
备考408的过程里计算机组成原理的I/O章节和外存计算一直是很多人头疼的两个点。2022年那道44题把这两个知识点焊在了一起一边是DMA方式一边是磁道、扇区的计算。很多同学单独背DMA原理会背单独算磁盘容量会算一旦合成一道综合题就卡在单位换算和时序关系里。这篇文章我就以这道题为引子把DMA方式和外存计算这两块知识彻底拆开讲透帮大家把这一整条知识链打通。无论你现在是一轮复习刚接触计组还是二轮刷真题时被这道题绊住这篇文章都适合你。我会先从命题角度讲清楚为什么这两个点总爱一起考再分别把DMA的机制和磁盘计算的底层逻辑掰开揉碎最后用一道和44题同款考法的题目做完整推演。全程不堆结论重点讲每个数字、每个公式背后的为什么。1. 从22年44题看DMA与外存计算为何总打包出现1.1 命题人把两个章节串成了一个完整场景先想一个问题磁盘这种外存设备和DMA方式为什么天然是一对磁盘工作时有一个特点数据是以连续的比特流从磁头下经过的转速一旦跑起来数据就是源源不断往外冒的。如果这种连续数据流用程序中断方式处理CPU每收到一个字节或一个字就要被打断一次去执行中断服务程序。磁盘转速7200转/分钟时数据传输率动辄每秒几兆字节每字节到来的时间间隔是零点几微秒而一次中断响应加现场恢复就要十几甚至几十微秒CPU根本接不住。所以高速块设备必须用DMA。DMA允许外设和主存之间直接建立数据通路数据不经过CPU内部寄存器CPU只在整块数据传送开始前做初始化、结束后处理中断。这样一来命题人只要把磁盘和DMA放在同一个题干里就能自然地把I/O控制方式一章和外存计算一章组合出一道综合题。2022年44题就是这么来的——它不是故意刁难人而是把现实中磁盘控制器的真实工作方式搬到了考卷上。1.2 看懂组合逻辑比刷十道题更管用既然这两块知识注定要一起考那复习的时候就不能把它们当成孤立的章节。很多人在计组教材里学到I/O那章时DMA的原理还停留在不需要CPU干预这句话上学到外存那章时磁道扇区计算又只是套公式。结果真上了考场题目问磁盘以DMA方式传送数据到主存CPU在什么阶段被占用就不知道该怎么把设备侧的参数和控制方式侧的时序对应起来。我建议大家复习时先建立这样一个整体认知一个完整的DMA读操作从外设角度看是磁盘转一圈、数据从磁头读出、在控制器里拼成块、通过总线进主存从CPU角度看是预处理、让出总线、响应中断。设备参数决定了数据产出的节奏DMA机制决定了CPU在什么时间点介入。把这两条时间线在脑子里叠在一起这类综合题就变成了一道普通的时序计算题。2. DMA方式核心机制CPU到底放权放到什么程度2.1 从程序查询到DMACPU参与度的四个档位I/O设备与主机之间进行信息传送的控制方式最常考的就是四种程序查询方式、程序中断方式、DMA方式、通道方式。它们的本质区别在于CPU参与数据传输的程度不同。程序查询方式是CPU全程亲自盯着设备状态字寄存器设备没准备好就反复查询数据每传送一步都要CPU执行指令完成。程序中断方式好一些设备准备就绪后主动发中断请求CPU暂时放下手头工作去处理但每传一个字节或一个字CPU就要被打断一次现场保护和恢复的开销很大。DMA方式则把数据传送这段最繁重的工作交给了DMA控制器CPU只在块的边界上介入。通道方式更进一步通道可以执行通道程序管理多台设备CPU只需要发一条I/O指令。这个递进关系我建议画成一条CPU介入程度的轴从高到低查询、中断、DMA、通道。408真题里反复出现的考点就是让你判断某种设备该用哪种方式以及这些方式下CPU的开销差异。2.2 DMA传送的完整时序谁在干活谁在等待DMA的一次完整传送分为三个阶段预处理、数据传送、后处理。预处理由CPU执行几条指令完成。CPU要把主存起始地址写入DMA控制器的内存地址寄存器把要传送的数据字数写入字计数器设置传送方向是外设到主存还是主存到外设然后向磁盘控制器发出启动命令。这几步做完之后CPU就回到原程序继续执行接下来漫长的数据传送过程它都不用管。数据传送阶段是DMA控制器接管总线来完成的。磁盘每读出一个数据块DMA控制器就把数据从设备的缓冲寄存器直接送到主存指定地址同时内存地址寄存器加1、字计数器减1。注意这里数据不经过CPU的通用寄存器这是DMA名字里Direct的由来。当字计数器减到0说明这一块数据传送完毕DMA控制器向CPU发出中断请求。后处理阶段CPU响应中断进入中断服务程序对传送结果做校验和收尾。如果还有数据要继续传CPU会再次初始化DMA如果没有了就结束这次I/O操作。理解了这个时间轴很多题就好做了。题目问DMA方式下CPU在哪些阶段占用答案就是预处理和后处理阶段。数据传送阶段CPU虽然让出了总线控制权但它在逻辑上处于被解脱的状态可以继续执行不访问总线的指令而不是完全停机。2.3 三种DMA传送方式的内存总线占用策略DMA传送期间如何使用主存总线有三种典型策略CPU停止法、周期挪用、交替访存。这是选择题和概念题的另一个高频出题点。CPU停止法也叫成组传送方式。DMA控制器一旦获得总线控制权就连续传送一整批数据直到整块传完才把总线还给CPU。这种方式实现简单传送速度最快但整个传送期间CPU如果要访存就只能在一边等着对CPU的运行影响很大。周期挪用方式则是每传送一个字或字节DMA就申请一次总线用完立刻释放。CPU大部分时间照常运行只是每个字被偷走一个总线周期。这种方式特别适合磁盘这类数据均匀到达的设备因为磁盘的数据是按固定速率流出的不需要一次性霸占总线。交替访存方式是把CPU的访存周期和DMA的访存周期在时间上错开两者各自使用自己的时间片互不干扰。这种方式需要主存提供更高的带宽硬件的交叉存储结构配合实际使用中并不多见但概念题偶尔会考。我自己的记忆技巧是CPU停止法对应批处理周期挪用对应零售交替访存对应错峰出行。三种方式的区别不在于数据对不对而在于CPU受到的干扰程度不同。408考试里问周期挪用时CPU受影响最小之类的话术本质就是考这三种方式的折中。3. 磁道与扇区外存计算题的数学底子3.1 磁盘物理结构一个盘片从上到下全是同心圆讲磁盘计算之前先把磁盘的物理结构对齐。一个磁盘组通常由多个盘片组成每个盘片有两个记录面每个记录面对应一个磁头。每个记录面上从外圈到内圈划分成很多同心圆每个同心圆就是一个磁道。所有记录面上半径相同的磁道集合叫做柱面——柱面数等于单面的磁道数。每个磁道又被划分为若干扇区扇区是磁盘I/O的最小可寻址单位通常一个扇区512B也有1KB甚至4KB的。这里要提醒一句408考试默认磁盘是恒定角速度CAV方式工作也就是磁盘转速固定所有磁道每秒钟转过的角度相同。在这个模型下每条磁道的扇区数是相同的磁道容量也就相同。代价是外圈磁道的位密度每英寸能记录的比特数比内圈低因为外圈周长长同样的数据摊得更开。3.2 容量计算非格式化容量为什么执着于内圈磁盘容量有两种口径非格式化容量和格式化容量。这个区分很关键很多题目挖坑就挖在这里。非格式化容量指磁道上能记录的总位数计算方式一般是记录面数 × 每面磁道数 × 最内圈磁道周长 × 位密度。为什么要用最内圈算因为位密度是介质的一个物理极限内圈周长最短在最内圈能放下的位密度上限决定了整个系统的记录能力。如果按外圈周长去标定位密度内圈就会发现放不下同样的位数。这个问题在真题里偶尔会以为什么非格式化容量按最内圈磁道计算的形式出现在选择题或者填空里。格式化容量指磁道划分扇区、去掉扇区间的间隙和头部校验等开销后用户真正能用的容量。计算公式很直接记录面数 × 每面磁道数 × 每磁道扇区数 × 每扇区字节数。因为CAV下每道扇区数相同所以格式化容量跟磁道在盘面的哪个半径没有关系。举个例子8个记录面、每面200个磁道、每磁道100个扇区、每扇区512B格式化容量就是8×200×100×512B 81,920,000B约等于78.13MiB。这个数字后面第4章的例题还会用到。3.3 数据传输率与平均存取时间的计算细节数据传输率是磁盘计算的核心指标。在CAV模型下磁盘转一圈读出的数据量正好等于一条磁道的用户数据量所以数据传输率 每磁道容量 × 转速转/秒如果转速给的是7200rpm一定要先除以60变成120转/秒。每磁道容量 扇区数 × 扇区大小。这里算出来的单位是字节/秒。平均存取时间则是另一个必考公式它由三段构成平均寻道时间 平均旋转延迟时间 传输时间。平均寻道时间题目一般直接给描述的是磁头从当前磁道移动到目标磁道所需的平均时间。平均旋转延迟指的是目标扇区转到磁头下方所需的平均时间由于磁头的位置是随机的平均要转半圈所以等于 60 /2 × 转速rpm秒。传输时间则是磁头从数据起点扫过数据终点的时间等于要读的数据量除以数据传输率或者等于扇区数 / 每磁道扇区数 × 转一圈时间。这三个时间放在一起有很强的迷惑性。寻道时间和旋转延迟是以毫秒计的传输时间在多数题里是零点几毫秒很多人算着算着就把传输时间丢了。可恰恰是这个不起眼的传输时间在题干里给足数据、要求精确计算时会让你和标准答案差出零点几毫秒选择题里就是两个选项的距离。4. 一道44题同款考法的完整推演4.1 题目条件与设问设计下面这道题按22年44题的命题思路整理而来数据做了典型化处理方便展示完整解题过程。题目某磁盘组共有8个记录面每个记录面有200个磁道每个磁道划分为100个扇区每个扇区512B。磁盘转速为7200rpm平均寻道时间为5ms。该磁盘通过DMA方式与主存交换数据每次DMA传送4KB数据恰好是8个扇区CPU在每块数据传送前的预处理需要20μs传送完成后的中断处理需要10μs。求1磁盘的格式化总容量 2磁盘的数据传输率 3若磁头已经位于目标磁道上读取一个4KB的DMA块平均需要多少时间不考虑寻道 4磁盘连续读盘时CPU用于处理DMA的占用率约为多少。先别急着套公式四问之间是有逻辑关系的第一问算容量第二问算产出速率第三问是单次IO的时间成本第四问回到DMA的CPU开销。这道题把设备物理参数和DMA机制串成了一条完整的链条。4.2 分步计算全过程第一问格式化总容量直接用公式 8 × 200 × 100 × 512B 81,920,000B。这里要注意进制。考试里存储容量如果没特殊说明通常按2的10次方换算81,920,000 ÷ 1024 ÷ 1024 ≈ 78.13MiB。有些题目会给1MB10^6B的说明那就按81.92MB写。最稳妥的做法是式子里的字节数保留原样最后一步按题目的说明去换算不要自己默认。第二问先把转速换算成秒 7200rpm ÷ 60 120转/秒。 每磁道容量 100扇区 × 512B 51200B。 数据传输率 51200B × 120转/秒 6,144,000B/s ≈ 6.14MB/s。这一步考察的就是每转一圈读一条磁道的用户数据本质上和转速直接挂钩。如果把7200rpm直接当成120转/秒之外的数值或者忘了每个磁道100扇区的前提这个数据率立刻就会差出数量级。第三问磁头已在目标磁道上所以不需要寻道。平均旋转延迟 转一圈时间的一半 60 ÷2 × 7200 4.17ms。读取4KB数据对应8个扇区在一条磁道上连续读8个扇区需要转过的角度是磁道的8%也就是 8 / 100 0.08圈。0.08圈对应的时间 0.08 ×60 ÷ 7200≈ 0.667ms。所以平均时间 平均旋转延迟 传输时间 4.17 0.667 ≈ 4.84ms。这里有个非常容易错的地方平均旋转延迟是半圈而不是一圈。很多同学写公式时没有除以2直接算成8.33ms第三问结果直接翻倍还多。为什么平均要转半圈因为磁头落到目标磁道的时刻与目标扇区刚好转到磁头下方的时刻是完全随机的平均而言你还得等半圈才能迎来扇区起点。只有题目明确说目标扇区恰好位于磁头正下方旋转延迟才能取0。第四问回到DMA的CPU占用率。先算一个4KB数据块从磁盘读出的节奏4KB 4096B按数据传输率6,144,000B/s计算产生一个4KB块所需的时间 4096 ÷ 6,144,000 ≈ 0.0006667s 666.7μs。在这666.7μs里CPU需要消耗在DMA上的时间 预处理20μs 中断处理10μs 30μs。因此CPU的占用率 30 ÷ 666.7 ≈ 4.5%。这个结果很有代表性哪怕磁盘一直在高速读盘CPU也只需要拿出大约4.5%的时间去伺候DMA剩下的95%以上的时间都可以继续跑用户程序。这就是为什么磁盘设备一定采用DMA方式而不是中断方式——用中断方式按字节响应的话这个占用率会直接爆表。4.3 考场上的检查方法做完这类题我建议大家养成一个三连查的习惯。第一查单位。转速转没转成秒μs和ms之间是否统一。第二查口径。格式化容量用的是扇区数据大小非格式化容量用的是位密度两者不要混。第三查旋转延迟。半圈的半字有没有漏掉题目说的平均是不是暗示你要取半圈。这三查花不了三十秒但能拦住大多数粗心错误。我自己在模拟考试里复盘过这类综合题丢分几乎都不是因为不会而是因为某个单位在某一步悄悄错了后面全盘崩掉。宁可多花十秒回头验算也别急着做下一题。5. 这类综合题的延伸变体与复习复盘方法5.1 从44题延伸出的高频变体把DMA和磁盘计算这个组合练熟之后我还想给大家补充几个常在真题或模拟题里出现的变体方向遇到它们别慌本质还是同一套东西。第一个变体是文件读取时间的计算。题目会给你一个文件大小比如200MB文件在磁盘上连续存放问你从平均寻道开始到读完整个文件大概需要多少时间。这个题就是把第4章的例题放大寻道一次旋转等待半圈然后连续读取多个磁道的数据。文件占的磁道数 文件大小 ÷ 磁道容量传输时间 磁道数 × 转一圈时间。注意连续文件只需要一次寻道不是每个磁道都重新找一次。第二个变体是结合缓冲区的题目。磁盘数据通过DMA送入主存缓冲区缓冲区大小有限问如果缓冲区满了是否会发生数据覆盖。这类题的关键是把DMA传送间隔和缓冲区填满时间做对比体现了对数据产出节奏和DMA传送节奏两件事的综合理解。第三个变体是把DMA换成通道方式问通道程序如何组织多个设备的传送。这个考频不高但40法案几年前把通道和DMA放在同一个选择题里比对过你至少要知道通道能管理多台设备、能执行通道程序而DMA控制器通常对应一台设备。5.2 错题整理与知识点串联的具体做法如果你已经被这类综合题绊过几次我强烈建议做一次跨章节合并的错题整理。具体方法是准备一张卡片或者一个文档页左边画DMA的三个阶段时间轴右边写磁盘的三个核心公式格式化容量、数据传输率、平均存取时间中间用一条箭头连起来标注CPU预处理和后处理发生在块边界上磁盘数据按固定节奏到达。这种卡片的用处在于每次复习I/O章节时你会顺带看到磁盘公式复习外存计算时又会想起DMA的时序。两章知识在脑子里形成条件反射式的关联考场上一看到磁盘DMA的题干就不需要临时回忆两条孤立的知识线了。做题方面我的建议是近十年的408真题中所有涉及I/O和外存的题目放在一起刷不用成套做专门横向对比。你会发现很多年份的题目虽然数据不同但解题动作一模一样先算设备侧的速率参数再算控制方式侧的CPU开销最后把两者做除法或者加法。把这个动作练成肌肉记忆这类题对你来说就从综合难题降级成了送分题。我在备考时至少把22年这道44题复盘了三遍。第一遍对着答案勉强看懂第二遍把所有单位重新推导了一遍第三遍把DMA三种方式和磁盘参数的时间轴画在同一张草稿纸上。三遍下来我最大的感受是408里最让人头疼的往往不是单个知识点有多难而是知识点之间那种明明相关但你复习时没串起来的疏离感。DMA和磁盘计算就是最典型的组合一旦把两条时间线在脑子里重叠起来后面的路就会顺很多。希望大家也能用这个方法把更多类似的跨章节考点提前串好而不是在考场上才第一次意识到它们会出现在同一道题里。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑