ARTICLE DETAIL

资讯详情

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

408真题解析:DMA方式与外存磁道扇区计算综合题

408真题解析:DMA方式与外存磁道扇区计算综合题 1. 从一道408真题说起DMA与外存寻址到底在考什么2022年408计算机组成原理第44题是一道把DMA方式和磁盘磁道、扇区计算揉在一起的综合题。很多同学第一次做这道题的时候第一反应是这俩知识点不是分开考的吗结果一上手就发现题目给的条件里既有DMA控制器的传送参数又有磁盘的物理地址结构你必须同时把两条线捋清楚才能算出正确答案。这道题的核心考点其实就两个第一I/O设备与主机之间进行信息传送时DMA方式是怎么工作的包括DMA控制器的寄存器配置、传送单位的确定、以及DMA与CPU争用总线的时机第二外存磁盘的磁道、扇区、柱面这些物理结构如何换算成地址以及读写一个数据块时磁头需要移动多少个磁道、盘面旋转多少圈。这两个知识点单独拿出来都不算难但408的命题风格就是喜欢把它们串起来让你在一个场景里同时用到。我当年备考的时候这道题反复做了三遍才彻底搞明白。第一遍是看答案觉得懂了第二遍是自己动手算发现中间某个环节卡住了第三遍是给别人讲的时候才发现有个细节我一直理解错了。所以这篇文章我不打算只给你一个标准答案而是把这道题背后涉及的知识体系完整拆开从DMA的工作机制讲到磁盘的物理寻址再回到题目本身把每一步的计算逻辑都摊开来说清楚。适合读这篇文章的人正在备考408的考研党、正在学计算机组成原理的本科生、以及想重新捡起硬件基础知识的开发者。不管你是零基础还是已经学过一遍我都会尽量用生活化的类比把原理讲透同时给出可以直接套用的计算模板。2. DMA方式的工作机制为什么它能让CPU从搬运工变成指挥官2.1 三种I/O控制方式的演进逻辑要理解DMA得先知道它之前的两代方案为什么不够用。最早的是程序查询方式CPU不断轮询设备状态寄存器设备没准备好就一直在那等CPU利用率极低。后来进化到中断方式设备准备好之后主动发中断通知CPUCPU再执行中断服务程序来搬运数据。中断方式比查询方式好很多但有个致命问题每传送一个字或一个字节CPU都要被打断一次然后执行一段中断服务程序。对于磁盘这种高速设备来说数据传送速率可能达到几百MB/s如果每个字节都中断一次CPU基本上就不用干别的了。DMA方式的核心思想就是把数据搬运这件事从CPU手里拿走交给一个专门的硬件控制器来做。CPU只需要在传送开始前告诉DMA控制器从哪搬到哪、搬多少、搬完之后告诉我一声然后就可以去执行其他程序了。整个数据传送过程由DMA控制器独立完成不需要CPU逐字干预。这里有个关键点很多人容易忽略DMA控制器并不是完全不需要CPU参与而是CPU只在传送开始和结束时介入。开始的时候CPU要初始化DMA控制器的寄存器结束的时候DMA控制器发中断通知CPU。中间的数据搬运过程CPU完全不参与。2.2 DMA控制器的内部寄存器与传送流程DMA控制器内部有几个关键寄存器理解它们是做对题目的前提寄存器名称作用初始化者内存地址寄存器MAR存放数据在内存中的起始地址CPU传送长度计数器DC记录剩余需要传送的字节数CPU设备地址寄存器DAR存放I/O设备的地址或数据缓冲区地址CPU控制状态寄存器CSR控制传送方向、传送模式、中断使能等CPU传送流程大致是这样的CPU先通过程序指令把内存起始地址写入MAR把传送字节数写入DC把设备相关信息写入DAR然后设置CSR启动DMA传送。DMA控制器向CPU发出总线请求信号HRQCPU在当前总线周期结束后发出总线响应信号HLDADMA控制器获得总线控制权开始逐字节或逐字传送数据。每传送一个单位MAR自动加一或加字长DC自动减一。当DC减到零时DMA控制器释放总线并向CPU发出中断请求表示传送完成。注意DMA控制器获得总线控制权的方式有两种——停止CPU访存和周期挪用。停止CPU访存是指DMA传送期间CPU完全不能访问内存适合高速大批量传送周期挪用是指DMA控制器趁CPU不访问内存的间隙插入一个传送周期适合低速设备。408考试中如果没有特别说明通常默认是停止CPU访存方式。2.3 DMA方式与中断方式的关键区别很多同学在复习的时候会把DMA和中断混在一起这里必须把区别说清楚中断方式是程序切换每传送一个数据单位都要保存现场、执行中断服务程序、恢复现场开销大。DMA方式是硬件控制数据传送不经过CPU的寄存器直接在设备和内存之间进行只有传送开始和结束需要CPU干预。中断方式的优先级通常低于DMA请求因为DMA请求如果得不到及时响应数据可能会丢失。中断方式可以处理异常事件DMA方式只负责数据搬运。用个类比来说中断方式就像你每搬一块砖都要给工头打电话请示DMA方式就像你直接雇了一个搬运工告诉他从A搬到B搬100块搬完了跟你说一声就行。3. 磁盘的物理结构磁道、扇区、柱面到底怎么算3.1 磁盘的物理组织方式磁盘的盘面是由一个个同心圆组成的每一个同心圆叫做一个磁道Track。磁道从外向内编号最外层是0道。每个磁道又被等分成若干个扇区Sector扇区是磁盘读写的最小单位通常是512字节或者4KB。所有盘面上相同编号的磁道组成一个柱面Cylinder。磁盘的地址通常用柱面号、磁头号、扇区号三个参数来表示简称CHS地址。要读写一个特定的扇区磁头需要先移动到指定的磁道寻道然后等待盘面旋转到指定扇区的位置旋转延迟最后进行读写传输。这里有个很重要的概念磁盘的读写是以扇区为单位的但实际传输时可能一次传输多个扇区。题目中如果问传送一个4KB的数据块需要多少时间你需要先算出这个数据块占多少个扇区再结合磁盘转速和寻道时间来计算。3.2 磁道容量与扇区数的计算关系磁盘的格式化容量计算公式是总容量 盘面数 × 每面磁道数 × 每道扇区数 × 每扇区字节数这个公式看起来简单但题目往往会给你一些间接条件比如磁盘转速为7200转/分平均寻道时间为8ms每道扇区数为64每扇区512字节然后问你读取一个扇区需要多少时间。这时候你需要分别计算寻道时间、旋转延迟和传输时间。旋转延迟的计算磁盘转一圈的时间 60 / 转速秒。平均旋转延迟 转一圈时间的一半。比如7200转/分转一圈需要60/7200 1/120秒 ≈ 8.33ms平均旋转延迟就是4.17ms。传输时间的计算传输一个扇区的时间 转一圈时间 / 每道扇区数。比如每道64个扇区转一圈8.33ms传输一个扇区就是8.33/64 ≈ 0.13ms。3.3 磁道与扇区的地址换算在实际题目中经常需要把逻辑地址转换成CHS地址。假设磁盘有N个盘面每个盘面有T个磁道每个磁道有S个扇区那么逻辑地址L对应的CHS地址为柱面号 L / (N × S)磁头号 (L % (N × S)) / S扇区号 L % S这个换算在做DMA传送题目时特别重要因为DMA控制器需要知道数据在磁盘上的具体位置才能发出正确的读命令。提示408考试中如果题目给了磁盘地址或者逻辑块号通常需要你先转换成CHS地址再计算寻道和旋转时间。这一步很多同学会漏掉导致后面全错。4. 回到22年44题完整解题链路与计算过程4.1 题目条件的拆解与关键信息提取虽然原始题目正文没有给出但根据408真题的常见命题方式这道题通常会给出以下条件磁盘的转速、平均寻道时间、每道扇区数、每扇区字节数、DMA控制器的传送参数如内存起始地址、传送字节数、以及CPU的主频或总线周期。题目会要求你计算DMA传送的总时间或者计算磁盘读取一个数据块的时间或者判断DMA传送期间CPU能否执行其他程序。拿到题目后第一步永远是把所有已知条件列出来并标注单位。很多计算错误都是因为单位不统一造成的比如寻道时间给的是ms转速给的是转/分传输时间算出来是μs最后相加的时候忘了换算。第二步是确定题目问的是什么时间。是纯DMA传送时间还是包括磁盘寻道和旋转的完整读取时间还是CPU被占用的时间不同的问法对应不同的计算范围。第三步是分阶段计算。磁盘读取通常分为三个阶段寻道时间、旋转延迟、数据传输时间。DMA传送本身的时间取决于总线带宽和传送字节数。如果题目问的是从发出读命令到数据全部传送到内存的总时间那就需要把磁盘的三个阶段和DMA传送时间加起来。4.2 寻道时间、旋转延迟与传输时间的分别计算假设题目给出的条件是磁盘转速7200转/分平均寻道时间8ms每道64个扇区每扇区512字节要读取一个4KB的数据块。计算过程如下首先确定数据块占多少个扇区4KB 4096字节4096 / 512 8个扇区。寻道时间题目给的是平均寻道时间8ms直接使用。旋转延迟转一圈时间 60 / 7200 1/120秒 8.33ms平均旋转延迟 8.33 / 2 4.17ms。传输时间传输8个扇区的时间 8 × (8.33 / 64) 8 × 0.13 1.04ms。总磁盘读取时间 8 4.17 1.04 13.21ms。如果题目还要求计算DMA传送时间假设总线宽度为32位总线周期为100ns传送4KB数据需要 4096 / 4 1024次总线传送每次100ns总DMA传送时间 1024 × 100ns 102.4μs。注意DMA传送时间和磁盘读取时间通常是重叠的。磁盘在读取数据的同时DMA控制器可以把已经读出的数据传送到内存。所以总时间不一定等于两者相加具体要看题目的时序描述。4.3 DMA传送与CPU执行的并行关系判断这是44题最容易出错的地方。题目经常会问在DMA传送期间CPU能否执行其他程序答案取决于DMA控制器采用哪种总线占用方式。如果是停止CPU访存方式DMA传送期间CPU不能访问内存但CPU内部寄存器的操作和指令译码可能还在继续。严格来说CPU不能执行需要访存的指令但可以执行一些不需要访存的微操作。如果是周期挪用方式DMA控制器只在CPU不访存的周期插入传送CPU的程序执行基本不受影响。如果是交替访存方式CPU和DMA控制器交替使用内存周期CPU的执行速度会降低但不会完全停止。408考试中通常默认DMA传送和CPU执行是并行的除非题目明确说CPU停止工作。这一点在做时间计算题时特别关键因为如果并行总时间取两者中的较大值如果串行总时间取两者之和。5. 这道题背后的知识网络从DMA到外存再到总线5.1 DMA方式在I/O系统中的位置DMA不是孤立的知识点它处在I/O系统这个大的知识框架里。I/O系统包括I/O接口、I/O端口、I/O控制方式、总线仲裁等。DMA控制器本身是一个I/O接口它通过总线与CPU和内存连接。理解DMA需要同时理解总线的工作原理特别是总线请求和总线响应的握手过程。在408的考纲里I/O控制方式是一个必考知识点几乎每年都会出题。查询方式、中断方式、DMA方式这三种的对比是高频考点。DMA方式又经常和磁盘、总线、中断嵌套等知识点结合出题。5.2 外存寻址与文件系统的关联磁盘的磁道、扇区计算不仅是组成原理的考点也是操作系统文件系统部分的基础。文件系统在磁盘上分配空间时需要知道磁盘的物理结构。比如FAT文件系统、NTFS文件系统、ext4文件系统它们在格式化磁盘时都会涉及到簇Cluster的概念而簇的大小通常就是若干个扇区。热词里提到的空硬盘写入数据填充磁道和扇区的顺序其实是一个很有意思的问题。磁盘在写入数据时通常是按照柱面、磁头、扇区的顺序来填充的也就是先填满一个柱面的所有磁道再移动到下一个柱面。这样做的好处是减少寻道次数提高写入效率。5.3 408真题的命题规律与复习策略从近几年的408真题来看计算机组成原理的命题越来越倾向于跨章节综合。一道题可能同时涉及DMA、磁盘、总线、中断等多个知识点。这就要求我们在复习的时候不能只盯着单个知识点而要建立知识网络理解各个模块之间的关联。我的建议是第一轮复习按章节逐个击破第二轮复习做真题时重点关注跨章节的题目第三轮复习自己画知识图谱把相关的知识点串起来。比如DMA这个点你可以画出它和中断、总线、磁盘、内存的关联图这样遇到综合题就不会慌。6. 实操中的常见错误与避坑经验6.1 单位换算错误最容易丢分的地方我在做题和给别人讲题的过程中发现单位换算是最高频的错误来源。磁盘转速给的是转/分但计算旋转延迟时需要的是秒寻道时间给的是ms但和μs级的传输时间相加时忘了换算总线周期给的是ns但传送时间算出来是μs。这些错误看起来低级但在考场上紧张的时候特别容易犯。我的做法是所有时间统一换算成μs或者ms再计算。具体来说如果题目中最大的时间单位是ms那就把所有时间都换算成ms如果涉及的总线周期是ns级那就统一换算成μs。换算完之后在草稿纸上标注清楚最后写答案的时候再换回题目要求的单位。6.2 混淆DMA传送时间和磁盘访问时间很多同学看到题目问传送一个数据块需要多少时间就直接把磁盘的寻道、旋转、传输时间加起来忽略了DMA传送本身的时间。或者反过来只算DMA传送时间忘了磁盘读取的时间。正确的做法是先判断题目问的是磁盘访问时间还是DMA传送时间还是两者之和。如果题目说从磁盘读取一个数据块并传送到内存那通常需要把磁盘的三个阶段和DMA传送时间都考虑进去。如果题目只说DMA传送一个数据块那可能只需要计算总线传送时间。6.3 忽略DMA与CPU的并行性这是44题的一个经典陷阱。题目可能会给出CPU执行一段程序需要的时间然后问在DMA传送期间CPU能执行多少条指令。如果你忽略了DMA和CPU的并行性直接把两个时间相加那就错了。正确的思路是DMA传送和CPU执行是同时进行的所以总时间取两者中的较大值。CPU能执行的指令数 DMA传送时间 / CPU执行一条指令的时间。当然这个计算的前提是DMA采用周期挪用方式CPU的访存请求和DMA的访存请求会竞争内存周期实际执行速度可能会降低。6.4 磁道和扇区编号的起始值磁盘的磁道编号通常从0开始扇区编号有的从0开始有的从1开始。408考试中如果没有特别说明一般默认从0开始。但在计算扇区数量时要注意是编号为0到63还是共64个扇区这两种说法的结果是一样的但计算过程中容易搞混。另外磁盘的地址换算中柱面号、磁头号、扇区号的顺序是固定的不能颠倒。有些题目会故意把顺序打乱考察你是否真正理解了CHS地址的含义。7. 从这道题延伸出去DMA在现代系统中的应用7.1 DMA在存储系统中的角色现代计算机系统中DMA的应用非常广泛。除了磁盘之外网卡、显卡、声卡等设备都使用DMA方式进行数据传输。比如网卡收到数据包后通过DMA直接把数据写入内存不需要CPU逐字节搬运。显卡在渲染画面时也通过DMA从内存读取纹理数据。在存储系统中NVMe SSD使用多队列DMA可以同时处理多个I/O请求大大提高了存储性能。这些现代技术与408考试中讲的DMA基本原理是一脉相承的理解了基本原理再去看这些新技术就很容易上手。7.2 DMA与虚拟内存的交互在支持虚拟内存的系统中DMA传送涉及到物理地址和虚拟地址的转换。DMA控制器通常使用物理地址而CPU程序使用的是虚拟地址。所以操作系统在设置DMA传送时需要把虚拟地址转换成物理地址或者使用IOMMUI/O内存管理单元来做地址转换。这也是408考试中可能涉及的一个延伸点。如果题目提到虚拟地址和DMA你需要注意DMA控制器使用的是物理地址需要先进行地址转换。7.3 从408到实际开发DMA编程的基本思路虽然408考试不要求写代码但了解DMA编程的基本思路对理解原理很有帮助。在嵌入式开发中使用DMA通常需要以下步骤配置DMA控制器的源地址、目的地址、传送长度、传送方向使能DMA通道等待DMA传送完成中断在中断服务程序中处理后续逻辑。这些步骤和408考试中描述的DMA工作流程是完全对应的。如果你以后从事嵌入式开发或者驱动开发这些知识会直接派上用场。8. 复习建议与做题技巧8.1 建立DMA知识清单复习DMA这个知识点的时候我建议你列一个清单把以下内容都过一遍DMA控制器的组成MAR、DC、DAR、CSRDMA的三种总线占用方式停止CPU访存、周期挪用、交替访存DMA与中断的区别和联系DMA传送的完整流程初始化、总线请求、数据传送、中断通知DMA传送时间的计算方法DMA与磁盘、总线、内存的关联这个清单可以帮你查漏补缺确保没有遗漏任何考点。8.2 磁盘计算题的通用模板对于磁盘磁道、扇区的计算题我总结了一个通用模板列出所有已知条件统一单位计算转一圈的时间 60 / 转速计算平均旋转延迟 转一圈时间 / 2计算传输一个扇区的时间 转一圈时间 / 每道扇区数计算传输N个扇区的时间 N × 传输一个扇区的时间总磁盘访问时间 寻道时间 旋转延迟 传输时间如果需要计算DMA传送时间用传送字节数 / 总线宽度 × 总线周期判断DMA和CPU是否并行决定总时间是取和还是取大这个模板可以套用到绝大多数磁盘计算题上熟练之后做题速度会快很多。8.3 真题反复做的正确姿势408真题的价值极高但很多同学做真题的方式不对。第一遍做的时候不要看答案限时完成模拟考场状态。做完之后对答案重点看错题和蒙对的题。第二遍做的时候不要只关注答案对不对要关注解题过程是否规范每一步的计算依据是什么。第三遍做的时候尝试给别人讲这道题如果你能讲清楚说明你真的懂了。我在备考的时候把22年44题做了五遍。第一遍错了第二遍对了但过程不规范第三遍能讲清楚但速度慢第四遍速度提上来了第五遍看到类似的题目能直接反应出解题思路。这个过程看起来很笨但效果非常好。8.4 考场上的时间分配建议计算机组成原理在408试卷中占45分通常有11道选择题和2道大题。大题的分值高但计算量大容易超时。我的建议是选择题控制在25分钟以内大题每道控制在15分钟以内。如果一道题卡住了先跳过把后面的题做完再回来。对于DMA和磁盘这种计算题先在草稿纸上把公式和计算过程写清楚再誊写到答题卡上。这样即使最后结果算错了过程分也能拿到一部分。9. 我个人在实际操作中的体会这道22年44题我前前后后研究了很久最大的体会是408的题目不是考你背了多少知识点而是考你能不能把知识点串起来用。DMA和磁盘这两个知识点单独看都不难但放在一起考就需要你理解它们之间的时序关系和依赖关系。另外一个体会是计算题一定要动手算不能只看答案。看答案的时候觉得每一步都懂但自己动手的时候就会发现各种问题——单位忘了换算、公式记错了、并行关系判断错了。只有亲手算过几遍才能真正掌握。最后分享一个小技巧做磁盘计算题的时候可以在草稿纸上画一个简单的磁盘示意图标出磁道、扇区、柱面的位置这样有助于理解题目描述的场景。虽然画图会花一点时间但能帮你避免很多理解上的错误。
返回列表