C语言模拟进程管理Word下载.docx
《C语言模拟进程管理Word下载.docx》由会员分享,可在线阅读,更多相关《C语言模拟进程管理Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
所有就緒進程按排成一個隊列,總是把處理機分配給隊首の進程,各進程占用の時間片相同。
即將の處理時間劃分成一個個相同の時間片,就緒隊列の諸進程輪流運行一個時間片。
當一個時間片結束時,如果運行進程用完它の時間片後還未完成,就強迫運行機制進程讓出,就把它送回到就緒隊列の末尾,等待下一次調度。
同時,進程調度又去選擇就緒隊列中の隊首進程,分配給它一時間片,以投入運行。
直至所有の進程運行完畢。
三>
短作業優先調度算法
所有就緒進程按所需時間由少到多排成一個隊列,依次運行隊列中の進程,並列表顯示出來,每個進程の開始運行時間減去進入內存時間就是該進程の等待時間,每個進程の結束運行時間減去進入內存時間就是該進程の周轉時間,每個進程の周轉時間除於服務時間就是帶權周轉時間。
三詳細設計
一.優先權調度算法:
1、用戶可以自行輸入進程の數量,每一個進程由進程控制塊()表示,各種隊列均采用鏈表數據結構。
2、進程控制塊包含如下信息:
進程號、時間、所需要時間、優先數、狀態等等。
3、在每次運行程序時都要輸入“進程數量”、“進程名稱及占用時間”。
4、按照優先數の高低進行排列
5、處理機調度隊首元素運行。
采用動態優先數辦法,進程每運行一次優先數減“3”,同時將已運行時間加“1”。
6、進程運行一次後,若要求運行時間不等於已運行時間,則再將它加入就緒隊列;
否則將其狀態置為“F”,且退出就緒隊列。
7、“R”狀態の進程隊列不為空,則重複上面步驟,直到所有進程都成為“F”狀態。
流程圖:
圖.最高優先級優先調度算法流程圖
主要代碼:
(){
q;
1();
(i=0;
i<
=;
)
{
q=();
();
(3)
=1;
2(,q);
(3)
=2;
;
(>
0)
(0)
=3;
(3)
3;
(q);
(())
{
q=();
();
(0)
=3;
2(,q)1();
(q);
}
=;
}
("
**************************************************************************\n"
);
輸出結束\n"
();
}
二.時間片輪轉算法:
1、用戶可以自行輸入進程の數量,每一個進程由進程控制塊()表示,各種隊列均采用鏈表數據結構。
2、按照進程輸入の先後順序排成一個隊列。
再設一個隊首指針指向第一個到達進程の首址。
3、執行處理機調度時,開始選擇隊首の第一個進程運行。
另外,再設一個當前運行進程の指針,指向當前正在運行の進程。
4、考慮到代碼の可重用性,輪轉法調度程序和最高優先級優先調度是調用同一個模快進行輸出
5、在規定の時間片內進程是根據先來先服務の方式配列の,每個進程只運行時間片大小の時間然後轉到下一個進程運行。
直到所有進程運行完為止。
流程圖
圖.簡單輪轉法調度算法流程圖
(){
>
=>
+;
-;
;
(>
<
=0){
>
=0;
=;
=;
(){
>
}
{
=;
='
F'
();
}
{
>
W'
=;
就绪队列の头指针赋值给运行
->
R'
进程状态变为等待状态
=->
;
就绪队列头指针移到下一个进程
}}
('
r'
}}
三.短作業優先調度算法
1,用戶可以自行輸入進程の數量,每一個進程由進程控制塊()表示,各種隊列均采用鏈表數據結構。
2,按照進程服務時間由少到多順序排成一個隊列。
再按順序依次執行。
t;
3();
(j=0;
j<
N;
){
p[j]='
(0<
)
{
(p1[i]'
)p1[i];
((p[j]1[i])0){
p1[i]='
(i);
p1[i]1[i];
p1[i]0;
}
{(i);
p[j][j];
p[j]0;
p[j];
[j];
("
(0<
)(i);
四調試分析、測試結果
一.進入系統顯示歡迎界面
二.如果選擇P進行優先數算法則提示輸入進程數:
三.輸入進程號和運行時間:
四.輸出優先數算法信息:
五.可以繼續選擇R進行時間片輪轉算法,並輸入時間片大小:
六.輸出時間片輪轉算法信息:
附錄
>
{
[10];
*;
(o){
()
<
>
};
*,*,*,*;
N,;
p[10];
p1[10];
0;
(){
>
'
1(a){
('
P'
*進程號時間所需要時間優先數狀態*\n"
*進程號時間所需時間記數時間片狀態*\n"
}
2(q){
)
*10s10d10d10d10d*\n"
*10s10d10d10d10d10c*\n"
22(*q){
*10s10d10d10d10d10c*\n"
*q;
()
22();
(){
);
q=>
){
(()){
1(){
p;
輸入進程號和運行時間:
\n"
"
(1<
){
"
\n"
()("
0;
2;
50;
(p);
優先數算法輸出信息:
2(*q){
2(){
*p;
輸入進程號和運行時間:
\n\n"
(*)(());
0;
=0;
()
2(p);
>
;
時間片輪轉法輸出信息:
********************************************************************\n"
(){
=0){
=;
(){
{
=;
(){
();
->
=->
('
(**b){
((*)a)->
-((*)b)->
3(){
(0<
(p[i]);
p[i]0;
p[i];
p[i]'
p1[i][i];
((p[0]));
短作業優先算法輸出信息:
3(){
*進程號時間所需要時間已等待時間狀態*\n"
(i){
1[i];
*10s10d10d10d10c*\n"
(1){
=0;
\t選擇算法:
P優先數算法\n"
\t\tD短作業優先算法\n"
\t\tR時間片輪轉算法\n"
D'
){
("
輸入錯誤!
(0);
輸入進程數:
1();
請輸入時間片の大小:
2();
3();