磁盘物理结构和工作原理

1.机械磁盘

1.1 磁盘物理结构

  • 磁盘由 一个或多个盘片(Platter) 组成,每个盘片有 上下两个盘面(Surface)
  • 每个盘面被划分成许多 同心圆轨道 ,称为 磁道(Track)
  • 多个盘面上 相同半径的磁道 组成一个 柱面(Cylinder)
  • 每个磁道又被划分成多个 扇区(Sector),是磁盘读写的最小物理单位(通常为 512B 或 4KB)。
  • 柱面(Cylinder)所有盘片上相同编号的磁道构成一个柱面。


磁盘有正反两个盘面,一个磁道,每个每个盘面有多个同心圆,每个同心圆是同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。


1.2. 磁头与读写

  • 每个盘面对应一个 磁头(Head) ,所有磁头固定在同一个 磁头臂(Actuator Arm) 上同步移动。
  • 磁头臂的移动称为 寻道(Seeking),使磁头定位到目标磁道。
  • 磁盘在电机的带动下 高速旋转(例如 7200 RPM),使扇区经过磁头下方。

1.3. 磁盘访问时间

磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间和等待时间。公式为:存取时间=寻道时间+等待时间

注意:寻道时间是指磁头移动到磁道所需的时间;

等待时间为等待读写的扇区转到磁头下方所用的时间。

公式:

\\text{磁盘访问时间} = \\text{寻道时间} + \\text{旋转延迟} + \\text{传输时间}

有时也把 旋转延迟 + 传输时间 合称为 等待时间

更常见的分解如下:

① 寻道时间(Seek Time)

  • 磁头从当前磁道移动到目标磁道的时间。
  • 取决于磁头臂的移动速度与移动距离(跨越的磁道数)。
  • 平均寻道时间 为统计值(约几毫秒,机械硬盘通常在 3~15 ms)。
  • 扇区按顺序旋转

② 旋转延迟(Rotational Latency)

  • 磁头到达目标磁道后,等待目标扇区旋转到磁头正下方的时间。
  • 平均旋转延迟 = 磁盘旋转半圈所需的时间。
    例如:

    \\text{平均旋转延迟} = \\frac{1}{2} \\times \\frac{60}{\\text{RPM}} \\ \\text{秒}

    7200 RPM 时,平均旋转延迟 ≈ ( \frac{1}{2} \times \frac{60}{7200} = 4.17 \ \text{ms} )。

RPM = Revolutions Per Minute(转/分钟)

7200 RPM 表示 每分钟 7200 转

所以转速是 7200 转 / 60 秒

T_{\\text{转一圈}} = \\frac{60 \\ \\text{秒}}{ \\text{RPM} }

60 秒 是因为 RPM 是 每分钟的转数,我们要得到 每转多少秒,就要用 60 秒 除以 每分钟转数。

类比

想象你在操场上等一位跑步的朋友,他每 60 秒跑完一圈。你随机时间到达操场边:

  • 有时他刚好经过你(等待 0 秒)。
  • 有时他刚离开你(等待近 60 秒)。
  • 平均 你需要等他 30 秒(半圈时间)。

③ 传输时间(Transfer Time)

  • 从目标扇区开始,数据通过磁头读取并传送到磁盘控制器缓存的时间。
  • 取决于扇区大小、磁盘转速与磁道数据密度。

    \\text{传输时间} = \\frac{\\text{要传输的数据量}}{\\text{磁盘数据传输率}}


示例计算

假设:

  • 平均寻道时间 = 5 ms
  • 磁盘转速 = 7200 RPM → 平均旋转延迟 = 4.17 ms
  • 读取一个扇区(512B),磁盘内部传输速度 150 MB/s → 传输时间 ≈ 3.4 μs(远小于前两者)

总访问时间 ≈ 5 + 4.17 + 0.0034 ≈ 9.17 ms

可见主要开销是 寻道旋转延迟,因此磁盘调度算法(如 SSTF、SCAN)和扇区布局优化很重要。

这是一个很好的问题!平均旋转延迟等于磁盘旋转半圈所需的时间,这其实是一个统计学上的结论。我们来一步步解释:


1.4.磁盘调度算法

