磁碟排程演算法

2021-10-11 05:29:49 字數 1226 閱讀 6394

電梯演算法主要用於磁碟尋道的優化。

第一種是我們最為原始的先到先服務(first come first served)的演算法,這個對於我們去下館子撮一頓比較合適,先來就先吃,不然顧客有意見。不過對於磁碟尋道就不太合適了。如下圖:

注意這張圖並不是解釋的先到先服務演算法,我們只是借用下而已 :)

假設此時我們正在第11道讀取資料,然後陸陸續續有其他程序來要求我們提供磁碟內容給他們。這裡我們把要讀取的柱面(如果你並不是研究磁碟尋道,那麼這個詞你可以理解為資料塊,就是上面的小方塊)按照程序提出要求的順序記錄下來的是1, 36, 16, 34,9, 12,那麼嚴格按照先到先服務原則,我們下乙個要去的柱面是1號,中間要經歷10個柱面,然後是36號.......等全部讀下來,我們統計下,一共要"跑過"111個柱面。

很明顯的,這個演算法效率太低,我們要來改善下演算法。

第二種是最短尋道演算法(shortest seek first)

這種演算法有點類似貪心,即是每次我們選擇距離我們現在所處的點最近的乙個點(柱面)。如下圖,若當前我們正好執行完對於11號塊的讀取,下乙個最近的是12號塊,那麼我們讀取12號塊的資料,接著讀取16號塊......我們看到如果用這種演算法的話,我們經過的方塊號碼  12, 9, 16, 1, 34, 36 這樣我們總共的經歷的柱面數為61塊,這樣我們大大節省了尋道時間。

這個演算法本來已經很好了,不過我們不得不面臨這樣乙個問題:現在我們正在讀取16號塊,馬上要讀取1號塊了,這是乙個程序闖進來要求我們為他提供20號塊的資訊,20號距離16號比較近,那我們就去二十號吧,然後我們又接到通知要23號資料.....這樣一直做下去,呃,1號資訊呢?天曉得要等到什麼時候去讀取它內容!

所以這裡我們需要一種演算法來平衡效率和公平性(我們也不希望歧視了1號小方塊)。所以我們引進了電梯演算法。我們需要做乙個標記,標記現在是向數字大的方向讀,還是方向小的。如果現在是向前(數字大)讀,那麼我們就需要一直讀下去,一直到最尾乙個。同理向後讀。這個演算法如下圖所示:

磁碟排程演算法

磁碟排程在多道程式設計的計算機系統中,各個程序可能會不斷提出不同的對磁碟進行讀 寫操作的請求。由於有時候這些程序的傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列,常用的磁碟排程演算法有以下四種 先來先服務演算法 fcfs 最短尋道時間優先演算法 sstf 掃瞄演算法 ...

磁碟排程演算法

一次磁碟讀寫操作的時間由尋找 尋道 時間 延遲時間和傳輸時間決定 1 尋找時間ts 活動頭磁碟在讀寫資訊前,將磁頭移動到指定磁軌所需要的時間。這個時間除跨越n條磁軌的時間外,還包括啟動磁臂的時間s,即 ts m n s。式中,m是與磁碟驅動器速度有關的常數,約為0.2ms,磁臂的啟動時間約為2ms。...

磁碟排程演算法

一次磁碟讀寫操作的時間由尋找 尋道 時間 延遲時間和傳輸時間決定。1 尋找時間ts 活動頭磁碟在讀寫資訊前,將磁頭移動到指定磁軌所需的時間。這個時間除跨越 n 條磁軌的時間外,還包括啟動磁臂的時間 s 即 ts m n s 備註 m 是與磁碟驅動器速度有關的常數,約為 0.2ms 磁臂的啟動時間約為...