1. 程式人生 > >常見的磁碟排程演算法

常見的磁碟排程演算法

早期的磁碟排程演算法

先來先服務

顧名思義,先來先服務就是按照請求訪問磁軌的順序來訪問磁軌。

我們來看一個例項
在這裡插入圖片描述

從 100 開始,按照請求的順序,依次訪問 55,58 … 等磁軌。
移動距離是上一個磁軌到下一個磁軌的距離。

  1. 優點:公平,避免飢餓現象發生
  2. 缺點:尋道時間長

最短尋道時間優先(SSTF)

SSTF 的原理是訪問的下一個磁軌是距離現在這個磁軌最近的那一個磁軌。

在這裡插入圖片描述

可以看到 90 這個磁軌是距離 100 這個磁軌距離最近的磁軌,所以先訪問。
而 58 這個磁軌是距離 90 這個磁軌距離最近的,所以是接下來訪問。

  1. 優點:比先來先演算法效能更好

  2. 缺點:容易造成飢餓現象

    為什麼會造成飢餓現象
    

因為磁軌的請求時動態的,隨時都會有新的磁軌請求加入,如果,一段時間內,所請求的磁軌數都是在當前磁軌數附近,那麼早期請求但是距離當前磁軌遠的磁軌將長時間得不到滿足,造成飢餓現象。

基於掃描的磁碟排程演算法

掃描演算法(電梯排程演算法)

我們看到 SSTF 演算法雖然效能好,但是容易造成飢餓現象,本質上就是磁頭一直處在當前
磁軌的小範圍內。所以掃描演算法就是用來解決這個問題的。

掃描演算法的解決方式是,讓磁頭按照一定方向一直移動(先選擇距離當前磁軌最近的方向
,從裡到外,在從外到裡)

在這裡插入圖片描述

迴圈掃描演算法

掃描演算法也同樣存在問題,那就是,如果我按照向外的方向,剛走過假設是 100 的磁軌,
此時新請求是 99 磁軌,但是因為需要繼續向外,所以不能訪問 99 磁軌,這就造成了一定
的開銷。

而迴圈掃描演算法就是按照下一個最近的磁軌方向(如,向外掃描,到最外層後,重新從內
向外掃描)

在這裡插入圖片描述