☰
磁盘容量与访问时间计算:从物理结构到调度算法一次理清
2026/10/21 15:16:02 网站建设 项目流程

磁盘相关计算这块,我在备考软件设计师的时候印象非常深刻。上午的基础知识题里,它几乎年年出现,命题角度集中在磁盘容量、访问时间、磁盘调度算法和RAID可靠性这四件事上。很多人一开始都觉得公式不难,但一做题就错,丢分点往往不是计算本身,而是对物理过程理解得不够透:平均旋转延迟忘了除以2、SCAN方向判断反了、盘面数和盘片数混在一起算,这些都是老问题。这篇复习笔记我按真题常见的命题方向把每个知识点拆开讲一遍,配上完整计算过程和容易踩的坑,正在系统复习的朋友可以直接拿来当查漏补缺的清单。

1. 先搞清楚磁盘的物理模型,容量计算才不会翻车

1.1 盘面、磁道、柱面、扇区,四个基础概念一次性理清

磁盘容量计算的基础是物理结构。一个硬盘内部有多张盘片叠在一起,每张盘片有上下两个面,每个面上配一个磁头,所以“盘面数”通常等于“磁头数”。这个关系很多人知道,但真做计算题时,题目说“有4个盘片,每面有200个磁道”,有些人直接拿4当盘面数去乘,结果整个容量少了一半。记住:4个盘片默认是8个盘面,除非题目明确说明最外层或最内层不用。

磁道是从外往里排列的同心圆,从0开始编号。磁头臂移动时,就是在不同磁道之间切换。这里有个容易混淆的概念叫“柱面”:所有盘面上同一半径的磁道构成一个柱面。数据在磁盘上不是按盘面一个一个存,而是先写满一个柱面的所有磁道,再移动磁头到下一个柱面。为什么这么设计?因为切换磁头是电子切换,很快,而移动磁头臂是机械动作,很慢。优先写满柱面能显著减少磁头移动次数,这个思想在后面的访问时间计算里还会体现。

扇区是磁盘I/O的最小单位,每个扇区能存固定字节数,传统硬盘几乎都是512字节,现在的新盘也开始用4KB扇区。考试里一般还是默认512字节,题目没特殊说明就按512算。磁道上的一系列扇区之间有间隙,扇区内部还包含地址标识、同步信息和校验字段,这部分会直接影响下面要说的格式化容量。

1.2 格式化容量和非格式化容量,到底谁大谁小

磁盘容量有两个概念:非格式化容量和格式化容量。非格式化容量是盘面上能记录的所有物理信息量,包括磁道间隙和扇区间隙这些不被用户数据占用的部分;格式化容量是盘面经过低级格式化之后,留给用户数据使用的总容量。低级格式化时,每个扇区会被写入扇区头、地址标记、校验码等额外信息,这部分要占用磁道空间,所以格式化容量一定小于非格式化容量。

考试里只要提到用户可用的存储容量,基本都是格式化容量。有些教材会把非格式化容量公式写成“位密度 × 磁道周长 × 磁道数”,但这个在软考中很少直接考计算,知道概念,能判断选项里谁大谁小就够了。实际考试高频公式只有一个:格式化容量 = 每扇区字节数 × 每磁道扇区数 × 每面磁道数 × 盘面数。注意乘的顺序无所谓,关键是四个因子一个都不能少,尤其是“盘面数”。

1.3 容量计算实战,一道经典题的完整推导

我们拿一道典型题走一遍流程。题目:某硬盘有4个盘片,每个盘面有200个磁道,每个磁道有16个扇区,每个扇区512字节,求该硬盘的格式化容量。

先数盘面数。4个盘片,每个盘片两个面,共8个盘面。然后是每面的磁道数200,每磁道扇区数16,每扇区字节数512。代入公式:容量 = 8 × 200 × 16 × 512 字节。一步步算:8 × 200 = 1600 磁道总数;1600 × 16 = 25600 扇区总数;25600 × 512 = 13107200 字节。这个数除以1024是12800KB,再除以1024是12.5MB。

