操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn).docx_第1頁(yè)
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn).docx_第2頁(yè)
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn).docx_第3頁(yè)
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn).docx_第4頁(yè)
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn).docx_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余18頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)五 進(jìn)程調(diào)度模擬實(shí)驗(yàn)/進(jìn)程調(diào)度算法proc.c#include #include#include 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 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(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!=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ì)列為空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&nname);while(1) printf(需要的運(yùn)行時(shí)間:); scanf(%d,&nt); if(nt0) break; else printf(輸入無(wú)效,重新輸入!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;iname); printf(需要的運(yùn)行時(shí)間:); scanf(%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* )malloc(sizeof(struct pcb); while(p-next!=NULL) L=0; q=p-next; t=p; while(q!=NULL) if(t-prioprio) 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; strcpy(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();/*建立就緒隊(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; PRINTLINK(t);/*輸出3個(gè)隊(duì)列*/ if( RUN-needtimenext=p; FTAIL=FTAIL-next; RUN=NULL; else /*若運(yùn)行沒(méi)結(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)輪轉(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(ntneedtime=nt; ct=p-cputime; ct=ct+2; p-cputime=ct; RUN=p; PRINTLINK(t);/*輸出3個(gè)隊(duì)列*/ if( RUN-needtimenext=p; FTAIL=FTAIL-next; RUN=NULL; else/*若運(yùn)行沒(méi)結(jié)束進(jìn)入就緒隊(duì)列*/ if (READY=NULL)/*當(dāng)就緒隊(duì)列為空*/ READY=p; RTAIL=p; else RTAIL-next=p; RTAIL=p; RUN=NULL; t+;/*主程序*/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:退出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、 編寫(xiě)簡(jiǎn)化的多級(jí)反饋隊(duì)列調(diào)度算法要求只有三級(jí)隊(duì)列,進(jìn)程在第一級(jí)隊(duì)列中時(shí),采用時(shí)間片輪轉(zhuǎn)執(zhí)行;如果該進(jìn)程沒(méi)有執(zhí)行完畢,其進(jìn)入第二級(jí)隊(duì)列,第二級(jí)隊(duì)列中也采用時(shí)間片輪轉(zhuǎn)算法,但時(shí)間片長(zhǎng)度是第一級(jí)隊(duì)列時(shí)間片長(zhǎng)度的二倍,以此類推,長(zhǎng)進(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 #include#include 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;/*鏈指針*/ int ltime; /*時(shí)間片長(zhǎng)度*/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(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!=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ì)列為空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&nname);while(1) printf(需要的運(yùn)行時(shí)間:); scanf(%d,&nt); if(nt0) break; else printf(輸入無(wú)效,重新輸入!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;iname); printf(需要的運(yùn)行時(shí)間:); scanf(%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 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(ntneedtime=nt; ct=p-cputime; ct=ct+ltime; p-cputime=ct; p-ltime*=2; RUN=p; PRINTLINK(t);/*輸出3個(gè)隊(duì)列*/ if( RUN-needtimenext=p; FTAIL=FTAIL-next; RUN=NULL; else/*若運(yùn)行沒(méi)結(jié)束進(jìn)入就緒隊(duì)列*/ if (READY=NULL)/*當(dāng)就緒隊(duì)列為空*/ READY=p; RTAIL=p; else RTAIL-next=p; RTAIL=p; RUN=NULL; t+;/*主程序*/void main() int N;RUN=(struct pcb* )malloc(sizeof(struct pcb); while(1)RUN =NULL; READY =NU

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論