1. 程式人生 > >磁碟排程演算法尋道問題

磁碟排程演算法尋道問題

常用的磁碟排程演算法有四種:

  • 先來先服務演算法(FCFS)
  • 最短尋道時間優先演算法(SSTF)
  • 掃描演算法(SCAN)
  • 迴圈掃描演算法(CSCAN)

先來先服務演算法(First Come First Service)

FCFS演算法根據程序請求訪問磁碟的先後順序進行排程,是一種最簡單的排程演算法。
例1:某一磁碟請求序列(磁軌號):98、 183、 37、122、14、124、 65、 61,按照先來先服務FCFS磁碟排程對磁碟進行請求服務,假設當前磁頭在53道上,則磁臂總移動道數為多少?

先來先服務,按程序請求訪問磁碟的先後次序進行排程。
當前磁軌:53

下一個磁軌 移動磁軌數
98 45
183 85
37 146
122 85
14 108
124 110
65 59
61 4

總移動道數=45+85+146+85+108+110+59+4=642

最短尋道時間優先磁碟排程演算法(SSTF)Shortest Seek Time First

演算法選擇這樣的程序,其要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短,該演算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對使用者的服務請求的響應機會不是均等的,因而導致響應時間的變化幅度很大。在服務請求很多的情況下,對內外邊緣磁軌的請求將會無限期的被延遲,有些請求的響應時間將不可預期。

例2:若干個等待訪問磁碟者依次要訪問的磁軌為 19, 43, 40, 4, 79,11,76,當前磁頭位於 40 號柱面,若用最短尋道時間優先磁碟排程演算法,則訪問序列為_

根據最短尋道時間優先磁碟排程演算法,每次在尋找下一個磁軌時,都要選擇離自己最近的,所以當前磁頭位於40號,下一道選擇與40絕對值最小的,即40,再下一道選擇43,差值為3,以此類推,最後的訪問序列應該為,40,43,19,11,4,76,79.

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

優先考慮磁頭的當前移動方向,並且考慮當前磁軌與下一磁軌之間的距離。例如,當磁頭正在自裡向外移動時,掃描演算法所選擇的下一個訪問物件應該是,即在當前磁軌之外,又距離最近。這樣自裡向外的訪問,直到再無更外的磁軌需要訪問才將磁臂換向,自外向裡移動。移動原則同前一致。下面貼出這一段的來源

淺談磁碟排程演算法
由於這種演算法中磁頭移動的規律與電梯的執行相似,因此又稱為電梯排程演算法。

迴圈掃描演算法(CSCAN)

迴圈掃描演算法是對掃描演算法的改進。如果對磁軌的訪問請求是均勻分佈的,當磁頭到達磁碟的一端,並反向運動時落在磁頭之後的訪問請求相對較少。這是由於這些磁軌剛被處理,而磁碟另一端的請求密度相當高,且這些訪問請求等待的時間較長,為了解決這種情況,迴圈掃描演算法規定磁頭單向移動。例如,只自裡向外移動,當磁頭移到最外的被訪問磁軌時,磁頭立即返回到最裡的欲訪磁軌,即將最小磁軌號緊接著最大磁軌號構成迴圈,進行掃描。

前兩道題目為牛客網上的練習題,之前應該是某家網際網路公司網申的筆試題目,下面一道例題將用四種不同磁碟排程演算法來解答。

例題

假設移動頭磁碟有200個磁軌(從0號到199號)。目前正在處理143號磁軌上的請求,而剛剛處理結束的請求是125號,如果下面給出的順序是按FIFO排成的等待服務佇列順序:86,147,91,177,94,150,102,175,130
那麼,用下列各種磁碟排程演算法來滿足這些請求所需的總磁頭移動量是多少?
(1) FCFS;(2) SSTF;(3) SCAN;(4) LOOK;(5) C-SCAN?

FCFS(先來先服務)

當前磁軌 下一磁軌 移動距離
143 86 57
86 147 61
147 91 56
91 177 86
177 94 83
94 150 56
150 102 48
102 175 73
175 130 45
總距離 579

SSTF(最短尋道時間優先)

尋道順序:當前143,147,150,130,102,94,91,86,175,177;
4+3+20+28+8+3+5+89+2=162;

SCAN(電梯排程演算法)

當前方向:從143向磁軌號增加的方向
依次訪問:147,150,175,177
反方向:130,102,94,91,86
4+3+25+2+47+28+8+3+5=125

CSCAN

當前方向:從143向磁軌號增加的方向
依次訪問:147,150,175,177
再從0開始增加方向:86,91,94,102,130
此處移動總距離存在疑問