资讯动态

DMA与磁盘寻址计算:2022年408真题深度拆解与解题模板

发布时间:2026/9/29 23:04:43 来源:尧图企业网站定制
1. 从一道408真题说起DMA与磁盘寻址到底在考什么2022年408计算机组成原理第44题是一道把I/O控制方式和外存磁道扇区计算揉在一起的综合题。当年考完之后群里哀嚎一片不是因为知识点没学过而是因为很多人复习DMA的时候只背了“DMA不需要CPU干预”这句话复习磁盘的时候只记了“平均寻道时间”的公式结果题目把两者一结合就不知道从哪儿下手了。这道题的核心考点其实就两个第一DMA方式下数据传送的过程和CPU的参与程度第二磁盘上磁道、扇区、柱面的地址计算以及数据传输时间的推导。看起来是两个独立的知识块但408特别喜欢把它们串起来考——因为在实际的计算机系统中DMA控制器搬运的数据往往就来自磁盘这类外存设备两者天然就是配合工作的。这篇文章我打算把这道题拆透。不管你是正在准备408的考研党还是本科学完成原理想补补短板的同学又或者是工作中需要理解底层I/O机制的开发者我都会从最基础的概念讲起把DMA的工作流程、磁盘的物理结构、寻址计算、时间推导一步步展开配上可以直接抄的解题模板和我自己踩过的坑。看完之后你不仅能拿下这道题遇到同类型的变形题也能自己推。2. DMA方式的核心原理与工作流程拆解2.1 DMA到底解决了什么问题要理解DMA得先知道没有它的时候计算机是怎么干活的。最早的I/O方式叫程序查询方式CPU不停地轮询设备状态寄存器设备没准备好就一直在那儿等CPU利用率极低。后来进化到中断方式设备准备好之后发中断通知CPUCPU再执行中断服务程序来搬运数据。但中断方式有个问题每传送一个字或字节都要打断CPU一次如果传大量数据CPU就被频繁打断上下文切换的开销非常大。DMADirect Memory Access直接存储器访问的思路很直接既然CPU只是当搬运工那为什么不找一个专门的硬件来搬这个硬件就是DMA控制器DMAC。CPU只需要在传送开始前告诉DMAC从哪个设备读/写、内存起始地址在哪、传多少数据、传送方向是什么。剩下的搬运工作DMAC自己完成CPU该干嘛干嘛去。注意DMA并不是完全不需要CPU而是CPU只在传送开始前和结束后参与传送过程中不需要CPU逐字干预。这个区别在选择题里经常被拿来设陷阱。2.2 DMA控制器的内部结构与寄存器DMAC内部有几个关键寄存器理解它们是理解整个流程的基础内存地址寄存器MAR存放数据在内存中的起始地址每传一个字自动加一或减一。传送长度计数器WC记录还剩多少数据没传每传一个字自动减一减到零表示传送完成。设备地址寄存器DAR存放I/O设备的地址或设备号。控制与状态寄存器存放传送方向读/写、传送模式单字/块、中断使能等控制位。这几个寄存器在传送开始前由CPU通过程序查询方式写入注意这里又用到了程序查询但只是初始化阶段数据量很小传送过程中由DMAC硬件自动维护。2.3 DMA的三种传送方式及适用场景DMA并不是只有一种工作模式根据DMAC和CPU谁优先占用总线分为三种传送方式工作原理优点缺点适用场景停止CPU访存DMAC占用总线期间CPU完全停止访存控制简单传送速度快CPU效率低内存利用率低高速设备大批量传送周期挪用DMAC趁CPU不访存的周期插入一个存取周期CPU和DMA都能用内存效率较高控制复杂可能需要等待大多数实际系统交替访存把存取周期分成两半一半给CPU一半给DMA不需要总线申请速度最快硬件逻辑复杂CPU和DMA频率需匹配高速缓存与主存之间408考试中最常考的是周期挪用也叫周期窃取因为它是实际系统中最常用的方案。周期挪用的核心思想是CPU在执行指令的过程中并不是每个时钟周期都在访存DMAC就趁这些空隙“偷”一个存取周期来传数据。如果恰好CPU也要访存DMAC就发一个总线请求信号CPU在当前的总线周期结束后让出总线。2.4 DMA传送的完整流程把上面的内容串起来一次完整的DMA传送流程是这样的CPU初始化DMAC通过程序查询方式把内存起始地址、传送长度、设备地址、传送方向写入DMAC的各个寄存器。CPU启动设备向I/O设备发送启动命令设备开始准备数据。设备发出DMA请求设备准备好一个数据后向DMAC发出DMA请求信号。DMAC向CPU发总线请求DMAC收到设备请求后向CPU发出总线请求HOLD信号。CPU响应并让出总线CPU在当前总线周期结束后发出总线响应信号HLDA将总线控制权交给DMAC。DMAC执行数据传送DMAC占用总线在设备和内存之间直接传送一个数据同时修改MAR和WC。判断传送是否完成如果WC不为零回到步骤3继续如果WC为零DMAC向CPU发中断信号。CPU处理中断CPU执行中断服务程序做传送后的收尾工作如校验数据、设置标志位等。这个流程里步骤3到步骤7是完全由硬件自动完成的CPU不参与。步骤1、2和8需要CPU参与。所以DMA方式下CPU的参与程度是“两端参与中间不参与”。3. 磁盘磁道与扇区计算从物理结构到地址推导3.1 磁盘的物理组织方式磁盘的盘面像一片片叠起来的唱片每个盘面有两个面有的硬盘只有单面每个面由许多同心圆组成每一个同心圆叫一个磁道Track。磁道从外向内编号最外圈是0道。每个磁道又被等分成若干段每一段叫一个扇区Sector扇区是磁盘读写的最小单位通常是512字节或4KB。所有盘面上相同编号的磁道组成一个柱面Cylinder。为什么要引入柱面这个概念因为磁盘的读写磁头是装在同一个机械臂上的所有磁头同时移动。当磁头定位到某个磁道时所有盘面的对应磁道都就位了。所以按柱面来组织数据可以减少磁头移动次数提高读写效率。磁盘的地址通常用柱面号-磁头号-扇区号CHS来表示。比如CHS地址(0, 0, 1)表示0柱面、0磁头0号盘面、1号扇区。注意扇区号一般从1开始编而柱面和磁头号从0开始。3.2 磁盘容量的计算公式磁盘的非格式化容量计算公式总容量 盘面数 × 每面磁道数 × 每道扇区数 × 每扇区字节数举个例子一个磁盘有4个盘面2个盘片双面每面有1000个磁道每道有64个扇区每扇区512字节。那么总容量 4 × 1000 × 64 × 512 B 131,072,000 B ≈ 125 MB这个公式看起来简单但考试的时候经常会在“盘面数”上做文章。比如题目说“4个盘片”那盘面数就是8每个盘片两个面如果说“4个记录面”那盘面数就是4。这个细节不注意整道题就全错了。3.3 磁盘地址的计算与转换给定一个逻辑块号LBA怎么转换成CHS地址这是408常考的题型。假设磁盘有H个磁头盘面每面有C个柱面磁道每道有S个扇区。逻辑块号从0开始编号。转换公式柱面号 LBA ÷ (H × S)磁头号 (LBA ÷ S) mod H扇区号 (LBA mod S) 1注意扇区号要加1因为扇区从1开始编号。这个“加1”是很多人容易漏掉的细节。反过来如果知道CHS地址求逻辑块号LBA 柱面号 × (H × S) 磁头号 × S (扇区号 - 1)这两个公式要能熟练互推考试的时候没有时间让你现推。3.4 磁盘存取时间的组成一次磁盘读写操作的时间由三部分组成存取时间 寻道时间 旋转延迟 传输时间寻道时间Seek Time磁头从当前位置移动到目标磁道所需的时间。这个时间与磁头移动的距离有关通常题目会给“平均寻道时间”。旋转延迟Rotational Latency磁头到达目标磁道后等待目标扇区旋转到磁头下方所需的时间。平均旋转延迟 磁盘旋转半圈的时间 1/(2r)其中r是转速转/秒。传输时间Transfer Time读写一个扇区所需的时间 每道扇区数 × 转速的倒数... 等等更准确地说传输一个扇区的时间 1/(r × S)其中S是每道扇区数。把转速换算一下如果转速是n转/分钟那么每秒转n/60转每转一圈的时间是60/n秒。平均旋转延迟 60/(2n)秒 30/n秒。举个例子转速7200 RPM每道500个扇区。平均旋转延迟 30/7200秒 ≈ 4.17 ms。传输一个扇区的时间 60/(7200 × 500)秒 ≈ 0.0167 ms。3.5 一道典型的磁道扇区计算题题目某磁盘转速为10000 RPM平均寻道时间为5ms每道有200个扇区每扇区512字节。求读取一个200KB文件所需的时间假设文件连续存放且不需要额外的寻道。解题思路先算需要读多少个扇区200KB / 512B 400个扇区。400个扇区分布在多少个磁道上400 / 200 2个磁道。需要寻道几次如果文件从某个磁道开始连续存放跨2个磁道需要1次寻道从初始位置到第一个磁道 1次换道从第一个磁道到第二个磁道 2次寻道。但题目说“不需要额外的寻道”通常理解为只算一次平均寻道时间。旋转延迟平均旋转延迟 30/10000秒 3ms。传输时间读400个扇区每个扇区传输时间 60/(10000 × 200)秒 0.03ms。400个扇区 12ms。总时间 寻道时间 旋转延迟 传输时间 5 3 12 20ms。这里有个容易错的地方如果文件跨了多个磁道换道时间要不要算严格来说要算但很多题目会简化说“忽略换道时间”或者“文件在同一磁道内”。做题的时候一定要看清题目的假设条件。4. 当DMA遇上磁盘2022年44题的完整拆解4.1 题目还原与关键信息提取2022年44题的题干大致是这样的根据考生回忆整理某计算机的CPU主频为500MHzCPI为4即执行一条指令平均需要4个时钟周期。磁盘的转速为7200 RPM平均寻道时间为8ms每道有500个扇区每扇区512字节。采用DMA方式从磁盘读取数据到内存DMA控制器的数据传送率为...具体数值记不清了但核心是要求计算DMA传送对CPU的影响以及磁盘读取时间。这道题的关键在于它同时考察了磁盘的存取时间计算和DMA方式下CPU的占用情况。很多同学只算了磁盘时间忘了DMA初始化阶段CPU的参与或者把DMA传送过程中CPU的“不参与”理解成了“CPU完全空闲”。4.2 磁盘读取时间的详细计算按照上一节的公式我们一步步来转速7200 RPM → 每秒120转 → 每转一圈8.33ms平均旋转延迟 8.33/2 ≈ 4.17ms平均寻道时间 8ms题目给定每道500个扇区传输一个扇区的时间 8.33ms / 500 ≈ 0.0167ms如果题目要求读一个扇区总时间 8 4.17 0.0167 ≈ 12.19ms如果题目要求读多个扇区比如读一个磁道的数据500个扇区那么传输时间 500 × 0.0167 8.33ms正好一圈总时间 8 4.17 8.33 20.5ms。4.3 DMA传送对CPU的影响分析DMA传送过程中CPU并不是完全不受影响。在周期挪用方式下DMAC每传一个字都要“偷”一个总线周期。如果CPU正在访存DMAC需要等待如果CPU不访存DMAC就直接用。所以DMA传送会降低CPU的访存效率但不会让CPU完全停止工作。在停止CPU访存方式下DMAC占用总线期间CPU完全不能访存但CPU内部的运算不涉及访存的操作可能还能继续取决于具体实现。不过408考试中通常简化为停止CPU访存方式下DMA传送期间CPU停止工作。这道题如果问“DMA传送期间CPU能执行多少条指令”就需要根据DMA传送的总时间和CPU的指令执行速度来算。比如DMA传送用了12msCPU主频500MHzCPI4那么CPU在这段时间内理论上能执行 12ms × 500MHz / 4 1,500,000条指令。但如果是周期挪用方式CPU实际能执行的指令数要打折扣因为总线被DMAC占用了一部分。4.4 解题模板与步骤总结把这类题的解题步骤固化下来提取参数转速、寻道时间、每道扇区数、扇区大小、传送数据量、CPU主频、CPI。计算磁盘时间寻道时间 平均旋转延迟 传输时间。计算DMA传送时间如果DMA传送率已知用数据量除以传送率如果未知用磁盘传输时间代替。分析CPU参与初始化阶段CPU执行几条指令通常题目会给传送阶段CPU是否参与取决于DMA方式结束后CPU执行中断服务程序。综合计算根据题目要求算出总时间、CPU占用率、能执行的指令数等。提示这类题最容易错的地方是单位换算。转速RPM要换成转/秒ms和s要统一KB和B要分清1KB1024B还是1000B408中通常按1024算但磁盘容量有时按1000算要看题目说明。5. 常见问题与排查技巧实录5.1 DMA相关的高频易错点问题一DMA和中断的区别到底是什么这是选择题的常客。核心区别在于中断方式下每传一个数据都要CPU执行中断服务程序来搬运DMA方式下数据搬运由硬件完成CPU只在开始和结束时参与。另外中断是程序切换需要保存和恢复现场DMA是硬件控制不需要保存现场。问题二DMA传送过程中CPU能不能访存取决于DMA方式。停止CPU访存方式下不能周期挪用方式下CPU可以访存但DMAC会争抢总线交替访存方式下CPU和DMA交替使用存取周期都能访存。考试时一定要看清题目说的是哪种方式。问题三DMA的优先级为什么比中断高因为DMA传送的是高速设备的数据如果不及时传送数据可能会丢失比如磁盘旋转过去了。而中断处理的是低速事件稍微延迟一下没关系。所以DMAC的总线请求优先级高于CPU的中断请求。5.2 磁盘计算的高频易错点问题一盘面数到底怎么算题目说“4个盘片”盘面数8说“4个记录面”盘面数4说“4个磁头”盘面数4。这个一定要看清楚。问题二扇区号从0还是从1开始磁盘的扇区号通常从1开始柱面和磁头号从0开始。计算LBA转CHS时扇区号要加1CHS转LBA时扇区号要减1。这个细节错了整道题就废了。问题三平均旋转延迟到底是半圈还是一圈平均旋转延迟是半圈的时间。因为目标扇区可能在磁头下方的任何位置平均需要等半圈。有些同学记成了一整圈结果算出来时间翻倍。问题四传输时间要不要算上换道时间如果文件跨了多个磁道严格来说需要加上换道时间。但很多题目会简化说“文件连续存放且在同一柱面”或者“忽略换道时间”。做题时先看题目假设没有假设的话保守做法是加上。5.3 独家避坑技巧画图辅助做磁盘题的时候在草稿纸上画一个简单的磁盘示意图标出磁道、扇区、起始位置能帮你理清思路。单位统一把所有时间单位统一成ms或s把所有容量单位统一成B或KB避免中途换算出错。检查量纲算完之后检查一下结果的量纲对不对。比如算时间结果应该是ms或s如果算出来是ms²那肯定错了。代入验证如果时间充裕把结果代回原题验证一下。比如算出的总时间应该大于寻道时间传输时间应该小于旋转延迟通常情况。6. 从这道题延伸出去的知识网络6.1 I/O控制方式的完整谱系DMA只是I/O控制方式的一种。完整的谱系是程序查询 → 程序中断 → DMA → 通道 → I/O处理机。每一种方式都是在前一种的基础上改进的核心改进方向是减少CPU的参与程度提高并行性。程序查询CPU全程参与效率最低。程序中断CPU逐字参与但等待期间可以执行其他程序。DMACPU只在两端参与数据搬运由硬件完成。通道CPU只需发一条通道指令通道自己执行通道程序完成一批数据的传送。I/O处理机独立的处理器几乎完全不需要CPU参与。理解了这条演进线很多选择题就能秒杀。6.2 磁盘与内存的层次结构磁盘属于外存速度比内存慢几个数量级但容量大、价格低。计算机的存储层次是寄存器 → Cache → 主存 → 外存。DMA主要用在主存和外存之间的数据传送因为这两个层次的速度差异大用CPU来搬运太浪费。6.3 408中DMA与磁盘的常见组合考法给磁盘参数和DMA参数求读取一个文件的总时间。给CPU参数和DMA方式求DMA传送期间CPU能执行多少指令。给磁盘地址和LBA求CHS地址或反过来。比较不同I/O控制方式下CPU的利用率。这些考法万变不离其宗核心就是那几个公式和概念。把本文的公式和流程吃透遇到任何变形都能应对。6.4 实际系统中的DMA应用在实际的计算机系统中DMA无处不在。网卡收发包、显卡传输图像数据、硬盘读写数据背后都是DMA在干活。甚至你手机里刷视频视频解码器把解码后的数据送到屏幕也可能用到DMA。理解DMA的工作原理不仅对考试有用对理解整个计算机系统的工作方式都有帮助。我在实际调试嵌入式系统的时候就经常和DMA打交道。比如用STM32做音频采集ADC采集的数据通过DMA直接搬到内存缓冲区CPU只需要在缓冲区满的时候处理一下就行。如果不走DMACPU就要不停地读ADC数据寄存器根本干不了别的事。这个体验让我对DMA“解放CPU”的意义有了非常直观的认识。7. 复习建议与实战训练方法7.1 知识点掌握的自检清单复习完这部分内容后你可以用下面的清单自检能说出DMA控制器的四个关键寄存器及其作用。能画出DMA传送的完整流程图不用mermaid用文字或手绘。能区分DMA的三种传送方式及其优缺点。能默写磁盘容量的计算公式。能熟练进行LBA和CHS的互相转换。能推导磁盘存取时间的三个组成部分。能分析DMA传送对CPU指令执行的影响。如果每一条都能做到这部分内容就过关了。7.2 推荐练习题源王道计算机组成原理的I/O章节和外存章节题目质量高解析详细。唐朔飞《计算机组成原理》课后题特别是I/O系统和外存部分的习题。历年408真题中所有涉及DMA和磁盘的题目至少做三遍。白中英《计算机组成原理》的配套习题有些题目角度不同能拓宽思路。7.3 实战训练方法我自己的方法是先按知识点分类做题再按年份做套题。分类做题的时候把同一知识点的所有题目放在一起对比它们的考法和解题思路找出共性。做套题的时候限时完成模拟考试环境训练解题速度。另外错题一定要整理。不是抄一遍题目和答案就完了而是要写清楚当时为什么错、正确的思路是什么、这个知识点还有哪些可能的考法。这样一道错题能顶十道新题。7.4 考场上的时间分配建议408考试时间紧张计算机组成原理部分大约占45分。I/O和磁盘这部分通常出1-2道选择题和1道大题。选择题控制在2分钟内一道大题控制在15-20分钟。如果一道题卡了5分钟还没思路先跳过做完后面的再回来。很多时候做完后面的题再回来看思路就通了。最后再分享一个小技巧考试的时候遇到磁盘计算题先把所有参数列在草稿纸上标好单位然后一步步算。不要跳步不要心算408的计算题一步错步步错。把每一步都写清楚即使最后结果错了步骤分也能拿不少。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