先到先服務 短作業 時間片輪轉演算法

2021-10-01 03:10:15 字數 2369 閱讀 5352

首先說一下這三個演算法的思想吧

fcfs是最簡單的排程演算法,既可以用於作業排程 ,也可以用於程式排程,當作業排程中採用該演算法時,系統將按照作業到達的先後次序來進行排程,優先從後備佇列中,選擇乙個或多個位於佇列頭部的作業,把他們調入記憶體,分配所需資源、建立程序,然後放入「就緒佇列」,直到該程序執行到完成或發生某事件堵塞後,程序排程程式才將處理機分配給其他程序。

sjf演算法是以作業的長短來計算優先順序,作業越短,其優先順序越高。sjf演算法可以分別用於作業排程和程序排程。在把短作業優先排程演算法用於作業排程時,它將從外存的作業後備佇列中選擇若干個估計執行時間最短的作業,優先將它們調入記憶體執行。

rr首先將所有就緒的佇列按fcfs策略排成乙個就緒佇列,然後系統設定一定的時間片,每次給隊首作業分配時間片。如果此作業執行結束,即使時間片沒用完,立刻從佇列中去除此作業,並給下乙個作業分配新的時間片;如果作業時間片用完沒有執行結束,則將此作業重新加入就緒佇列尾部等待排程。

首先把這幾個演算法思想理解清楚了再來寫**實現就比較容易了

fcfs用了乙個排序,對到達的時間進行排序接下來乙個乙個實行就行了。

sjf我在這裡對服務時間進行了排序,但是要執行此作業的時候要要判斷一下這個作業的是否已經到達

rr實現起來比較麻煩,需要乙個佇列來幫助完成,每次執行前要判斷這個作業的服務時間是否大於時間片的時間,如果大於那就執行乙個時間片後將它pop出佇列再push進佇列,如果小於或等於那就只執行它剩餘服務時間的大小後將它pop出去,不再入隊。我們可以用乙個標誌來判斷每乙個作業是否已經被執行完。

#include#include#include#include using namespace std;

struct process

;void sortarrtime(process * p, int n) //到達時間排序

} }}void ssortsertime(process * p, int n) //服務時間排序

} }}void sjf(process *p, int n) //短作業演算法

} time++; }}

void fcfs(process *p, int n) //先到先服務演算法

else

}}void rr(process *p, int n, int m) //時間片輪轉演算法

; for (int i = 0; i < n; i++)

queuequ; //定義乙個佇列,放要執行的作業

double time = 0.0;

while (qu.empty())

else

}for (int i = 1; i < n; i++) }

while (!qu.empty())

}qu.push(tmp);

}else

}m--;}}

}} }

}void rrturn(process * p, int n)

}void finprint(process *p, int n) //列印的最後計算的作業完成時間。。。。

cout << "程序名" << " " << "到達時間" << " " << "服務時間" << " " << "完成時間" << " " << "周轉時間" << " " << "帶權周轉時間" << endl;

for (int i = 0; i < n; i++)

printf("周轉時間的平均值是 :%f \n", (sumturntime / n));

printf("帶權周轉時間的平均值是 :%f \n", (sumturntime / n));

}int main()

int num;

cout << "1:先到先服務 2:短作業 3:時間片輪轉 " << endl;

cout << "請輸入要進行的演算法選擇->";

cin >> num;

switch (num)

finprint(p, n);

system("pause");

return 0;

}

看一下最後的結果

這個是fcfs的 

這個是sjf的 

這個是rr 當q = 2時 

這個時rr 當q = 1時 

作業排程演算法 先到先服務(FCFS)

關於先到先服務演算法,我這裡只陳述幾個要點 1.為什麼縮寫是fcfs?first come first served,先到先服務。2.fcfs演算法中優先順序的評定標準?優先順序根據等待時間來確定,等待時間越長,優先順序越高,越優先執行。3.為什麼說等待時間越長fcfs演算法排程作業的優先順序越高?...

時間片輪轉演算法

include include include include include include includeusing namespace std 初始化程序池 初始化就緒佇列 rr演算法 struct pcb pcb string name,int atime,int rtime,char st...

時間片輪轉演算法實現

include include define null 0 typedef struct quen 定義結構 char pname 8 int time1 int time2 char state struct quen next quen main 主程式 quen q,p,head,m char...