磁盘
- 一个磁盘包括多个盘片,每个盘片包含两个面,每个面都有一个磁头,用来将磁信号转换成电信号(读)或将电信号转换成磁信号(写)
- 每个盘面包括多个磁道,每个磁道划分成多个扇区,扇区是最小的存储单位
- 磁盘使用主轴进行旋转,使用磁臂进行寻道
磁盘容量
$$
容量 = 盘面数 × 每个盘面的磁道数 × 每个磁道的扇区数 × 扇区大小
$$
磁盘读取时间
当需要从磁盘读取数据时,操作系统将逻辑地址传给磁盘,磁盘的控制电路将逻辑地址翻译成物理地址
寻道时间:磁臂移动,寻找合适磁道;寻道时间最长
旋转时间:主轴转动盘面,寻找合适扇区;每分钟能几千甚至上万转
数据传输时间
磁盘调度算法
磁盘调度算法的目的是使平均寻道时间最短
先来先服务
按照磁盘请求顺序进行调度
优点:简单公平
没有考虑磁道的距离,导致平均寻道时间过长
最短寻道时间优先
优先调度与当前磁头最近的磁道
平均寻道时间短
不公平,两端的磁道容易出现饥饿现象
电梯算法
电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向
- 解决了两端磁道的饥饿现象
磁盘读写
操作系统将数据存储到磁盘,按照柱面、磁头、扇区的方式进行。从外到内,从上到下
柱面编号由外到内依次递增,磁头编号从上到下依次递增。首先将数据存储在第一盘面的第一磁道的所有扇区中,然后是同一柱面的下一个磁头。一个柱面的所有磁道存储满之后推进到下一个柱面
磁盘预读
局部性原理
当一个数据被用到时,其附近的数据也通常会马上被使用
预读
为了减少 IO 操作,磁盘往往不是按需读取,而是每次都会预读。预读过程中磁盘会进行顺序读取,顺序读取不需要磁盘并且只需要很短的旋转时间,所以预读可以提高 IO 效率,速度非常快。预读的长度一般为页的整倍数
磁盘碎片
磁盘是连续存储的。增加数据时,需要将增加的数据存储到磁盘的别处;删除数据时,就会产生小碎片