这里有个单位换算的坑。计算机领域容量默认二进制,1MB = 1024KB,1KB = 1024B。而硬盘厂商标称容量时爱用十进制,1MB = 1000KB,所以你去买硬盘会发现标称1TB实际只有不到931GB可用,就是这个进制差异。但软考题目里,没特殊说明一律按二进制算,算出来12.5MB就写12.5MB,别自己画蛇添足去换算成十进制的13.1MB。

注意:如果题目给的是“非格式化容量”或者提到“位密度”“磁道密度”,说明考的是物理存储密度那一套,计算思路完全不同。大多数情况下看到“每扇区字节数、每磁道扇区数”这几个词,直接走格式化容量公式。

2. 磁盘访问时间公式,一个核心公式拆解所有角度

2.1 寻道、旋转、传输,三个时间分量的物理含义

磁盘读一个数据块要花的时间由三部分组成:寻道时间、旋转延迟、传输时间。寻道时间是把磁头从当前磁道移动到目标磁道所需的时间,这是机械运动,最能体现“慢”。旋转延迟是目标扇区转到磁头正下方需要等待的时间,因为磁头找到磁道后,扇区不一定就在磁头位置,必须等盘片旋转到正确角度。传输时间是数据从介质上读出并经过接口送出去的时间。

考试给出的数值通常是平均寻道时间,比如5ms或6ms,这是厂商测试的典型值。如果题目说“磁头从一个磁道移动到相邻磁道需要xx时间”,那就需要根据磁道距离自己算寻道时间,一般是移动磁道数乘以单道移动时间。这种变体偶尔出现,核心还是同一个公式:访问时间 = 寻道时间 + 旋转延迟 + 传输时间。

2.2 平均旋转延迟为什么是转一圈的一半

旋转延迟取决于磁盘转速,单位是rpm,也就是每分钟转多少转。求转一圈的时间很简单:60秒除以转速,再换成毫秒。比如7200rpm的硬盘,转一圈是60/7200秒,约8.33ms。但目标扇区不可能每次都恰好从磁头正下方开始等待,它可能在任意位置,平均下来就是要等半圈,所以平均旋转延迟 = 转动一圈时间 / 2,也就是约4.17ms。

这个“除以2”是容易丢分的地方,很多人算完一圈时间直接就拿来当旋转延迟用,结果访问时间凭空多了4ms多。做题时先看清题目给的是“平均旋转延迟”还是“转速”。给转速就必须先算一圈时间再除以2;如果题目直接把平均旋转延迟写出来,比如“平均旋转延迟为4.17ms”,那直接用,不要再除一次。

2.3 单扇区读取与连续大文件读取,算法完全不同

把三段时间加起来得到的是“一次离散读取”的平均访问时间。但要注意,如果读的是一个连续存放的大文件,情况完全不同。连续读意味着磁头找到起始位置后,后面的大块数据都在相邻扇区,不再需要重复寻道,也不需要再等一圈的平均延迟,只是按顺序往出读。

这时候总时间 = 第一次寻道时间 + 第一次平均旋转延迟 + 总数据量/传输速率。很多题目在这里设坑,比如“读取一个4KB的文件”和“读取一个1MB的连续文件”,计算方式不一样。前者用单次访问公式,后者用寻道加延迟加总传输时间的公式。理解物理过程自然就能判断:只有数据不连续、需要重新定位时,才把寻道和旋转延迟重复累加。

2.4 综合例题:7200转硬盘读4KB文件要多久

我们把完整计算走一遍。一台硬盘转速7200rpm,平均寻道时间6ms,数据传输速率40MB/s,读取一个4KB大小的连续文件,求平均访问时间。

第一步,旋转一圈时间:60/7200 = 0.008333秒 = 8.33ms。平均旋转延迟 = 8.33/2 = 4.17ms。

