一、一次磁盘读写所需要的的时间
以机械硬盘为例,一次磁盘读写所需要的的时间由三部分组成:寻道时间、延迟时间、传输时间。
- 寻道时间:磁头移动到数据所在磁道所需的时间。每个磁道耗时m,总共需要跨越的磁道数n,耗时为Ts = s + m*n.(s为机械臂启动时间)
- 延迟时间:旋转磁头定位到数据所在扇区的时间。设r为磁盘转速,则延迟平均时间为 (1/r)*(1/2)
- 传输时间:从磁盘读出或者写入磁盘所需的时间。设每个磁道上的字节数为N.则所花时间为(1/r)*(b/N)
二、磁盘调度算法
传输时间和延迟时间都与磁盘的转速有关,所以我们无法优化这两个值。不同的磁盘调度算法的寻道时间有很大差异,也就决定了各个磁盘调度算法的优劣。所以磁盘调度算法优化的是寻道时间。
主要有以下几种算法:
2.1 先来先服务(FCFS)
根据服务请求的先后顺序调度
2.2 最短寻找时间优先(SSTF)
优先处理与磁头接近位置的磁道,可以保证每次寻道时间最短,但整体不一定(类似贪心算法,只选择眼前最优解,不考虑整体)
2.3 扫描算法
SSTF算法存在饥饿现象。为了解决这个问题,规定磁头只有移动到最外侧磁道,才可以往内侧移动。这就是扫描算法,也叫电梯算法
2.4 LOOK算法
扫描算法需要到最边上才返回。LOOK算法是为了解决这个问题。如果磁头移动方向上已经没有别的磁道了,可以立即返回。(边移动,边观察)
2.5 循环扫描算法(C-SCAN)
SCAN算法对于磁道各个位置的响应不平均,C-SCAN规定只有磁头朝某个方向移动才处理请求。而返回时直接快速移动到起始端而不进行任何处理请求。
2.6 C-LOOK算法
解决循环扫描算法必须到边上才返回的问题。C-LOOK算法规定如果某个方向上没有要处理的磁道,立即返回另一端的第一个需要被访问的磁道。