OS-磁盘管理

磁盘
一个磁盘面被多个同心圆划分,每个同心圆成为磁道,每个磁道又被划分成多个小扇形,一个扇形被称为一个扇区。多个磁盘在垂直方向上堆叠,因此不同磁盘上直径相同的同心圆组成了竖直方向上的柱面。要确定一块数据存储的位置,需要知道柱面号、盘面号、扇区号三个维度的信息
磁盘调度算法
磁盘访问时间
访问时间 = 寻道时间 + 旋转时间 + 传输时间
- 寻道时间
寻道时间又两部分组成:与移动磁道数量
- 旋转延迟时间
这部分时间指要定位的扇区旋转至磁头所在位置需要的时间。设磁盘转速为
这个公式本来的样子应该是:
是磁头旋转到指定扇区的平均时间,因此
- 传输时间
与字节数相关、旋转速度相关:
其中
在三种时间内,寻道时间是主要矛盾
磁盘调度算法
磁盘调度算法主要被用来减少三项时间中的寻道时间
- 先来先服务算法(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.