首先說一下這三個演算法的思想吧
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...