ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

408真题解析:DMA与磁盘寻址计算全攻略

408真题解析:DMA与磁盘寻址计算全攻略 1. 从一道408真题说起DMA与磁盘寻址到底在考什么2022年408计算机组成原理第44题是一道把I/O控制方式和外存地址计算揉在一起的综合题。当年考完之后群里讨论最热烈的不是DMA本身而是那道题里磁道、扇区的换算——很多人DMA部分写对了结果栽在磁盘容量和地址映射上。这道题其实暴露了一个很典型的问题大部分人在复习408的时候把I/O方式和外存当成两个独立章节去背但真题偏偏喜欢把它们串起来考。这篇文章就是围绕这道题涉及的两个核心知识块展开DMA方式的工作机制以及磁盘磁道、扇区的计算逻辑。不管你是正在准备408的考研党还是本科学计算机组成原理需要搞懂这两块内容的学生我都会从题目背后的原理讲起把参数怎么算、为什么这么算、容易在哪里翻车全部拆开讲清楚。尤其是磁盘计算部分我会给出一套我自己验证过的“三步定位法”基本能覆盖408里所有磁道扇区相关的计算题。先说一下这道题的大致背景。题目给了一个磁盘的参数包括每个扇区的大小、每条磁道的扇区数、磁盘的面数、柱面数等等然后要求计算磁盘容量、数据传输率再结合DMA方式分析数据传送过程。这种题目的特点是单看每个知识点都不难但一旦组合起来计算量不小而且单位换算特别容易出错。我见过太多人公式列对了最后因为把字节和位搞混、或者把ms和s搞混整道题白给。所以接下来的内容我会先把DMA的底层逻辑讲透再进入磁盘计算的实操环节最后给一份常见错误对照表。你如果时间紧可以直接跳到第3节看计算步骤但我建议还是从头看因为不理解DMA的传送单位磁盘计算里的很多参数你根本不知道该用哪个。2. DMA方式的核心机制与真题考法拆解2.1 DMA到底解决了什么问题要理解DMA得先知道没有它的时候CPU有多累。在程序查询方式和中断方式下数据从I/O设备到内存的每一次传送都要经过CPU的寄存器中转。也就是说哪怕你只是从磁盘读1KB的数据CPU也得一个字节一个字节地搬搬完还要处理中断。对于磁盘这种高速外存来说CPU大部分时间都耗在搬数据上了真正干正事的时间被严重挤压。DMA的思路很直接找一个专门的硬件控制器让它直接在外设和内存之间开一条数据通道CPU只负责在开始的时候下命令结束的时候收通知中间搬数据的活全部交给DMA控制器。这就好比你要搬家程序查询方式是你自己一趟一趟搬中断方式是你搬一趟接一个电话再搬下一趟而DMA是你直接叫了一家搬家公司你只需要告诉他们搬什么、搬到哪然后你就可以去干别的事了。这个“别的事”在408的语境里就是CPU继续执行其他指令。DMA控制器在搬运数据的过程中会占用总线CPU如果也要用总线就需要等DMA让出来。这里就涉及到一个关键概念周期挪用周期窃取。DMA控制器每次传送一个数据就“偷”一个总线周期传完之后总线还给CPU。这种方式下CPU和DMA是交替使用总线的CPU的执行速度会稍微慢一点但不会像程序查询那样完全被卡死。2.2 DMA控制器的内部结构和寄存器配置DMA控制器不是一块黑盒它内部有几个关键寄存器408考试里经常考它们的作用。我按重要性排一下内存地址寄存器MAR存放数据要写到内存的哪个地址或者从内存哪个地址读。每传送一个数据这个寄存器的值会自动加一或减一指向下一个存储单元。传送长度计数器DC记录还剩多少数据没传。每传送一个数据计数器减一减到零的时候DMA控制器向CPU发中断告诉CPU“活干完了”。设备地址寄存器DAR存放外设的地址或者设备号用来选中要通信的I/O设备。控制与状态寄存器存放CPU下达的命令读还是写、传送方向、是否允许中断等以及DMA控制器当前的状态。在真题里经常会给出一组初始值让你计算传送结束后这些寄存器的值。比如内存地址寄存器初始值是2000H传送了256个字节那结束后MAR的值就是2000H 256 2100H。这种计算本身不难但要注意地址是字节编址还是字编址如果是字编址每次加的不是1而是字长。注意408真题里出现过“按字节编址”和“按字编址”两种说法一字之差计算结果完全不同。做题时先把编址方式圈出来。2.3 DMA的三种传送方式及其适用场景DMA控制器和CPU争用总线的时候怎么协调这就引出了三种传送方式也是408选择题的高频考点停止CPU访存方式DMA传送期间CPU完全停止访问内存。这种方式控制简单但CPU会有明显的时间浪费。适合数据传送率极高的场景比如高速磁盘的整块数据读取。周期挪用方式DMA每次只占用一个或几个总线周期传完就还给CPU。CPU的执行会被轻微打断但整体影响不大。这是最常用的方式也是408考试里默认的方式。交替访存方式把CPU的工作周期分成两半一半给CPU一半给DMA双方轮流使用内存。这种方式不需要总线请求和响应效率高但硬件实现复杂对CPU的时间划分要求严格。这三种方式在真题里经常以选择题形式出现问你“哪种方式CPU效率最高”或者“哪种方式适合高速外设”。记住一个对应关系停止CPU最简单但最浪费周期挪用最平衡交替访存效率最高但最复杂。2.4 真题中DMA部分的典型问法回到22年44题DMA部分通常会问这么几件事DMA控制器的初始化由谁完成CPU、DMA传送结束后由谁处理CPU通过中断处理、传送过程中CPU能不能访问内存取决于传送方式、以及DMA和中断的区别DMA是硬件控制中断是程序切换。有一类问法特别容易错“DMA方式下数据从磁盘到内存的传送路径是什么”正确答案是磁盘 → DMA控制器 → 内存不经过CPU的通用寄存器。而中断方式下数据是磁盘 → CPU寄存器 → 内存。这个区别是理解DMA本质的关键也是判断题里反复出现的陷阱。3. 磁盘磁道与扇区计算从参数到结果的完整推导3.1 磁盘的物理结构先搞清楚谁是谁磁盘计算题之所以容易出错很大一部分原因是很多人对磁盘的物理结构只有一个模糊的印象。我用一个生活化的类比帮你建立画面感把磁盘想象成一栋圆柱形的大楼大楼有很多层每一层就是一个盘面记录面。每一层上面画了很多同心圆每一个同心圆就是一条磁道。所有层上相同半径的同心圆叠在一起就形成一个柱面。每个磁道又被切成若干段弧每一段就是一个扇区。所以磁盘的容量计算本质上就是算有多少个盘面 × 每个盘面有多少条磁道 × 每条磁道有多少个扇区 × 每个扇区多少字节。这个公式看起来简单但真题里不会直接给你所有参数有时候给你柱面数、盘面数、每道扇区数有时候给你总容量让你反推某个参数有时候还会混入数据传输率的计算。3.2 非格式化容量与格式化容量的区别这是408里一个经典的坑。非格式化容量是指磁盘表面理论上能记录的二进制位数总量通常用位密度和磁道面积来算。格式化容量是指实际操作系统能用的容量按扇区来算每个扇区除了数据区还有头标、校验码等开销。真题里如果问“磁盘容量”默认指的是格式化容量除非题目明确说“非格式化容量”。格式化容量的计算公式是容量 盘面数 × 柱面数 × 每道扇区数 × 每扇区字节数注意这里用的是柱面数而不是磁道数因为每个盘面上的磁道数和柱面数是相等的。有些题目会给“每条磁道”的参数有些会给“每个盘面”的参数要看清单位。3.3 数据传输率的计算别把位和字节搞混数据传输率是指磁盘每秒能读出多少数据。计算公式是数据传输率 每条磁道的容量 × 磁盘转速转/秒或者写成数据传输率 每道扇区数 × 每扇区字节数 × 转速这里最容易出错的地方是转速的单位。题目可能给“每分钟多少转”也可能给“每秒多少转”还可能给“转一圈需要多少毫秒”。我个人的习惯是统一换算成“转/秒”再代入公式这样不容易乱。举个例子如果题目说磁盘转速是7200转/分那就是7200/60 120转/秒。如果每条磁道有64个扇区每个扇区512字节那数据传输率就是64 × 512 × 120 3,932,160字节/秒约等于3.75MB/s。3.4 平均存取时间的三个组成部分磁盘存取时间 寻道时间 旋转延迟 传输时间。这三个部分在408里经常被拆开考。寻道时间是把磁头移动到目标磁道所需的时间。题目通常给“平均寻道时间”直接用就行。旋转延迟是等待目标扇区转到磁头下方的时间。平均旋转延迟 转一圈时间的一半。如果转速是120转/秒转一圈就是1/120秒平均旋转延迟就是1/240秒。传输时间是实际读写数据的时间等于要读的数据量除以数据传输率。有一类题目会问“读取一个扇区需要多少时间”这时候传输时间就是一个扇区的字节数除以数据传输率。但要注意如果题目问的是“平均存取时间”那就要把平均寻道时间、平均旋转延迟和传输时间加起来。3.5 磁道地址的计算从逻辑地址到物理地址这是22年44题里最核心的计算部分。题目通常会给出一个逻辑地址比如第几个扇区让你算出它对应的柱面号、磁头号、扇区号。或者反过来给你柱面号、磁头号、扇区号让你算逻辑地址。我总结的“三步定位法”是这样的第一步确定每个柱面有多少个扇区。每个柱面的扇区数 盘面数 × 每道扇区数。因为一个柱面包含所有盘面上相同半径的磁道每个磁道有相同数量的扇区。第二步用逻辑地址除以每个柱面的扇区数商就是柱面号余数就是柱面内的偏移。这里要注意逻辑地址是从0开始编号还是从1开始编号题目一般会说明。第三步用余数除以每道扇区数商就是磁头号盘面号余数就是扇区号。同样注意编号起点。举个例子假设磁盘有4个盘面每道16个扇区逻辑地址从0开始。现在要计算逻辑地址100对应的柱面号、磁头号、扇区号。每个柱面的扇区数 4 × 16 64。 100 ÷ 64 1 余 36所以柱面号是1。 36 ÷ 16 2 余 4所以磁头号是2扇区号是4。这个计算过程在真题里会以各种变体出现比如给你柱面号和磁头号让你算起始逻辑地址或者给你一个地址范围让你判断是否越界。核心逻辑是一样的就是把三维地址和一维逻辑地址互相转换。3.6 真题中磁盘部分的常见参数陷阱我整理了一份参数陷阱对照表这些都是我在做题和教学过程中反复见到的坑陷阱类型常见表述正确理解转速单位7200rpm需要除以60换算成120r/s容量单位KB/MB/GB注意是1024进制还是1000进制408通常用1024扇区编号从0开始/从1开始题目会说明不说明时默认从0开始盘面数记录面数/磁头数三者通常相等但要注意是否有一个面用于伺服信息柱面数磁道数/柱面数每个盘面的磁道数等于柱面数传输率位/秒还是字节/秒看清题目问的是位还是字节提示408真题里如果出现“每个扇区存放512字节”那计算容量时用的就是512字节。如果出现“每个扇区512个字节其中数据区500字节”那格式化容量按512算有效数据容量按500算。看清题目问的是哪个。4. 完整实操从题目参数到最终答案的推演过程4.1 题目参数整理与单位统一拿到一道磁盘计算题第一步不是急着套公式而是把所有参数列出来统一单位。我以22年44题的典型参数为例具体数值以真题为准这里用一组等价参数演示磁盘转速7200转/分每个扇区512字节每条磁道64个扇区盘面数8柱面数1024逻辑地址从0开始按扇区编号先把转速换算成转/秒7200 ÷ 60 120转/秒。然后算每个柱面的扇区数8 × 64 512个扇区。再算总容量8 × 1024 × 64 × 512字节 268,435,456字节 256MB。这些基础数据算出来之后后面的问题就都有依据了。4.2 数据传输率的计算过程数据传输率 每道扇区数 × 每扇区字节数 × 转速 64 × 512 × 120 3,932,160字节/秒。如果题目要求用KB/s表示就除以10243,932,160 ÷ 1024 3840KB/s也就是3.75MB/s。这里有一个细节有些题目会问“磁盘的最大数据传输率”那用的就是上面的公式。但如果问的是“平均数据传输率”那就要考虑寻道和旋转延迟的影响通常题目不会这么考除非明确说了“连续读取”。4.3 逻辑地址到物理地址的转换实例假设题目给出逻辑地址是5000要求计算柱面号、磁头号、扇区号。每个柱面512个扇区。 5000 ÷ 512 9 余 392柱面号 9。 392 ÷ 64 6 余 8磁头号 6扇区号 8。所以逻辑地址5000对应柱面9、磁头6、扇区8。反过来如果题目给柱面号10、磁头号3、扇区号20要算逻辑地址逻辑地址 柱面号 × 每柱面扇区数 磁头号 × 每道扇区数 扇区号 10 × 512 3 × 64 20 5120 192 20 5332。这个双向转换在真题里经常出现尤其是结合DMA传送的时候题目会问“DMA控制器要从逻辑地址X开始传送Y个扇区请计算结束时的物理地址”。这时候你需要先把起始逻辑地址转成物理地址然后加上传送的扇区数对应的偏移再转回逻辑地址或者直接给出物理地址。4.4 DMA传送与磁盘读写的联合分析22年44题的一个典型问法是CPU通过DMA方式从磁盘读取一批数据到内存磁盘的起始逻辑地址是A传送N个扇区内存起始地址是B。问DMA控制器需要如何设置寄存器传送结束后各寄存器的值是多少。这种题目的解题步骤是计算传送的总字节数N × 512。设置内存地址寄存器初值为B。设置传送长度计数器初值为N × 512如果按字节计数或N如果按扇区计数。设置设备地址寄存器为磁盘的起始逻辑地址A。传送结束后内存地址寄存器 B N × 512传送长度计数器 0。这里要注意有些题目会问“DMA控制器发出几次中断”答案是1次因为传送全部完成后才发中断。如果题目问“DMA控制器占用总线多少次”那就要看传送方式如果是周期挪用每次传送一个字节占用一次总线总共占用N × 512次。4.5 磁盘访问时间的具体计算假设题目要求计算读取逻辑地址5000开始的1个扇区所需的时间已知平均寻道时间8ms转速120转/秒。旋转延迟 1/2 × (1/120) 1/240秒 ≈ 4.17ms。 传输时间 512字节 ÷ 3,932,160字节/秒 ≈ 0.13ms。 总时间 8 4.17 0.13 ≈ 12.3ms。如果题目问的是“连续读取同一磁道上的多个扇区”那寻道时间和旋转延迟只需要算一次后续扇区的读取只需要传输时间。这也是为什么磁盘的顺序读取比随机读取快很多。4.6 一道完整真题的推演记录我把上面这些知识点串成一道完整的题目来演示某磁盘有8个盘面每个盘面1024条磁道每条磁道64个扇区每个扇区512字节转速7200转/分。CPU采用DMA方式从磁盘读取从逻辑地址1000开始的100个扇区到内存地址2000H开始的位置。求磁盘容量、数据传输率、DMA寄存器初值、传送结束后的寄存器值、以及读取这100个扇区的总时间平均寻道时间8ms。磁盘容量8 × 1024 × 64 × 512 256MB。数据传输率64 × 512 × 120 3,932,160字节/秒。DMA寄存器初值内存地址寄存器 2000H传送长度计数器 100 × 512 51200设备地址寄存器 1000传送结束后内存地址寄存器 2000H 51200 2000H C800H E800H传送长度计数器 0总时间寻道时间 8ms旋转延迟 4.17ms传输时间 51200 ÷ 3,932,160 ≈ 13ms总时间 ≈ 25.17ms这道题基本覆盖了408里磁盘DMA的所有考点。你如果能把这道题独立做出来22年44题的同类型问法就不会有问题。5. 常见问题与排查技巧实录5.1 单位换算错误的典型场景单位换算是磁盘计算题的第一大杀手。我见过最多的错误是把转速的“转/分”直接代入公式忘记除以60。还有就是容量计算时把KB当成1000字节而不是1024字节。408真题里默认用1024进制除非题目明确说“按1000计算”。另一个高频错误是扇区编号的起点。有些题目说“逻辑地址从0开始”有些说“从1开始”如果不注意最后的柱面号和磁头号会差1。我的建议是做题时先把编号起点写在草稿纸最上面每一步都对照一下。5.2 DMA与中断混淆的判断题陷阱判断题里经常出现这样的表述“DMA方式下数据传送由CPU控制完成。”这是错的DMA传送由DMA控制器硬件控制CPU只负责初始化和后处理。还有“DMA传送过程中CPU不能执行程序”这也是错的周期挪用方式下CPU可以继续执行只是偶尔让出总线。还有一个容易混的点DMA传送结束后DMA控制器向CPU发的是中断信号但这个中断和普通I/O中断的处理方式不同。DMA中断通常只是通知CPU“数据准备好了”CPU不需要在中断服务程序里搬数据只需要处理后续逻辑。5.3 磁道扇区计算中容易忽略的边界条件边界条件在真题里经常以“判断是否越界”的形式出现。比如题目给了一个逻辑地址问它是否在磁盘的有效范围内。这时候你需要先算出磁盘的总扇区数然后判断逻辑地址是否小于总扇区数。总扇区数 盘面数 × 柱面数 × 每道扇区数 8 × 1024 × 64 524,288。如果逻辑地址是524,288那就越界了因为编号是从0到524,287。还有一种边界情况是跨柱面传送。如果起始逻辑地址在一个柱面的末尾传送的扇区数又比较多就会跨到下一个柱面。这时候寻道时间就要算两次因为磁头需要移动到新的柱面。不过408真题里通常不会考这么复杂的情况除非题目明确说了“跨柱面”。5.4 常见问题速查表问题现象可能原因排查方法容量算出来和选项差1024倍单位换算错误检查KB/MB的进制柱面号比正确答案大1编号起点搞错确认逻辑地址从0还是1开始数据传输率算出来是实际值的60倍转速没换算把rpm除以60DMA传送次数算错传送单位搞混确认是按字节还是按扇区计数总时间算出来偏小漏算旋转延迟平均旋转延迟是转一圈时间的一半物理地址转换结果不对柱面扇区数算错每柱面扇区数 盘面数 × 每道扇区数5.5 我个人的避坑经验做了这么多年的408真题我总结出三条最实用的经验第一草稿纸上先画一个磁盘的示意图。把盘面、柱面、磁道、扇区的关系画出来标上题目给的参数。这样在做地址转换的时候你能直观地看到每一步在算什么不容易乱。第二所有计算都带单位。不要只写数字把单位写在旁边。比如“120转/秒”而不是“120”“512字节”而不是“512”。这样在最后检查的时候你能一眼看出单位有没有问题。第三做完之后用估算验证。比如算出磁盘容量是256MB你可以估算一下8个盘面每个盘面1024条磁道每条磁道64个扇区每个扇区512字节。1024 × 64 × 512 ≈ 32MB再乘以8就是256MB。这个估算过程能帮你快速判断结果是否合理。提示408考试里磁盘计算题的分值通常不低而且计算量偏大。建议在平时练习时就掐时间做把每道题控制在8分钟以内。如果超过10分钟还没算完说明方法有问题需要重新梳理思路。6. 从这道题延伸出去的知识网络6.1 DMA与通道、I/O处理机的层次关系DMA是I/O控制方式演进中的一个中间阶段。在它之前是程序查询和中断在它之后是通道和I/O处理机。通道可以看作是一个功能更强的DMA控制器能执行通道程序控制多台设备的并行操作。I/O处理机则是一台独立的处理器有自己的指令系统能承担更多的I/O管理任务。408考试里这几种方式的对比是选择题的常客。记住一个递进关系程序查询 → 中断 → DMA → 通道 → I/O处理机越往后CPU的干预越少硬件越复杂效率越高。6.2 磁盘阵列与RAID的初步概念虽然408不深入考RAID但磁盘容量计算和RAID的容量计算有相通之处。RAID 0是把数据分散到多个磁盘上容量是各磁盘之和RAID 1是镜像容量是单个磁盘的容量RAID 5带奇偶校验容量是(N-1)个磁盘的容量。这些概念在选择题里偶尔会出现理解它们有助于你更全面地掌握外存知识。6.3 固态硬盘与机械硬盘的对比固态硬盘没有磁道和扇区的物理结构但逻辑上仍然按扇区寻址。408考试里目前还是以机械硬盘的计算为主但了解固态硬盘的特点无寻道时间、随机读取快、有擦写次数限制对理解存储层次有帮助。6.4 操作系统中的磁盘调度算法磁盘调度算法FCFS、SSTF、SCAN、C-SCAN是操作系统的内容但和计算机组成原理的磁盘知识紧密相关。寻道时间的优化是这些算法的核心目标。如果你在复习408建议把这两部分放在一起看能形成完整的知识闭环。6.5 这道题对后续复习的启示22年44题最大的价值在于它展示了一种命题思路把I/O控制方式和外存计算结合起来考。这意味着你在复习的时候不能把各章节完全割裂。DMA的参数设置和磁盘的地址计算本质上是在考同一个东西——数据在存储层次之间怎么流动。你如果能把数据流动的路径画清楚这类题目就变成了填空题。我建议你在复习计算机组成原理的时候每学完一个章节就问自己一个问题这个知识点和前面哪个章节有联系比如学到DMA就想想它和中断、和总线、和存储器的关系。学到磁盘就想想它和文件系统、和I/O软件层次的关系。这种串联式的复习方法比孤立地背知识点效率高得多。最后再分享一个小技巧做真题的时候把每道题涉及的知识点标签写在旁边。比如22年44题你可以标上“DMA”“磁盘容量”“地址转换”“数据传输率”。这样复习到后期你翻一遍真题就能看出哪些知识点是反复考的哪些是偶尔出现的。反复考的就是必须拿下的偶尔出现的就是需要了解的。这个方法我自己用了很多年效果很稳。
返回列表