之前已经说过,磁盘数据的读取时间分为寻道时间+旋转时间,也即先找到对应

的磁道,而后再旋转到对应的扇区才能读取数据,其中寻道时间耗时最长,需

要重点调度,有如下调度算法:

  • 先来先服务FCFS:根据进程请求访问磁盘的先后顺序进行调度。
  • 最短寻道时间优先SSTF: 请求访问的磁道与当前磁道最近的进程优先调度,使得
  • 每次的寻道时间最短。会产生"饥饿"现象,即远处进程可能永远无法访问。
  • 扫描算法SCAN:又称"电梯算法",磁头在磁盘上双向移动,其会选择离磁头
    当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都
    是从里向外或者从外向里一直移动完才掉头,与电梯类似。
  • 单向扫描调度算法CSCAN: 与SCAN不同的是,其只做单向移动,即只能从里向
    外或者从外向里。

你总结得非常准确!磁盘调度算法的核心目标是最小化平均寻道时间,从而提升 I/O 性能。下面我将对你提到的几种经典磁盘调度算法进行系统梳理,并补充一些关键细节、优缺点对比以及适用场景,帮助你更深入理解。


磁盘调度的目标

  • 减少平均寻道时间(Seek Time):这是磁盘 I/O 延迟的主要来源。
  • 提高吞吐量:单位时间内完成更多 I/O 请求。
  • 避免"饥饿"(Starvation):确保所有请求最终都能被服务。
  • 公平性与实时性:在某些系统中需兼顾响应及时性。

常见磁盘调度算法详解

1.4.1. 先来先服务(FCFS, First-Come First-Served)

  • 原理:按请求到达的顺序依次处理。
  • 示例:当前磁头在 50 号磁道,请求序列为 [98, 183, 37, 122, 14] → 按此顺序移动。
  • 优点
    • 实现简单,公平(无饥饿)。
  • 缺点
    • 寻道路径可能来回跳跃,效率低。
    • 平均寻道时间长。
  • 适用场景:请求较少或对性能要求不高的系统。

1.4.2. 最短寻道时间优先(SSTF, Shortest Seek Time First)

  • 原理 :每次选择距离当前磁头位置最近的请求。
  • 示例:当前在 50,请求为 [45, 60, 10, 120] → 先服务 45(差5),再60(差15)......
  • 优点
    • 显著降低平均寻道时间,性能优于 FCFS。
  • 缺点
    • 可能导致饥饿:远处的请求若不断有新近请求插入,可能长期得不到服务。
    • 非公平调度。
  • 变种:可结合超时机制缓解饥饿。

⚠️ SSTF 是贪心算法,局部最优 ≠ 全局最优。


1.4.3. 扫描算法(SCAN,又称"电梯算法")

  • 原理
    • 磁头沿一个方向(如向外)移动,服务路径上所有请求;
    • 到达最外(或最内)磁道后,反向扫描
  • 特点
    • 移动方向固定,直到边界才掉头。
    • 请求按方向分组处理。
  • 优点
    • 避免 SSTF 的饥饿问题(所有请求最终都会被扫到);
    • 寻道效率高,适合负载较重的系统。
  • 缺点
    • 刚刚错过的请求需等待磁头走到尽头再返回,响应延迟可能较大
  • 示例
    • 当前磁头在 50,向外移动,请求 [40, 60, 10, 120]
    • 先服务 60 → 120(到边界),然后掉头服务 40 → 10。

1.4.4. 循环扫描算法(C-SCAN, Circular SCAN)

  • 原理
    • 磁头单向移动(如只从内向外);
    • 到达最外磁道后,立即跳回最内磁道(不服务返回路径上的请求),继续向外扫描。
  • 效果:形成一个"环形"服务队列。
  • 优点
    • 所有请求的等待时间更均匀
    • 更适合随机分布的请求
  • 缺点
    • 磁头跳回起点时存在空转(浪费时间),但现代硬盘可通过预测优化。
  • 与 SCAN 对比
    • C-SCAN 牺牲少量效率换取更好的公平性和可预测性

其他进阶调度算法(扩展了解)

1.4.5. LOOK 算法(SCAN 的优化版)

  • 不必移动到物理边界才掉头,而是在最远请求处就转向。
  • 减少无效移动,提升效率。
  • 同理有 C-LOOK(C-SCAN 的优化版)。

