OS-磁盘管理

OWPETER Lv3

磁盘

一个磁盘面被多个同心圆划分,每个同心圆成为磁道,每个磁道又被划分成多个小扇形,一个扇形被称为一个扇区。多个磁盘在垂直方向上堆叠,因此不同磁盘上直径相同的同心圆组成了竖直方向上的柱面。要确定一块数据存储的位置,需要知道柱面号、盘面号、扇区号三个维度的信息

磁盘调度算法

磁盘访问时间

访问时间 = 寻道时间 + 旋转时间 + 传输时间

  • 寻道时间

寻道时间又两部分组成:与移动磁道数量 正相关的磁头移动时间 ,以及磁头启动时间 。磁头启动时间由由物理惯性、控制延迟和信号处理等因素共同导致。因此总的来说,寻道时间为:

  • 旋转延迟时间

这部分时间指要定位的扇区旋转至磁头所在位置需要的时间。设磁盘转速为 ,那么这部分时间为:

这个公式本来的样子应该是:

是磁头旋转到指定扇区的平均时间,因此 物理意义为rps,即“转/秒”。如果题目给定是rpm,需要除60转为rps

  • 传输时间

与字节数相关、旋转速度相关:

其中 代表单一磁道的容量, 代表待传输的数据总量,因此该式分母可理解为传输速率,该式整体理解为传输总量/传输速率

在三种时间内,寻道时间是主要矛盾

磁盘调度算法

磁盘调度算法主要被用来减少三项时间中的寻道时间

  • 先来先服务算法(FCFS)

根据进程请求访问磁盘的顺序进行调度,是最简单的调度算法

最公平

  • 最短寻道时间算法(STFF)

改善了平均磁盘服务时间,但可能导致较远的请求饿死

  • 扫描算法(SCAN)

“到头了才改变方向”,一定程度上解决了公平性问题,避免了饥饿现象,但不是完全公平的:由于到两边反弹的特性,中间的磁道比两侧的磁道更容易被访问到,因此两边和中间的磁道的地位是不对等的

  • 循环扫描算法(CSCAN)

磁头永远不改变移动方向,当移动到头之后直接回到起始位置。

  • LOOK算法

如果前方没有请求了,那么立即折返

减少延迟时间方法

除了可以减少寻道时间,我们也可以去减少旋转延迟时间

  • 由于磁头在读入一块扇区的内容后,需要一定的时间才能开始下一次读入,因此如果逻辑上相邻的数据被存储在相邻的物理扇区中,可能反倒使旋转延迟时间大大加长。解决方案是对物理扇区交替编号,使得逻辑连续的内容在物理上有一定间隔。在同一盘面上如此,同理,我们可以将不同盘面上的物理扇区也进行错位编号,举例来说即0号盘面上的0号扇区和1号盘面上的1号扇区位于同一垂直方向…

RAID

奇偶校验:把所有需要校验的位全部异或起来

  • RAID0:条带化,将数据分割成块并均匀分布存储在两个或更多的磁盘上,这种方法能够显著提高读写速度,因为所有磁盘可以并行的进行读写;但是它没有任何冗余,如果这多块磁盘中的任意一块坏了,整个条带的数据就都丢失了
  • RAID1:镜像,即数据完全复制到两块或多块磁盘中。提供了冗余,一块磁盘损坏,另一块镜像磁盘上的数据仍然完好,从而提高了安全性。但存储效率仅有RAID0的50%
  • RAID1+0:先对数据进行镜像,然后进行条带化。这样整个磁盘阵列中如果坏一块磁盘,对系统没有影响,坏两块时,如果两块磁盘正好为相互镜像的这一组磁盘,那么意味着条带损坏了,造成数据丢失,否则依然没有影响
  • RAID0+1:先条带后镜像,即镜像出两个条带。如果坏一块磁盘,那么损失一个条带,但还有一个条带可以使用;坏两块,如果两块磁盘恰好不属于同一条带,那么两条条带都损坏了,数据丢失,否则依然没事
  • RAID2:按位条带化,使用海明码进行校验
  • RAID3:只存校验位
  • RAID4:采用数据块交叉,且仅使用一个校验盘,即将所有数据块的校验码存储在一个磁盘内,共需要块盘
  • RAID5:每个条带上有一个奇偶校验块,这些校验块分散存储在不同的磁盘上,共需要块盘
  • RAID6:双维校验独立存取盘阵列。在RAID5基础上额外增加一块盘,即需要块盘

固态磁盘 SSD

SSD通过一个“闪存翻译层”将来自CPU的对于逻辑地址的读写请求转换为对于物理地址的请求,这个翻译层承担了传统磁盘中的“磁盘控制器”的角色

一个SSD由多个物理块组成,每个物理块由多个页组成,数据是以页为单位进行读写的,但数据擦除是以块为单位进行的,且只有当该页所属的块被擦除后才能进行新的写操作。当某个块进行若干次擦除后就会损坏,而一旦一个块损坏了,整个SSD就无法使用了。

为了弥补SSD的寿命缺陷,我们引入磨损均衡技术,以求让各个块的使用寿命相对均衡

  • Title: OS-磁盘管理
  • Author: OWPETER
  • Created at : 2025-05-21 20:38:36
  • Updated at : 2025-05-22 20:13:10
  • Link: https://owpeter.github.io/2025/05/21/OS-磁盘管理/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments