磁盘结构
磁盘、磁道、扇区
- 盘面:一个磁盘有多个盘面
- 磁道:盘面上的圆形带状区域,一个盘面有多个磁道
- 扇区:磁道上的一个弧段,一个磁道可以有多个扇区,他是最小的物理单位,目前主要有512字节与4k大小;
- 磁头:与盘面非常接近,能够在盘面上的磁场转换成电信号(读),或者将电信号转换成盘面的磁信号(写);
- 制动手臂:用于磁道之间移动磁头
- 主轴:使整个盘面转动
磁盘的分类
磁盘根据磁头是否可以移动分为活动磁头和固定磁头。
根据盘片是否可以更换,分为固定磁盘和可换盘磁盘
磁盘调度算法
首先一次磁盘读或写操作需要多少时间?
寻道时间:在读写前,将磁头移动到指定磁道所花的时间。
其实启动磁头臂也是需要时间的,这里把它记为 s.
移动磁头时,每跨越一个磁道耗时m,总共假设跨越n个磁道。
所以寻道时间 T=m*n+s;
延迟时间:通过旋转磁盘,是磁头到达目标扇区所需要的时间。转速设为r.
所以平均所需的延迟时间 Tr=(1/2)*(1/r)=1/2r
传输时间:从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速是r,读写字节为b,每个磁道上的字节数是N,则:
Tt=(1/r)*(b/N)=b/(rN)
总的存取时间=寻道时间+延迟时间+传输时间,但是由于延迟时间和传输时间都与硬盘的转速有关,转速越大,时间越短,因此系统需要优化的是寻道时间,以下所讲的磁盘调度算法都是服务于寻道时间
先来先服务算法(FIFO)
按照磁道请求顺序调度。
优点:公平简单。
缺点:平均寻道时间可能较长。
最短寻道时间优先(SSTF)
优先调度与当前磁头所在磁道最近的磁道。
虽然平均寻道时间变短了,但是不够公平。如果新到达的磁道请求总是比在等待的磁道请求近,那么等待的那个请求就会饥饿。两端的磁道请求更容易出现饥饿现象。
电梯算法(SCAN)
电梯总是保持一个方向运行,直到该方向没有请求位置,然后改变运行方向。
电梯算法和电梯的运行过程类似,总是按照一个方向进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。
因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了SSTF算法的饥饿问题。
循环扫描算法(C-SCAN)
只有磁头朝某个方向移动时才会响应请求,移动到边缘后立即让磁头返回起点。返回途中不做任何处理。
LOOK算法和C-LOOK算法
SCAN算法的升级,只要磁头移动方向上不再有请求就立即改变磁头的方向。
C-SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即让磁头返回起点。
减少磁盘延迟时间的方法
回顾一下延迟时间:也就是磁头寻找目标删去所花的时间(磁头在扇区所属的磁道,通过磁盘转动寻找到目标扇区)
交替编号
做法:让编号相邻的扇区在物理上不相邻。
原理上:读取完一个扇区后,需要一段时间处理才可以继续读入下一个扇区。
错位命名
具体做法:让相邻盘面的扇区编号“错位”
原理:与交替编号相同。“错位命名法可以降低延迟时间”
磁盘地址结构(柱面号,盘面号,扇区号),为什么不是(盘面号,柱面号,扇区号)?
因为在读取地址连续的磁盘块时,前者更不需要移动磁头。
磁盘管理
磁盘初始化
- 进行低级格式化(物理格式化),将磁盘的各个磁道划分成扇区。一个扇区通常可分为头,数据区,尾三个部分组成。管理山区所需要的数据结构一般在头和尾中,包括扇区校验码等。
- 将磁盘分区,每个分区由若干个柱面组成(C盘,D盘等)
- 进行逻辑格式化,创建文件系统。包括创建根目录。初始化存储空间管理所用的数据结构。
引导块
计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(也叫自举程序)完成的。
ROM:被称为只读存储器,ROM中的数据在出厂时就写入了(集成在主板上),并且以后无法修改。
如果把初始化程序放在ROM中是无法进行修改的,因此只在ROM中存放很小的“自举装入程序”,而完整的自举程序放在引导块中,启动块位于磁盘固定位置。拥有启动分区的磁盘叫做系统盘或启动盘(Windows的C盘)
坏块管理
什么是坏块?
坏了、无法正常使用的扇区就是坏块。这属于硬件故障。操作系统无法修复,应该将他标记出来,以后不再使用它。
对于简单的磁盘,可以在逻辑格式化时对整个磁盘进行坏块检查。
对于复杂的磁盘,会维护一个坏块链表,在磁盘出厂前进行低级初始化时,就将坏块链初始化,也会保留一些备用扇区,用于替换坏块。这种方案称为扇区备用
。这种操作对系统来说是透明的。