磁盘的结构

磁盘是由表面涂有磁性物质的盘片构成的存储设备。

image-20260524120034600

磁盘 磁道 扇区

每个盘面分成一个个磁道,每个磁道分成一个个扇区。

每个扇区存放的数据量相同。因此内侧的扇区数据密度大。

image-20260524120229665

盘面 柱面

磁盘不止一个盘面的。会有多个盘面。(甚至每个面还可能是双面的)

所有磁头都是连接在同一个磁臂。

柱面:所有盘面中相对位置相同的磁道组成柱面

磁盘的物理地址

(柱面号,盘面号,扇区号)

image-20260524121226223

如何在磁盘中读写数据

  • 根据柱面号移动磁臂。让磁头指向指定柱面(即磁道)。
  • 激活指定盘面对应的磁头
  • 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样子就完成了对指定扇区的读写

磁盘的分类

活动头磁盘:磁头可以在不同磁道间移动的。

固定头磁盘:每一个磁道都有一个磁头。(磁头也就不需要移动了)

image-20260524121443021

可换盘磁盘:盘片可以更换

固定盘磁盘:…

回顾

image-20260524121526609

磁盘调度算法

image-20260524122102767

一次磁盘读写操作需要的时间

==①寻道时间==:磁头移动寻找磁道的时间

  • 启动磁头臂s
  • 移动磁头跨越n条磁道,跨越一条m
  • 总寻道时间 Ts = s+n*m

==②延迟时间==:旋转磁盘,使磁头定位到目标扇区所需要的时间

  • 磁盘转速r(转/秒,/分)(转一圈时间就是1/r)
  • 延迟时间(平均,即半圈就能找到)Tr = (1/2)*(1/r) = 1/(2r)

==③传输时间==:向磁盘读写数据的时间

  • 磁盘转速r,读写字节数b,每个磁可存的字节数N
  • 传输时间 Tt = (1/r)*(b/N) = b/(rN)

平均总时间 Ta = Ts + 1/(2r) + b/(rN)

  • r,N,b都是固定的。所以能优化的只有①寻道时间。

磁盘调度算法

①FCFS

根据进程请求访问磁盘的先后顺序进行调度。

优点:公平。

缺点:当大量进程,或者访问的磁道分散,性能很差。

image-20260524123731315

②最短寻找时间优先(SSTF)

选择眼前最优(磁道与当前磁道最近的),但不一定是总体最优。

优点:性能好,平均寻道时间短。

缺点:可能有“饥饿”现象。

image-20260524123939816

③扫描算法(SCAN)

SSTF产生饥饿的原因是:磁头有可能在一个小区域内来回移动。SCAN解决了这个问题

只有磁头移动到最外侧磁道的时候才能往内移动。

只有磁头移动到最内侧磁道的时候才能往外移动。

(也叫电梯算法)

优点:性能好且没有“饥饿”

==缺点==:①只有到达边边的磁道才能改变方向。②算法对于各个位置磁道的响应频率不均匀,边上的相应时间短。

image-20260524124428056

④LOOK调度算法

解决了SCAN的缺点①

如果在磁道移动方向没有别的请求了,就可以立即改变磁头移动方向了。

(边移动边观察,叫LOOK哈哈哈)

优点:平均寻道时间又短了点。

image-20260524125009195

⑤循环扫描算法(C-SCAN)

解决了SCAN的缺点②

只有磁头朝某个特定方向移动时才处理磁道请求,

返回时直接快速移动至 起始端 而不处理任何请求。

优点:对于各个位置磁道的响应频率很平均,不会有偏爱。

缺点:①只有到达最边上的磁道才能改变磁头移动方向。②返回不用去起始端,去起始的第一个位置就行。③寻道时间比SCAN长。

image-20260524125400251

⑥C-LOOK算法

解决了C-SCAN的缺点

如果磁头移动方向上已经没有磁道访问请求了,立即让磁头返回。

并且磁头只需要返回到有磁道访问请求的位置就行了。

image-20260524125827025

回顾

image-20260524125949765

其他算法:

NstepSCAN:

将磁盘请求队列划分为若干长度为N的子队列。调度器按FCFS原则依次处理各子队列。

