一、磁碟排程主要思想
裝置的動態分配演算法與程序排程相似,也是基於一定的分配策略的。常用的分配策略有先請求先分配、優先順序高者先分配等策略。在多道程式系統中,低效率通常是由於磁碟類旋轉裝置使用不當造成的。作業系統中,對磁碟的訪問要求來自多方面,常常需要排隊。這時,對眾多的訪問要求按一定的次序響應,會直接影響磁碟的工作效率,進而影響系統的效能。訪問磁碟的時間因子由3部分構成,它們是查詢(查詢磁軌)時間、等待(旋轉等待扇區)時間和資料傳輸時間,其中查詢時間是決定因素。因此,磁碟排程演算法先考慮優化查詢策略,需要時再優化旋轉等待策略。
平均尋道長度(l)為所有磁軌所需移動距離之和除以總的所需訪問的磁軌數(n),即:
l=(m1+m2+……+mi+……+mn)/n 其中mi為所需訪問的磁軌號所需移動的磁軌數。
啟動磁碟執行輸入輸出操作時,要把移動臂移動到指定的柱面,再等待指定扇區的旋轉到磁頭位置下,然後讓指定的磁頭進行讀寫,完成資訊傳送。因此,執行一次輸入輸出所花的時間有:
·尋找時間——磁頭在移動臂帶動下移動到指定柱面所花的時間。
·延遲時間——指定扇區旋轉到磁頭下所需的時間。
·傳送時間——由磁頭程序讀寫完成資訊傳送的時間。
其中傳送資訊所花的時間,是在硬體設計就固定的。而尋找時間和延遲時間是與資訊在磁碟上的位置有關。
為了減少移動臂進行移動花費的時間,每個檔案的資訊不是按盤面上的磁軌順序存放滿乙個盤面後,再放到下乙個盤面上。而是按柱面存放,同一柱面上的各磁軌被放滿資訊後,再放到下乙個柱面上。所以各磁碟的編號按柱面順序(從0號柱面開始),每個柱面按磁軌順序,每個磁軌又按扇區順序進行排序。
二、演算法描述
1.先來先服務演算法(first come first served,fcfs)
先來先服務(fcfs)排程:按先來後到次序服務,未作優化。
最簡單的移臂排程演算法是「先來先服務」排程演算法,這個演算法實際上不考慮訪問者要求訪問的物理位置,而只是考慮訪問者提出訪問請求的先後次序。例如,如果現在讀寫磁頭正在50號柱面上執行輸出操作,而等待訪問者依次要訪問的柱面為130、199、32、159、15、148、61、99,那麼,當50號柱面上的操作結束後,移動臂將按請求的先後次序先移到130號柱面,最後到達99號柱面。
採用先來先服務演算法決定等待訪問者執行輸入輸出操作的次序時,移動臂來回地移動。先來先服務演算法花費的尋找時間較長,所以執行輸入輸出操作的總時間也很長。
2.最短尋道時間優先演算法(shortest seek time first,sstf)
最短尋找時間優先排程演算法總是從等待訪問者中挑選尋找時間最短的那個請求先執行的,而不管訪問者到來的先後次序。現在仍利用同乙個例子來討論,現在當50 號柱面的操作結束後,應該先處理61號柱面的請求,然後到達32號柱面執行操作,隨後處理15號柱面請求,後繼操作的次序應該是99、130、148、 159、199。
採用最短尋找時間優先演算法決定等待訪問者執行操作的次序時,讀寫磁頭總共移動了200多個柱面的距離,與先來先服務、演算法比較,大幅度地減少了尋找時間,因而縮短了為各訪問者請求服務的平均時間,也就提高了系統效率。
但最短查詢時間優先(sstf)排程,fcfs會引起讀寫頭在盤面上的大範圍移動,sstf查詢距離磁頭最短(也就是查詢時間最短)的請求作為下一次服務的物件。sstf查詢模式有高度區域性化的傾向,會推遲一些請求的服務,甚至引起無限拖延(又稱飢餓)。
3.掃瞄演算法(scan)
scan 演算法又稱電梯排程演算法。scan演算法是磁頭前進方向上的最短查詢時間優先演算法,它排除了磁頭在盤面區域性位置上的往復移動,scan演算法在很大程度上消除了sstf演算法的不公平性,但仍有利於對中間磁軌的請求。
「電梯排程」演算法是從移動臂當前位置開始沿著臂的移動方向去選擇離當前移動臂最近的那個柱訪問者,如果沿臂的移動方向無請求訪問時,就改變臂的移動方向再選擇。這好比乘電梯,如果電梯已向上運動到4層時,依次有3位乘客陳生、伍生、張生在等候乘電梯。他們的要求是:陳生在2層等待去10層;伍生在5層等待去底層;張生在8層等待15層。由於電梯目前運動方向是向上,所以電梯的形成是先把乘客張生從8層帶到15層,然後電梯換成下行方向,把乘客伍生從5層帶到底層,電梯最後再調換方向,把乘客陳生從2層送到10層。
我們仍用前述的同一例子來討論採用「電梯排程」演算法的情況。由於磁碟移動臂的初始方向有兩個,而該演算法是與移動臂方向有關,所以分成兩種情況來討論。
〈1〉.移動臂由里向外移動
開始時在50號柱面執行操作的讀寫磁頭的移動臂方向是由裡向外,趨向32號柱面的位置,因此,當訪問50號柱面的操作結束後,沿臂移動方向最近的柱面是 32號柱面。所以應先為32號柱面的訪問者服務,然後是為15號柱面的訪問者服務。之後,由於在向外移方向已無訪問等待者,故改變移動臂的方向,由外向裡依次為各訪問者服務。在這種情況下為等待訪問者服務的次序是61、99、130、148、159、199。
〈2〉.移動臂由外向裡移動
開始時,正在50號柱面執行操作的讀寫磁頭的移動臂是由外向裡(即向柱面號增大的內圈方向)趨向61號柱面的位置,因此,當訪問50號柱面的操作結束後,沿臂移動方向最近的柱面是61號柱面。所以,應先為61號柱面服務,然後按移動臂由外向裡移動的方向,依次為99、130、148、159、199柱面的訪問者服務。當201號柱面的操作結束後,向里移動的方向已經無訪問等待者,所以改變移動臂的前進方向,由里向外依次為32、15柱面的訪問者服務。
「電梯排程」與「最短尋找時間優先」都是要儘量減少移動臂時所花的時間。所不同的是:「最短尋找時間優先」不考慮臂的移動方向,總是選擇離當前讀寫磁頭最近的那個柱面,這種選擇可能導致移動臂來回改變移動方向;「電梯排程」是沿著臂的移動方向去選擇離當前讀寫詞頭最近的哪個柱面的訪問者,僅當沿移動臂的前進移動方向無訪問等待者時,才改變移動臂的前進方向。由於移動臂改變方向是機械動作,速度相對較慢,所以,電梯排程演算法是一種簡單、使用且高效的排程演算法。
但是,「電梯排程」演算法在實現時,不僅要記住讀寫磁頭的當前位置,還必須記住移動臂的當前前進方向。
4.迴圈掃瞄演算法(cscan)
單項掃瞄排程演算法的基本思想是,不考慮訪問者等待的先後次序,總是從0號柱面開始向裡道掃瞄,按照各自所要訪問的柱面位置的次序去選擇訪問者。在移動臂到達最後乙個柱面後,立即快速返回到0號柱面,返回時不為任何的訪問者等待服務。在返回到0號柱面後,再次進行掃瞄。
由於該例中已假定讀寫的當前位置在50號柱面,所以,指示了從50號柱面繼續向里掃瞄,依次為61、99、130、148、159、199各柱面的訪問者服務,此時移動臂已經是最內的柱面,於是立即返回到0號柱面,重新掃瞄,依次為15、32號柱面的訪問者服務。
除了「先來先服務」排程演算法外,其餘三種排程演算法都是根據欲訪問的柱面位置來繼續排程的。在排程過程中可能有新的請求訪問者加入。在這些新的請求訪問者加入時,如果讀寫已經超過了它們所要訪問的柱面位置,則只能在以後的排程中被選擇執行。
在多道程式設計系統中,在等待訪問磁碟的若干訪問者請求中,可能要求訪問的柱面號相同,但在同一柱面上的不同磁軌,或訪問同一柱面中同一磁軌上的不同扇區。所以,在進行移動排程時,在按照某種短法把移動臂定位到某個柱面後,應該在等待訪問這個柱面的各個訪問者的輸入輸出操作都完成之後,再改變移動臂的位置。
作業系統排程演算法
include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...
作業系統排程演算法
在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...
作業系統 排程演算法
fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...