一、一次磁盘读写所需要的的时间

以机械硬盘为例,一次磁盘读写所需要的的时间由三部分组成:寻道时间、延迟时间、传输时间。

  • 寻道时间:磁头移动到数据所在磁道所需的时间。每个磁道耗时m,总共需要跨越的磁道数n,耗时为Ts = s + m*n.(s为机械臂启动时间)
  • 延迟时间:旋转磁头定位到数据所在扇区的时间。设r为磁盘转速,则延迟平均时间为 (1/r)*(1/2)
  • 传输时间:从磁盘读出或者写入磁盘所需的时间。设每个磁道上的字节数为N.则所花时间为(1/r)*(b/N)

二、磁盘调度算法

传输时间和延迟时间都与磁盘的转速有关,所以我们无法优化这两个值。不同的磁盘调度算法的寻道时间有很大差异,也就决定了各个磁盘调度算法的优劣。所以磁盘调度算法优化的是寻道时间。

主要有以下几种算法:

2.1 先来先服务(FCFS)

根据服务请求的先后顺序调度

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_操作系统


2.2 最短寻找时间优先(SSTF)

优先处理与磁头接近位置的磁道,可以保证每次寻道时间最短,但整体不一定(类似贪心算法,只选择眼前最优解,不考虑整体)

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_磁道_02


2.3 扫描算法

SSTF算法存在饥饿现象。为了解决这个问题,规定磁头只有移动到最外侧磁道,才可以往内侧移动。这就是扫描算法,也叫电梯算法

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_操作系统磁盘调度算法程序代码Java_03


2.4 LOOK算法

扫描算法需要到最边上才返回。LOOK算法是为了解决这个问题。如果磁头移动方向上已经没有别的磁道了,可以立即返回。(边移动,边观察)

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_操作系统_04


2.5 循环扫描算法(C-SCAN)

SCAN算法对于磁道各个位置的响应不平均,C-SCAN规定只有磁头朝某个方向移动才处理请求。而返回时直接快速移动到起始端而不进行任何处理请求。

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_调度算法_05


2.6 C-LOOK算法

解决循环扫描算法必须到边上才返回的问题。C-LOOK算法规定如果某个方向上没有要处理的磁道,立即返回另一端的第一个需要被访问的磁道。

操作系统磁盘调度算法程序代码Java 操作系统 磁盘调度算法_磁道_06