在处理每个子队列内部时,采用SCAN算法进行扫描。

在处理每个子队列时,若有新请求到达,则系统将其放入尚未处理的其他子队列中,不插入当前的子队列。

FSCAN:

NstepSCAN的简化,队列划分为两个子队列:当前任务队列和新请求队列。

减少延迟时间的方法

读取连续逻辑扇区,所需要的延迟时间会比较大。

一般来说,连续存放的下一块存放在:同一个柱面,同一个通道,的下一个扇区中。

因为扇区数据的读写消耗时间,盘片继续旋转,需等到下一圈才能读取物理相邻的扇区。

image-20260524130339066

解决方法①:交替编号

让逻辑上相邻的扇区有一定的物理间隔。

可以使连续读取逻辑扇区所需要的延迟时间更小。

磁盘地址结构的设计

磁盘的物理地址(柱面号,盘面号,扇区号)

为什么不是:(盘面号,柱面号,扇区号)

原因:在取地址连续的磁盘块时,(柱面号,盘面号,扇区号)不需要移动磁头。(相邻的柱面号相同,盘面号不同,转动磁盘就行了)

image-20260524131242116

image-20260524131100784

解决方法②:错位命名

若相邻的盘面相对位置相同处扇区编号相同:

image-20260524131654728

若错位命名:

image-20260524131837139

磁盘的管理

image-20260524132257429

==磁盘初始化==

低级 / 物理格式化:将空白磁盘的各个磁道划分磁道,扇区。并将扇区号、磁道号等写入每个扇区的头部和尾部。

逻辑分区:将磁盘分区(C盘D盘)。每个分区由若干个柱面组成。每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中。

高级 / 逻辑格式化:在分区上建立文件系统。其中存储的数据结构包括:空闲和已分配的空间,以及一个初始为空的目录。

image-20260524132625372

引导块/启动块/启动分区

计算机启动时需要运行初始化程序(自举程序)来完成初始化并加载OS。【初始化CPU,寄存器,内存等等】

ROM中存放很小的自举转入程序。完整的自举程序存放在初始块/引导块中。

ROM中的代码指示磁盘控制器,将引导块读入内存并执行。

引导块可以从指定位置加载操作系统内核并启动。

image-20260524133001214

坏块的管理

属于硬件故障,系统无法修复。

坏块对操作系统是透明的。

所以应该标记出来,避免OS错误使用到。

简单的磁盘:逻辑格式化时将其标记出来。

复杂的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区。

image-20260524133252611

回顾

image-20260524133305313

固态硬盘SSD

image-20260524133639489

**==静态==**磨损均衡:

  • 空闲期间自动迁移:

    • 将低磨损块中:长期未更新的“冷数据”放到高磨损块。

      将高磨损块中:有效数据迁移到低磨损块中。

  • 使得高磨损块以只读为主,低磨损块以写为主。

  • 静态方法比动态方法优秀!

性能对比:

  • 连续读写 – 机械硬盘!(寻道方便)

  • 随机读写 – 固态硬盘!

机械硬盘对比固态硬盘

  • 闪存芯片替代了机械驱动器。

  • 闪存翻译层替代了磁盘控制器。

image-20260524133658966

SSD的结构

系统对SSD的读写是以==“页”==为单位的。

系统对SSD的擦除是以==“块”==为单位的。

SSD的一个页,相当于磁盘的一个扇区

image-20260524134130985

Other

提高磁盘IO速度的方法:

  • 改进文件的目录结构和检索目录的方法
  • 选取好的文件存储结构
  • 提高磁盘IO速度:采用磁盘高速缓存。调整磁盘io请求顺序。延迟写。优化物理块分布等等。

光盘能随机读写!

磁盘上的文件以块为单位进行读写?

旋转延迟的大小与 文件的结构有关:

  • 连续分配的磁盘中,文件的物理地址连续。
  • 链接分配的磁盘中,文件的物理地址不连续。

when簇+随机寻道: 读写一个通道的时间,包括寻道时间+读写磁道时间。即T+r

  • 簇:一个磁道所有扇区归一,即以一个磁道为基本单位而不是扇区。