http://blog.chinaunix.net/uid-25132162-id-361291.html
一、常見的批處理作業調度算法
1.先來先服務調度算法(FCFS):就是按照各個作業進入系統的自然次序來調度作業。這種調度算法的優點是實現簡單,公平。其缺點是沒有考慮到系統中各種資源的綜合使用情況,往往使短作業的用戶不滿意,因為短作業等待處理的時間可能比實際運行時間長得多。
2.短作業優先調度算法(SPF): 就是優先調度並處理短作業,所謂短是指作業的運行時間短。而在作業未投入運行時,並不能知道它實際的運行時間的長短,因此需要用戶在提交作業時同時提交作業運行時間的估計值。
3.最高響應比優先算法(HRN):FCFS可能造成短作業用戶不滿,SPF可能使得長作業用戶不滿,於是提出HRN,選擇響應比最高的作業運行。響應比=1+作業等待時間/作業處理時間。
4. 基於優先數調度算法(HPF):每一個作業規定一個表示該作業優先級別的整數,當需要將新的作業由輸入井調入內存處理時,優先選擇優先數最高的作業。
5.均衡調度算法,即多級隊列調度算法
基本概念:
作業周轉時間(Ti)=完成時間(Tei)-提交時間(Tsi)
作業平均周轉時間(T)=周轉時間/作業個數
作業帶權周轉時間(Wi)=周轉時間/運行時間
響應比=(等待時間+運行時間)/運行時間
二、進程調度算法
1.先進先出算法(FIFO):按照進程進入就緒隊列的先后次序來選擇。即每當進入進程調度,總是把就緒隊列的隊首進程投入運行。
2. 時間片輪轉算法(RR):分時系統的一種調度算法。輪轉的基本思想是,將CPU的處理時間划分成一個個的時間片,就緒隊列中的進程輪流運行一個時間片。當時間片結束時,就強迫進程讓出CPU,該進程進入就緒隊列,等待下一次調度,同時,進程調度又去選擇就緒隊列中的一個進程,分配給它一個時間片,以投入運行。
3. 最高優先級算法(HPF):進程調度每次將處理機分配給具有最高優先級的就緒進程。最高優先級算法可與不同的CPU方式結合形成可搶占式最高優先級算法和不可搶占式最高優先級算法。
4. 多級隊列反饋法:幾種調度算法的結合形式多級隊列方式。
三、空閑分區分配算法
1. 首先適應算法:當接到內存申請時,查找分區說明表,找到第一個滿足申請長度的空閑區,將其分割並分配。此算法簡單,可以快速做出分配決定。
2. 最佳適應算法:當接到內存申請時,查找分區說明表,找到第一個能滿足申請長度的最小空閑區,將其進行分割並分配。此算法最節約空間,因為它盡量不分割到大的空閑區,其缺點是可能會形成很多很小的空閑分區,稱為“碎片”。
3. 最壞適應算法:當接到內存申請時,查找分區說明表,找到能滿足申請要求的最大的空閑區。該算法的優點是避免形成碎片,而缺點是分割了大的空閑區后,在遇到較大的程序申請內存時,無法滿足的可能性較大。
四、虛擬頁式存儲管理中的頁面置換算法
1.理想頁面置換算法(OPT):這是一種理想的算法,在實際中不可能實現。該算法的思想是:發生缺頁時,選擇以后永不使用或在最長時間內不再被訪問的內存頁面予以淘汰。
2.先進先出頁面置換算法(FIFO):選擇最先進入內存的頁面予以淘汰。
3. 最近最久未使用算法(LRU):選擇在最近一段時間內最久沒有使用過的頁,把它淘汰。
4.最少使用算法(LFU):選擇到當前時間為止被訪問次數最少的頁轉換。
五、磁盤調度
1.先來先服務(FCFS):是按請求訪問者的先后次序啟動磁盤驅動器,而不考慮它們要訪問的物理位置
2.最短尋道時間優先(SSTF):讓離當前磁道最近的請求訪問者啟動磁盤驅動器,即是讓查找時間最短的那個作業先執行,而不考慮請求訪問者到來的先后次序,這樣就克服了先來先服務調度算法中磁臂移動過大的問題
3.掃描算法(SCAN)或電梯調度算法:總是從磁臂當前位置開始,沿磁臂的移動方向去選擇離當前磁臂最近的那個柱面的訪問者。如果沿磁臂的方向無請求訪問時,就改變磁臂的移動方向。在這種調度方法下磁臂的移動類似於電梯的調度,所以它也稱為電梯調度算法。
4.循環掃描算法(CSCAN):循環掃描調度算法是在掃描算法的基礎上改進的。磁臂改為單項移動,由外向里。當前位置開始沿磁臂的移動方向去選擇離當前磁臂最近的哪個柱面的訪問者。如果沿磁臂的方向無請求訪問時,再回到最外,訪問柱面號最小的作業請求。
例題1:
計算
1.有三個作業:
作 業 |
到達時間 |
所需CPU時間 |
1 |
0.0 |
8 |
2 |
0.4 |
4 |
3 |
1.0 |
1 |
分別采用先來先服務和短作業優先作業調度算法。試問它們的平均周轉時間各是什么?你是否還可以給出一種更好的調度算法,使其平均周轉時間優於這兩種調度算法?
解:(1)采用先來先服務作業調度算法時的實施過程如下。
作 業 |
到達時間 |
所需CPU時間 |
開始時間 |
完成時間 |
周轉時間 |
1 |
0.0 |
8 |
0.0 |
8.0 |
8.0 |
2 |
0.4 |
4 |
8.0 |
12.0 |
11.6 |
3 |
1.0 |
1 |
12.0 |
13.0 |
12.0 |
這時,作業的調度順序是1→2→3。其平均周轉時間為:
(8 + 11.6 + 12)/ 3 = 10.53
(2)采用短作業優先作業調度算法時的實施過程如下。
作 業 |
到達時間 |
所需CPU時間 |
開始時間 |
完成時間 |
周轉時間 |
1 |
0.0 |
8 |
0.0 |
8.0 |
8.0 |
3 |
1.0 |
1 |
8.0 |
9.0 |
8.0 |
2 |
0.4 |
4 |
9.0 |
13.0 |
12.6 |
這里要注意,在作業1運行完畢進行作業調度時,作業2和3都已經到達。由於是實行短作業優先作業調度算法,因此先調度作業3運行,最后調度作業2運行。所以,這時的作業調度順序是1→3→2。其平均周轉時間為:
(8 + 8 + 12.6)/ 3 = 9.53
(3)還可以有更好的作業調度算法,使其平均周轉時間優於這兩種調度算法。例如,如果知道在作業1后面會來兩個短作業,那么作業1到達后,先不投入運行。而是等所有作業到齊后,再按照短作業優先作業調度算法進行調度,具體實施過程如下。
作 業 |
到達時間 |
所需CPU時間 |
開始時間 |
完成時間 |
周轉時間 |
3 |
1.0 |
1 |
1.0 |
2.0 |
1.0 |
2 |
0.4 |
4 |
2.0 |
6.0 |
5.6 |
1 |
0.0 |
8 |
6.0 |
14.0 |
14.0 |
這時的作業調度順序是3→2→1。其平均周轉時間為:
(1 + 5.6 + 14)/ 3 = 6.87
例題2、
(1)最佳置換算法(OPT) :選擇以后永不使用或在最長時間內不再被訪問的內存頁面予以淘汰。(2)先進先出置換算法(FIFO):選擇最先進入內存的頁面予以淘汰。 (3)最近最久未使用算法(LRU):選擇在最近一段時間內最久沒有使用過的頁,把它淘汰。 (4)最少使用算法(LFU):選擇到當前時間為止被訪問次數最少的頁轉換。
【例4-8】在一個請求分頁存儲管理的系統中,一個程序的頁面走向為6,0,1,2,0,3,0,4,2,3,分別采用最佳置換算法、先進先出置換算法、最近最久未使用算法,完成下列要求。設分配給該程序的存儲塊數M=3,每調進一個新頁就發生一次缺頁中斷。
時刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
訪問順序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f |
|
|
|
|
|
|
|
|
|
|
OPT
時刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
訪問順序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
|
0 |
0 |
0 |
0 |
0 |
0 |
4 |
4 |
4 |
|
|
|
1 |
1 |
1 |
3 |
3 |
3 |
3 |
3 |
|
f |
1 |
2 |
3 |
4 |
|
5 |
|
6 |
|
|
FIFO
時刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
訪問順序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
4 |
4 |
4 |
|
0 |
0 |
0 |
0 |
3 |
3 |
3 |
2 |
2 |
|
|
|
1 |
1 |
1 |
1 |
0 |
0 |
0 |
3 |
|
f |
1 |
2 |
3 |
4 |
|
5 |
6 |
7 |
8 |
9 |
LRU
時刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
訪問順序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
|
|
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
|
0 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
|
6 |
6 |
6 |
0 |
1 |
2 |
2 |
3 |
0 |
4 |
|
f |
1 |
2 |
3 |
4 |
|
5 |
|
6 |
7 |
8 |