常用的磁盤調度算法有四種:
- 先來先服務算法(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
此處移動總距離存在疑問