第二步,传输时间:4KB的数据量,注意单位要统一。40MB/s换算成KB/s就是40 × 1024 = 40960KB/s。4KB / 40960KB/s ≈ 0.000098秒 = 0.098ms。也可以先把4KB换算成字节:4×1024=4096字节,40MB/s=40×1048576字节/秒约41943040字节/秒,4096/41943040≈0.000098秒≈0.098ms。结果约0.1ms。

第三步,总访问时间 = 6ms + 4.17ms + 0.1ms = 10.27ms。如果题目选项给了近似值10.3ms,选那个。注意传输时间在单扇区读取时几乎可以忽略,这也是为什么磁盘性能瓶颈主要在寻道和旋转延迟上。

提示:算传输时间时,单位换算最好统一到字节或KB后再除,别直接用4÷40得出0.1,虽然这道题碰巧答案差不多,但数据量稍大误差就出来了。

3. 磁盘调度算法,寻道距离怎么算才能不丢分

3.1 FCFS与SSTF:公平与效率的取舍

当多个进程同时发出I/O请求时,磁盘要决定先服务哪个,这就是磁盘调度。先来先服务最简单,按请求到达顺序一个个处理,公平但效率不见得高,因为磁头可能在一堆磁道之间来回跑。最短寻道时间优先则每次都从当前磁头位置找距离最近的请求,能显著减少总寻道距离,但有个致命问题:新来的请求如果一直比远处的请求更近,远处请求就会一直等,产生“饥饿”。

软考里FCFS的计算最简单,按队列顺序累加相邻磁道号差的绝对值就行。SSTF的计算需要每次从当前磁头位置重新找最近的一个,这是一个动态过程,画个坐标轴会很清晰。做题时容易错的地方是只看第一轮找最近,后面几轮忘记用“上一次停留的位置”作为起点再找,而是继续用初始位置判断,这是最常见的错误。

3.2 SCAN与C-SCAN:电梯算法及其变形

SCAN也叫电梯算法,磁头先朝一个方向移动到端点,沿途服务所有经过的请求,到达端点后反向,再沿途服务。它避免了SSTF的饥饿问题,也兼顾了效率。考试里SCAN的难点在于方向判断:题目会明确“当前磁头正在向磁道号增大的方向移动”,这个信息非常关键,必须先确定当前移动方向上还有哪些请求没服务,先把这些请求处理完,再算反向路径。

C-SCAN是SCAN的改进版:磁头只管单向服务,到达端点后快速返回起点,返回途中不响应任何请求。这样做的好处是各位置请求的等待时间更均匀。计算C-SCAN时,回程距离也要计入总寻道距离,但因为回程不服务,不需要在回程中穿插其他请求。考试里这两种算法的选项经常只有一两处移动距离的差别,所以每一步都要核对方向。

3.3 完整调度计算:从100号磁道出发的四种算法对比

用一道标准题把四种算法都算一遍:当前磁头在100号磁道,正在向磁道号增大的方向移动,请求队列为23、67、14、202、180、38。求各算法的总移动距离。

FCFS,按顺序走:100→23,距离77;23→67,距离44;67→14,距离53;14→202,距离188;202→180,距离22;180→38,距离142。总移动距离 = 77+44+53+188+22+142 = 526。

SSTF,每步找最近。100附近有67和38,距离分别是33和62,选67;到了67,最近的变成了38,距离29;到了38,最近的是23,距离15;到了23,最近的是14,距离9;到了14,剩下的202和180里,180更近,距离166;最后到202,距离22。总移动距离 = 33+29+15+9+166+22 = 274。

SCAN:100向增大方向移动,先遇上180,再遇上202。到达202后,队列里大于202的没有请求,于是反向,从202往回,依次遇到180?不对,180已经服务过,所以回程按磁道号从大到小:202→67,距离135;67→38,距离29;38→23,距离15;23→14,距离9。总移动距离 = (180-100) + (202-180) + (202-67) + (67-38) + (38-23) + (23-14) = 80+22+135+29+15+9 = 290。

