写在前面

  本系列的文章是博主边学边记录的,可能不是特别的正确,因为会加上博主自己的理解,仅供参考。

正文:

  1.磁盘的访问时间

    为了读或者写,磁头必须能移动到所指定的磁道上,并等待所指定的扇区的开始位置旋转到磁头下,然后开始读取或者写入数据。那么可以把对磁盘的访问时间分为以下三个部分:

    1.寻道时间

    磁头移动到要操作的磁道的时间

    2.旋转延迟时间

    指定扇区移动到磁头下面所经历的时间。

    3.传输时间

    读取或者写入数据的时间。

  补充下,磁盘上有很多磁道,将磁道在逻辑上分为若干个扇区。读取数据的时候,逻辑上去扇区读取数据。

 

2. 磁盘调度算法

   由于在访问磁盘的时间中主要是寻道时间,因此,磁盘调度的目标是使次磁盘的平均寻道时间最少。下面介绍一些磁盘调度算法:

  1.先来先服务【FCFS】

    顾名思义,这种算法根据请求访问磁盘的先后次序进行调度。

    优点:

     1.公平、简单。

     2.每个进程的请求都能依次地得到处理,不会出现某一进程地请求长期得不到满足地情况。

 

    缺点:

    平均寻道时间可能较长。

 

    适用场景:

    请求磁盘IO地进程数目较少的场合。

 

  2.最短寻道时间优先 【SSTF】

    SSTF:要求访问的磁道与当前磁头所在的磁道距离最近,以使得每次的寻道时间最短。同样该算法不能保证平均寻道时间最短。

    缺点

      因为是针对距离磁头最近的磁道方式移动,可能会造成距离较远的磁道一直得不到访问,造成饥饿现象

    补充:

      饥饿现象:系统不能保证某个进程的等待时间上限,从而使得该进程长时间等待,当等待时间给进程推进和响应带来明显的影响的时候,称为发生了饥饿现象。当饥饿到一定程序的进程所赋予的任务即使完成也不再具有实际意义时,称为该进程被饿死。

    看下书上的图

    

操作系统磁盘空间的管理java 操作系统磁盘算法_平均寻道时间

 

 

 根据图能够看到,当从100号磁道开始的时候,首先选择距离其最近的磁道去访问,也就是90号磁道,这个时候,移动距离为10.这样执行完所有进程,可以算出平均寻道长度。

 

3.扫描算法 【SCAN】

 

  SCAN算法关注的是磁头当前移动的方向。一般是按照磁道递增的次序去访问。首先是以当前磁头处于的磁道为中心,先向地址递增的方向去访问,访问完毕后,再由内到外访问递减的方向。

  

操作系统磁盘空间的管理java 操作系统磁盘算法_平均寻道时间_02

 

 

 看图,大家应给能够更好的理解该扫描算法。这种算法保证了每个请求都能访问的到,从而避免了饥饿现象。

 

4.循环扫描算法 【CSCAN】

 该算法也是关注磁头的移动方向,和SCAN不同的是,它是单向移动的。所以称为循环扫描算法。那么为什么是单向移动呢?

 使用SCAN算法的时候,在执行过程中,恰好又有一个进程请求访问磁道。这个时候进程必须等待,等待磁头改变方向的时候才能继续访问。这样造成了较大的延迟。(因为SCAN方向是双向的,当扫描完一头,突然在这头又来个请求,只能等待另外一头扫描后,才能回到插入  的这头,继续执行

 

  而使用CSCAN解决了这个问题。下面看一下图:

  

操作系统磁盘空间的管理java 操作系统磁盘算法_平均寻道时间_03

 

 

 可以看到,该算法是循环寻道的~