




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)五 進(jìn)程調(diào)度模擬實(shí)驗(yàn)/進(jìn)程調(diào)度算法proc.c#include <stdio.h>#include<stdlib.h>#include <string.h>typedef struct pcb/定義PCB結(jié)構(gòu)char name20; /*進(jìn)程標(biāo)識(shí)符*/int cputime; /*進(jìn)程占用CPU時(shí)間*/int prio; /*進(jìn)程優(yōu)先數(shù)*/int needtime; /*進(jìn)程到完成還需要的CPU時(shí)間*/struct pcb *next;/*鏈指針*/PCB;PCB *RUN,*READY,*RTAIL,*FINSH,*FTAIL;void PRINTLI
2、NK(int t)/*輸出3個(gè)隊(duì)列*/PCB *p;printf("CPU運(yùn)行次數(shù):_%d_n",t);printf("_n");printf("進(jìn)程名t運(yùn)行狀態(tài)t運(yùn)行次數(shù)t還需要運(yùn)行次數(shù)n");if(RUN!=NULL) printf("%st運(yùn)行t%dt%dn",RUN->name,RUN->cputime,RUN->needtime); else printf("*運(yùn)行狀態(tài)為空n");p=READY;if(p!=NULL) while(p!=NULL) printf(&q
3、uot;%st就緒t%dt%dn",p->name,p->cputime,p->needtime); p=p->next; else printf("*就緒隊(duì)列為空n");p=FINSH;if (p!=NULL) while(p!=NULL)/printf(" 進(jìn)程名字為:%sn",p->name);printf("%st完成t%dt%dn",p->name,p->cputime,p->needtime);p=p->next;elseprintf("*完成隊(duì)列為
4、空n");getchar();PCB *CPCBLINK()/*建立就緒隊(duì)列*/ printf("建立就緒隊(duì)列nn");int i,n,nt,pr;PCB *p,*q,*head;n=0;while(1) printf("請(qǐng)輸入進(jìn)程的個(gè)數(shù)(有效范圍1-100):"); scanf("%d",&n); printf("n"); if (n>=1&&n<=100) break; else printf("輸入有誤。請(qǐng)重新輸入!n"); getchar()
5、; head=(struct pcb* )malloc(sizeof(struct pcb);printf("輸入第1個(gè)進(jìn)程的名稱:");scanf("%s",head->name);while(1) printf("需要的運(yùn)行時(shí)間:"); scanf("%d",&nt); if(nt>0) break; else printf("輸入無效,重新輸入!n"); getchar(); head->needtime=nt;printf("優(yōu)先數(shù):");s
6、canf("%d",&pr);head->prio=pr; head->cputime=0;/*進(jìn)程已獲得的運(yùn)行時(shí)間*/head->next=NULL;q=head; for(i=1;i<n;i+) printf("n");p=(struct pcb* )malloc(sizeof(struct pcb); printf("輸入第%d進(jìn)程的名稱:",i+1); scanf("%s",p->name); printf("需要的運(yùn)行時(shí)間:"); scanf(&q
7、uot;%d",&nt); p->needtime=nt; printf("優(yōu)先數(shù):"); scanf("%d",&pr); p->prio=pr;p->cputime=0;/*進(jìn)程已獲得的運(yùn)行時(shí)間*/ p->next=NULL;q->next=p;q=p; RTAIL=q;return head;void JXDLPX()/*就緒隊(duì)列按優(yōu)先級(jí)從大到小排序*/ PCB *p,*q,*t; char s10; int L=0,ct,pr,nt; p=READY; t=(struct pcb* )mal
8、loc(sizeof(struct pcb); while(p->next!=NULL) L=0; q=p->next; t=p; while(q!=NULL) if(t->prio<q->prio) t=q; L=1;/*表示有比它優(yōu)先級(jí)大的進(jìn)程*/ q=q->next; if(L=1) strcpy(s,t->name); ct=t->cputime; pr=t->prio; nt=t->needtime; q=p->next; while(strcmp(q->name,s)!=0) q=q->next; str
9、cpy(q->name,p->name); q->cputime=p->cputime; q->prio=p->prio; q->needtime=p->needtime; strcpy(p->name,s); p->cputime=ct; p->prio=pr; p->needtime=nt; p=p->next; void YXS()/*調(diào)用優(yōu)先數(shù)調(diào)度算法*/PCB *p;int t=0,nt,ct,pr;printf("您選擇的是:優(yōu)先級(jí)調(diào)度算法n");READY=CPCBLINK();/*
10、建立就緒隊(duì)列*/p=(struct pcb* )malloc(sizeof(struct pcb);while(READY!=NULL) JXDLPX();/*就緒隊(duì)列按優(yōu)先級(jí)從大到小排序*/ p=READY; READY=READY->next; p->next=NULL; pr=p->prio; pr=pr-3; p->prio=pr;/*運(yùn)行1次進(jìn)程優(yōu)先級(jí)縮小3*/ nt= p->needtime; nt=nt-1; p->needtime=nt; ct=p->cputime; ct=ct+1; p->cputime=ct; RUN=p;
11、PRINTLINK(t);/*輸出3個(gè)隊(duì)列*/ if( RUN->needtime<=0)/*若運(yùn)行結(jié)束進(jìn)入完成隊(duì)列*/ if (FINSH=NULL)/*第1次進(jìn)入完成隊(duì)列*/ FINSH=p; FTAIL=p; else FTAIL->next=p; FTAIL=FTAIL->next; RUN=NULL; else /*若運(yùn)行沒結(jié)束進(jìn)入就緒隊(duì)列*/ if (READY=NULL)/*當(dāng)就緒隊(duì)列為空*/ READY=p; RTAIL=p; else RTAIL->next=p; RTAIL=p; RUN=NULL; t+;void SJP()/*調(diào)用時(shí)間片循環(huán)
12、輪轉(zhuǎn)算法*/PCB *p;printf("您選擇的是:時(shí)間片循環(huán)輪轉(zhuǎn)調(diào)度算法n"); int t=0,nt,ct;READY=CPCBLINK();/*建立就緒隊(duì)列*/p=(struct pcb* )malloc(sizeof(struct pcb);while(READY!=NULL) p=READY; READY=READY->next; p->next=NULL; nt= p->needtime; nt=nt-2; if(nt<0) nt=0; p->needtime=nt; ct=p->cputime; ct=ct+2; p-&g
13、t;cputime=ct; RUN=p; PRINTLINK(t);/*輸出3個(gè)隊(duì)列*/ if( RUN->needtime<=0)/*若運(yùn)行結(jié)束進(jìn)入完成隊(duì)列*/ if (FINSH=NULL)/*第1次進(jìn)入完成隊(duì)列*/ FINSH=p; FTAIL=p; else FTAIL->next=p; FTAIL=FTAIL->next; RUN=NULL; else/*若運(yùn)行沒結(jié)束進(jìn)入就緒隊(duì)列*/ if (READY=NULL)/*當(dāng)就緒隊(duì)列為空*/ READY=p; RTAIL=p; else RTAIL->next=p; RTAIL=p; RUN=NULL; t+
14、;/*主程序*/int main() int N;RUN=(struct pcb* )malloc(sizeof(struct pcb); while(1)RUN =NULL; READY =NULL; RTAIL=NULL; FINSH=NULL; FTAIL=NULL;printf("=n");printf("進(jìn)程調(diào)度算法演示程序 n");printf("=n"); printf(" 1:優(yōu)先級(jí)調(diào)度算法n"); printf(" 2:時(shí)間片循環(huán)輪轉(zhuǎn)算法n"); printf(" 3
15、:退出n"); printf("n"); printf(" 請(qǐng)選擇:"); scanf("%d",&N);if(N=1)YXS();/*調(diào)用優(yōu)先數(shù)調(diào)度算法*/else if(N=2)SJP();/*調(diào)用時(shí)間片循環(huán)輪轉(zhuǎn)算法*/else if(N=3) break; elseprintf("您輸入的信息有誤,請(qǐng)重新輸入!nn");getchar();printf("演示程序結(jié)束!nn"); getchar();return 0;1、 流程圖2、 實(shí)驗(yàn)結(jié)果3、 編寫簡化的多級(jí)反饋隊(duì)列
16、調(diào)度算法要求只有三級(jí)隊(duì)列,進(jìn)程在第一級(jí)隊(duì)列中時(shí),采用時(shí)間片輪轉(zhuǎn)執(zhí)行;如果該進(jìn)程沒有執(zhí)行完畢,其進(jìn)入第二級(jí)隊(duì)列,第二級(jí)隊(duì)列中也采用時(shí)間片輪轉(zhuǎn)算法,但時(shí)間片長度是第一級(jí)隊(duì)列時(shí)間片長度的二倍,以此類推,長進(jìn)程在第三級(jí)隊(duì)列中最終執(zhí)行完畢。如果進(jìn)程在第一級(jí)隊(duì)列中就已經(jīng)執(zhí)行完畢,則在第一級(jí)隊(duì)列中結(jié)束進(jìn)程,如在第二級(jí)隊(duì)列中執(zhí)行完畢,則在第二級(jí)隊(duì)列中結(jié)束進(jìn)程。 #include <stdio.h>#include<stdlib.h>#include <string.h>typedef struct pcb/定義PCB結(jié)構(gòu)char name20; /*進(jìn)程標(biāo)識(shí)符*/int c
17、putime; /*進(jìn)程占用CPU時(shí)間*/int prio; /*進(jìn)程優(yōu)先數(shù)*/int needtime; /*進(jìn)程到完成還需要的CPU時(shí)間*/struct pcb *next;/*鏈指針*/ int ltime; /*時(shí)間片長度*/PCB;PCB *RUN,*READY,*RTAIL,*FINSH,*FTAIL;void PRINTLINK(int t)/*輸出3個(gè)隊(duì)列*/PCB *p;printf("CPU運(yùn)行次數(shù):_%d_n",t);printf("_n");printf("進(jìn)程名t運(yùn)行狀態(tài)t運(yùn)行次數(shù)t還需要運(yùn)行次數(shù)n");if
18、(RUN!=NULL) printf("%st運(yùn)行t%dt%dn",RUN->name,RUN->cputime,RUN->needtime); else printf("*運(yùn)行狀態(tài)為空n");p=READY;if(p!=NULL) while(p!=NULL) printf("%st就緒t%dt%dn",p->name,p->cputime,p->needtime); p=p->next; else printf("*就緒隊(duì)列為空n");p=FINSH;if (p!=NU
19、LL) while(p!=NULL)/printf(" 進(jìn)程名字為:%sn",p->name);printf("%st完成t%dt%dn",p->name,p->cputime,p->needtime);p=p->next;elseprintf("*完成隊(duì)列為空n");getchar();PCB *CPCBLINK()/*建立就緒隊(duì)列*/ printf("建立就緒隊(duì)列nn");int i,n,nt,pr;PCB *p,*q,*head;n=0;while(1) printf("
20、;請(qǐng)輸入進(jìn)程的個(gè)數(shù)(有效范圍1-100):"); scanf("%d",&n); printf("n"); if (n>=1&&n<=100) break; else printf("輸入有誤。請(qǐng)重新輸入!n"); getchar(); head=(struct pcb* )malloc(sizeof(struct pcb);printf("輸入第1個(gè)進(jìn)程的名稱:");scanf("%s",head->name);while(1) printf
21、("需要的運(yùn)行時(shí)間:"); scanf("%d",&nt); if(nt>0) break; else printf("輸入無效,重新輸入!n"); getchar(); head->needtime=nt;printf("優(yōu)先數(shù):");scanf("%d",&pr);head->prio=pr; head->cputime=0;/*進(jìn)程已獲得的運(yùn)行時(shí)間*/head->next=NULL;q=head; for(i=1;i<n;i+) prin
22、tf("n");p=(struct pcb* )malloc(sizeof(struct pcb); printf("輸入第%d進(jìn)程的名稱:",i+1); scanf("%s",p->name); printf("需要的運(yùn)行時(shí)間:"); scanf("%d",&nt); p->needtime=nt; printf("優(yōu)先數(shù):"); scanf("%d",&pr); p->prio=pr;p->cputime=0;/
23、*進(jìn)程已獲得的運(yùn)行時(shí)間*/ p->next=NULL;q->next=p;q=p; RTAIL=q;return head;void SJP()/*調(diào)用時(shí)間片循環(huán)輪轉(zhuǎn)算法*/PCB *p;printf("您選擇的是:時(shí)間片循環(huán)輪轉(zhuǎn)調(diào)度算法n"); int t=0,nt,ct;READY=CPCBLINK();/*建立就緒隊(duì)列*/p=(struct pcb* )malloc(sizeof(struct pcb);while(READY!=NULL) p=READY; READY=READY->next; p->next=NULL; nt= p->needtime; nt=nt-ltime; if(nt<0) nt=0; p->needtime=nt; ct=p->cputime; ct=ct+ltime; p->cputime=ct; p->ltime*=2; RUN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煙囪電纜施工方案
- 井架加工合同范例
- 2025年全自動(dòng)精密貼片機(jī)合作協(xié)議書
- 出售內(nèi)蒙平房合同范本
- 買房中介返現(xiàn)合同范例
- 中介貸款協(xié)議合同范例
- 加油船出租合同范本
- 基于改進(jìn)小生境粒子群算法和智能軟開關(guān)的主動(dòng)配電網(wǎng)優(yōu)化重構(gòu)研究
- 銅基MOF光熱類納米酶抑制細(xì)菌生物膜及其促進(jìn)慢性創(chuàng)面愈合應(yīng)用研究
- 鄉(xiāng)村荒地租賃合同范例
- 《測繪管理法律與法規(guī)》課件-測繪資質(zhì)管理
- DB37T 5245-2022 橋梁智慧健康監(jiān)測技術(shù)標(biāo)準(zhǔn)
- 玩轉(zhuǎn)微木工:零基礎(chǔ)木作小件
- 社區(qū)圖書館設(shè)計(jì)任務(wù)書
- 蒂森克虜伯電梯 meta200 MRL MOB 安裝培訓(xùn) AP (無腳手架安裝工藝)
- 民警違法違紀(jì)的預(yù)防策略
- 健康體檢結(jié)果調(diào)查分析報(bào)告范文
- 機(jī)械性能試驗(yàn)報(bào)告模板
- 2022內(nèi)蒙古烏審旗圖克鎮(zhèn)圖克工業(yè)園區(qū)中天合創(chuàng)化工分公司招聘20人上岸筆試歷年難、易錯(cuò)點(diǎn)考題附帶參考答案與詳解
- 妊娠期高血壓疾病診治指南2020完整版
- 功能科運(yùn)用PDCA循環(huán)提高超聲報(bào)告圖像質(zhì)量PDCA成果匯報(bào)
評(píng)論
0/150
提交評(píng)論