1.4.6. FSCAN(分队列 SCAN)

  • 将请求分为两个队列:
    • 一个用于当前扫描周期;
    • 新请求进入另一个队列,下一轮处理。
  • 防止新请求"插队"导致原队列延迟过大。

算法对比总结

算法 平均寻道时间 是否公平 是否饥饿 实现复杂度 适用场景
FCFS 简单系统、低负载
SSTF 轻负载、性能优先
SCAN 中~低 通用服务器、多任务系统
C-SCAN ✅✅ 随机访问、强调公平性
LOOK 低于 SCAN 中高 现代操作系统常用

✅ 表示"是"或"好",❌ 表示"否"或"差"。


实际应用

  • Linux 内核 早期使用 CFQ(Completely Fair Queuing) ,后来默认采用 DeadlineNOOP/MQ-DEADLINE(针对 SSD 优化)。
  • Windows 使用基于 SCAN/LOOK 的变种。
  • SSD 不需要磁盘调度(无机械部件),因此现代系统会自动禁用复杂调度算法。

2.固态硬盘

固态硬盘(SSD)

SSD无机械运动部件,依靠闪存芯片存储数据,结构更简洁,核心由核心电子组件构成,无逻辑存储区域的划分,具体如下:

  1. 核心电子组件

    组件 作用
    闪存芯片 存储数据的核心载体,通常采用NAND闪存,由大量存储单元组成,通过浮栅晶体管的电荷状态存储0/1信号,常见多芯片并联提升容量和读写速度。
    主控芯片 相当于SSD的"大脑",负责管理闪存芯片,包括数据的读写分配、磨损均衡(避免部分芯片过度使用)、错误校验等,直接影响SSD的读写速度和稳定性。
    缓存芯片 可选组件,多为DRAM芯片,用于临时缓存频繁读写的数据,减少对闪存芯片的直接访问,提升读写响应速度,部分入门级SSD会省略缓存以降低成本。
    接口电路 负责与主板接口(如SATA、M.2)适配,实现SSD与CPU、内存的数据传输。
  2. SSD结构示意图

    复制代码
    ┌─────────────────────────────────────┐
    │           接口电路(SATA/M.2)      │  ← 连接主板
    ├─────────────────────────────────────┤
    │           主控芯片                  │  ← 核心控制单元
    ├─────────────┬─────────────┬─────────┤
    │  缓存芯片   │  闪存芯片1  │ 闪存芯片2│
    ├─────────────┼─────────────┼─────────┤
    │             │  闪存芯片3  │ 闪存芯片4│
    │             └─────────────┴─────────┘
    └─────────────────────────────────────┘

补充说明

HDD的容量可通过公式计算:容量=磁头数×柱面数×每磁道扇区数×扇区大小;而SSD容量则由闪存芯片的单颗容量和芯片数量决定,其结构无机械磨损,读写速度通常远快于HDD,但闪存芯片有写入寿命限制。

相关推荐
列逍4 天前
Linux文件(二)
linux·磁盘·文件系统·挂载·软硬链接·缓冲区
another heaven5 天前
【软考 磁盘磁道访问时间】总容量等相关案例题型
linux·网络·算法·磁盘·磁道
边疆.12 天前
【Linux】文件系统
linux·运维·服务器·磁盘·文件系统·软硬链接
遇见火星16 天前
Linux下挂载磁盘相关命令
linux·运维·服务器·磁盘·lsblk·fdisk
问道飞鱼2 个月前
【Linux知识】Linux磁盘开机挂载
linux·运维·网络·磁盘·自动挂载
想睡hhh5 个月前
Linux文件——文件系统Ext2(1)_理解硬件
linux·服务器·磁盘
亚林瓜子6 个月前
设置AWS EC2默认使用加密磁盘
云计算·磁盘·aws·加密
Johnny Tong9 个月前
macOS 制作dmg磁盘映像安装包
macos·磁盘·安装包·dmg
zfj3211 年前
学技术学英语:elasticsearch硬件相关的配置&优化技巧
网络·elasticsearch·全文检索·内存·cpu·磁盘