C-SCAN:100向增大方向,服务180、202,然后快速返回0号磁道附近,再从0号往大方向走。这里要说清楚:返回时走过的距离是202-0=202,回程不服务;然后从0按增大的方向依次服务14、23、38、67(14是队列里最小且大于0的)。总移动距离 = 80+22+202+14+23-0? 不对,严谨算:100→180是80,180→202是22,202→0是202,0→14是14,14→23是9,23→38是15,38→67是29。总 = 80+22+202+14+9+15+29 = 371。如果题目默认柱面范围最小是0,那就用0做回程起点;如果题目说最小值是某个其他数,按题目给的算。

这类题做完一定要检查方向,特别是C-SCAN的回程,很多人漏算或误算,导致总距离差一两百。

3.4 一张表记住四种调度算法的区别

算法核心策略饥饿问题总寻道距离考试典型陷阱
FCFS按请求到达顺序服务无通常最大容易算,但注意队列顺序别弄乱
SSTF每次选距离当前位置最近的请求有通常较小每次起点都会变,别拿初始位置判断全程
SCAN沿固定方向移动到底再反向,沿途服务无较小先判别方向,反向距离容易漏
C-SCAN只单向服务,回程直接快速返回无较大但均衡回程不服务,但回程距离要计入

这张表基本覆盖了上午选择题的所有考点。更细的对比比如响应时间方差、公平性,软考很少深究,但能说出“C-SCAN使等待时间更均衡”这种话,做案例分析题会加分。

4. RAID容量与可靠性计算,别只记级别名称

4.1 RAID 0、1、5、10,考得最多的四种模式

RAID的考试重点集中在容量利用率和容错能力上。RAID 0是条带化,数据分块写到多块盘上,容量 = 盘数 × 单盘容量,利用率100%,但没有任何冗余,任意一块盘坏了数据全丢。RAID 1是镜像,每块数据同时在两块盘上写一份,容量 = 总容量的一半,利用率50%,坏一块盘不影响使用。RAID 5是块级分布式校验,校验信息分散在所有盘上,n块盘里有1块专门用于校验的空间,可用容量 = (n-1) × 单盘容量,允许坏一块盘。RAID 10是先做镜像再条带化,本质是RAID 1和RAID 0的组合,可用容量也是总容量的一半。

考试计算RAID容量最常见的题是:4块1TB硬盘做RAID 5,可用容量是多少?答案就是3TB,公式拿4减1再乘1TB。换成RAID 10就是2TB。很多人在RAID 5上记不牢,老觉得4块盘做RAID 5能用2.5TB或2TB,其实只要想起来“有一块盘的容量用来存校验,校验分布到所有盘上”,就不会忘了。

4.2 可靠性模型:一块盘坏了到底会不会丢数据

可靠性计算也是软考的爱考方向,通常不会让你算复杂的指数公式,但会考概念和简单概率。假设单块盘的年度故障率为p,n块盘组成的阵列一年内不丢数据的概率怎么算?对于RAID 0,任何一块盘故障都会丢数据,所以不丢数据的概率是(1-p)的n次方。对于RAID 5或RAID 1,允许且只允许一块盘故障,所以不丢数据的概率 = 没有任何盘坏 + 恰好坏一块盘,计算式是(1-p)^n + n×p×(1-p)^(n-1)。

举个例子,p=5%,n=4,RAID 5一年内不丢数据的概率 = (0.95)^4 + 4×0.05×(0.95)^3。先算(0.95)^4约0.8145,再算4×0.05×0.8145约0.1629,两者相加约0.9774,也就是说失效率约2.26%。如果把4块盘都做成RAID 0,不丢数据概率就是0.8145,失效率约18.55%,对比相当明显。这个计算题在上午题里出现过,会套公式就够了。

4.3 RAID选型思路与考试表述习惯

