OS-磁盘管理

磁盘结构

mvLptYo3l4igbHK.png

  • 盘片 (Platter):
    • 就像叠在一起的 CD 光盘。
    • 每个盘片有两个面 (Surface),都可以存数据。
    • 盘片围绕主轴高速旋转(常见的转速有 5400 RPM, 7200 RPM, 15000 RPM)。
  • 磁头 (Head):
    • 每个盘面对应一个磁头,负责读写数据
    • 关键点: 磁头是悬浮在盘面上的,不直接接触。
  • 磁臂 (Disk Arm):
    • 控制磁头移动的机械臂
    • 所有盘面的磁头是固定在一个“梳子状”的组件上的,它们共进退。 这意味着:你不能让磁头 1 读内圈,同时让磁头 2 读外圈。它们必须停在同一个半径上

FwVLyrdYzXCJlQs.png

  • **磁道 (Track)
    • 盘面被划分成无数个同心圆,每一个圆环叫一个磁道
    • 编号从外向内(0号磁道在最外圈)
    • 密度差异: 外圈周长长,存的数据多;内圈周长短,存的数据少(但在老式磁盘中,为了简化控制,所有磁道的扇区数是一样的;现代磁盘采用“多带记录”技术,外圈扇区更多)。
  • 扇区(Sector)
    • 每个磁道被切分成若干个小段,叫扇区
    • 这是磁盘读写的物理最小单位。(操作系统读取数据时,哪怕你只想要 1 个字节,硬盘也必须把整个扇区(512B)读出来交给你)
    • 如果每一圈磁道的扇区数量是固定的,内圈数据密度大,外圈数据密度小。
  • 柱面 (Cylinder)
    • 所有盘面上,半径相同的磁道,在这个垂直空间上组成了一个圆筒,叫柱面

磁盘块寻址

  • 要定位一个数据块,操作系统需要给硬盘发三个坐标参数,称为 CHS
  • Cylinder (柱面号): 决定磁臂要把磁头挪到多远的半径(寻道,最慢)。
  • Head (磁头号/盘面号): 决定激活哪一个磁头(电子切换,极快)。
  • Sector (扇区号): 决定等待哪个扇区转到磁头底下(旋转延迟,中等)。
  • 磁盘总容量 = 柱面数 × 盘面数 × 每道扇区数 × 扇区大小

一次磁盘读写时间

IVucDTmGPQdil7S.png

  • 寻道时间 \(T_s\)将磁头移动到对应的磁道所需时间。启动磁头臂时间\(s\),跨越磁道数\(n\) ,平均跨越速度\(m\)\(T_s = s + n\times m\)
  • 延迟时间 \(T_R\):通过旋转磁盘,将磁头定位到目标扇区所需时间。磁盘转速为\(r\)\(\frac{1}{r}\)是转一圈的时间,找到目标扇区的平均需要装半圈,\(T_R=\frac{1}{2r}\)
  • 传输时间 \(T_t\)从磁盘读写数据要经历的时间。磁盘转速为\(r\),此次读写字节数为\(b\),每个磁道上字节数为\(N\)\(T_t = \frac{b}{rN}\)
  • 延迟时间和传输时间都与磁盘转速有关,是硬件的固有属性,操作系统无法优化。
  • 操作系统根据磁盘调度算法优化寻道时间

磁盘调度算法

先来先服务FCFS

4rsd29FUc1gCa5H.png

  • 核心思想:根据进程请求访问磁盘的先后顺序进行调度。
  • 缺点:如果大量进程竞争使用磁盘,请求磁道很分散,则性能很低,寻道时间长。
  • 优点:实现简单。

最短寻找时间优先SSTF

eEJFhndUTD8HuvQ.png

  • 核心思想:优先处理与当前磁头最近的磁道,类似贪心思想。
  • 优点:性能较好,平均寻道时间短
  • 缺点:可能产生饥饿现象(一直处理请求密集区,而不处理距离远的磁道,磁头在一个小区域内来回移动)。

扫描算法SCAN

  • 核心思想:只有磁头移动到最外侧磁道时才能往内移动,移动到最内侧磁道时才能往外移动,也叫电梯算法。
  • 优点:性能好,不产生饥饿现象
  • 缺点:只有到达最边上的磁道才能改变磁头移动方向。对各个位置的磁道响应频率不平均。

zBh5sdM3yaZEL9x.png

LOOK调度

  • 思想:在SCAN算法基础上改进,如果磁头在移动方向上没有别的请求,就立即改变磁头移动方向。

循环扫描算法CSCAN

PciKmDWfC2L1IM4.png

  • 思想:只有磁头朝某个方向移动时才处理访问请求,返回时快速移动到起始端,不处理任何请求。
  • 优点:解决了SCAN对各个位置的磁道响应频率不平均的问题。
  • 缺点:只有到达最边上的磁道才能改变磁头移动方向。

CLOOK算法

  • 思想:在CSCAN算法的基础上,如果磁头在移动方向上没有别的请求,就立即让磁头返回,返回到最靠边缘的有磁道访问请求的位置即可

旋转调度

  • 旋转调度的目标为:同一个柱面上的各个IO请求
  • 关注那些不同磁道的相同扇区号上的访问请求
    QSsty39CTg6Zpnz.png

减少延迟时间

  • 如果逻辑相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,延迟时间可能会很长。因为磁头读入一个扇区后需要一小段时间处理,会错过要读入的下一个连续的扇区。
  • 使用交替编号的策略让编号相邻的扇区物理上不相邻,可以使得读取连续逻辑扇区的延迟时间更小。
  • 使用错位命名的策略与交替编号类似:让相邻盘面的扇区编号错位,可降低延迟时间
posted @ 2026-01-10 16:58  NightRainLone  阅读(5)  评论(0)    收藏  举报