磁盘调度算法寻道问题
常用的磁盤調度算法有四種:
- 先來先服務算法(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
此處移動總距離存在疑問
總結
以上是生活随笔為你收集整理的磁盘调度算法寻道问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP核心概念-慢启动,ssthresh
- 下一篇: 1.使用sizeof计算类的大小