虽然考试不考系统设计,但理解选型逻辑有助于记牢各种RAID。RAID 0追求性能和容量,适合临时数据、缓存这种丢得起的环境;RAID 1追求最高可靠性,适合系统盘、日志盘,代价是容量利用率只有50%;RAID 5是性能和容错平衡的默认选择,普遍用于文件存储和数据库;RAID 10容错性比RAID 5的差,通常用于对性能和可靠性要求都高的核心数据库。RAID 6允许同时坏两块盘,但写的校验计算开销更大,软考偶尔提,了解即可。

需要注意,RAID 10也不是随便做,它的构建方式是先镜像后条带,和RAID 01正好反过来。有些选择题会故意把RAID 10写成“先条带后镜像”来混淆,看到时要警惕。另外,做题时如果题目给的是“利用率”和“盘数”,直接根据规则换算容量就行,不用纠结有多少校验开销。

提示:RAID可靠性分析里,假设每块盘故障独立,故障率很小且互不影响。考试只要求会套概率公式,但如果做项目时,要考虑同一批次硬盘故障相关性,那实际风险会比公式算出来的高不少。

5. 高频易错点与冲刺复习建议,把碎片拼成体系

5.1 六个最容易丢分的细节

结合历年的复习经验,我总结了磁盘相关计算中高频出现的易错点。

第一,盘片数和盘面数混用。一个盘片两个面,算容量时盘面数要用盘片数乘以2。第二,单位进制混乱。容量和传输速率默认按二进制,时间换算转速时按分钟到秒的60进制,两者不能混。第三,平均旋转延迟忘了除以2。转速算出来的是一整圈时间,平均延迟一定是半圈。第四,SCAN/C-SCAN的方向判断。要先看当前移动方向,先服务前进路上的请求,再处理反向;反向是掉头,不是从队列重新开始。第五,SSTF的起点动态变化。每选完一个请求,当前位置就更新了,下一步要从新位置找最近请求。第六,RAID 10和RAID 01混淆,前者先镜像后条带,容错能力更强,注意审题看是先做镜像还是先做条带。

5.2 三分钟复习大纲,考前一晚看这个

离考试不远时,与其翻厚重的教材,不如用一张自问自答的清单复盘:

磁盘容量:格式化容量公式四因子是什么?盘片数和盘面数关系?二进制单位换算注意什么?

访问时间:三段时间怎么算?什么时候旋转延迟要除以2?连续读和离散读的算法差别在哪里?

调度算法:四种策略的执行顺序是什么?SCAN回程要不要服务?C-SCAN回程距离算不算?

RAID:各级别的容量利用率分别多少?RAID 5的可用容量公式?四盘RAID 5能容忍几块盘坏?RRID 10能不能容忍两块盘同时坏?

把这几个问题在心里过一遍,能说清楚,基本就不会丢基础分了。

5.3 冲刺阶段的刷题建议,用真题喂出题感

刷题方向我推荐优先做近五年的历年真题,磁盘计算在上午题里出现的频率很高,题型就那么几个:容量计算、访问时间计算、调度算法距离计算、RAID容量和可靠性。每类题至少做三到五道,做完不要只看对错,要复盘自己的计算路径:第一步有没有先把单位统一?平均延迟有没有除以2?SSTF的每一轮起点是不是都更新了?

另外一个实用的方法,是把每类题的物理过程画出来。比如调度算法的移动轨迹画在数轴上,旋转延迟画一个圆盘,RAID的条带分布画个小表格。视觉化的记忆比纯公式牢固得多,尤其临场考试的时候,画图还能帮自己理清思路、避免低级失误。

最后说点我自己的备考体会。磁盘相关计算的考点有限、套路明确,它在上午题里属于“只要认真复习就能拿全分”的部分,和网络、操作系统那些大而全的模块比,性价比很高。我建议你把它安排在考前两周集中突破,配合真题,每天花四十分钟专门过一类题,很快就能形成肌肉记忆。考场上如果遇到它,先别急,看清楚转速、磁道方向和柱面范围这几个关键参数再动笔,基本就能稳住。

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

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

立即咨询