




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(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
2、;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!=NU
3、LL) 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
4、("*完成隊(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&&n<=100) break; else printf("輸入有誤。請(qǐng)重新輸入!n"
5、;); getchar(); 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("
6、優(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+) printf("n");p=(struct pcb* )malloc(sizeof(struct pcb); printf("輸入第%d進(jìn)程的名稱:",i+1); scanf("%s",p->name); printf("需要的運(yùn)行時(shí)間:&quo
7、t;); 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=(str
8、uct pcb* )malloc(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-
9、>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=
10、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->cputim
11、e=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+;void S
12、JP()/*調(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(nt<0) nt=0; p->needtime=nt; ct=p->cputime;
13、ct=ct+2; p->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;
14、 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"); pr
15、intf(" 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
16、、 編寫簡(jiǎn)化的多級(jí)反饋隊(duì)列調(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í)間片長(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 <stdio.h>#include<stdlib.h>#include <string.h>typedef struct pcb/定義PCB結(jié)構(gòu)char name20; /
17、*進(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)行
18、次數(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=FI
19、NSH;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)
20、 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(); head=(struct pcb* )malloc(sizeof(struct pcb);printf("輸入第1個(gè)進(jìn)程的名稱:");scanf("%s",head->name);wh
21、ile(1) printf("需要的運(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&
22、lt;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("%d",&nt); p->needtime=nt; printf("優(yōu)先數(shù):"); scanf("%d",&pr); p->prio=pr;p-&g
23、t;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(nt<0) nt=0; p->needtime=nt; ct=p->cputime; ct=ct+ltime; p->cputime=ct; p->ltime*=2; RUN=p; PR
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度土地使用權(quán)出讓合同主體變更與土地市場(chǎng)調(diào)控協(xié)議
- 沙石運(yùn)輸成本控制協(xié)議
- 2025年度不銹鋼扶手行業(yè)技術(shù)交流與合作合同
- 科技在推動(dòng)城市老舊小區(qū)改造中的作用研究
- 2025年度國(guó)際貿(mào)易環(huán)保技術(shù)服務(wù)合同范例
- 保姆中介合同范本
- 2025年度大數(shù)據(jù)投資暗股合同
- 2025年中國(guó)機(jī)床再制造行業(yè)發(fā)展?jié)摿︻A(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 住宅車位出租合同范本
- 2024-2029年中國(guó)畜牧業(yè)市場(chǎng)前瞻與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 中考英語閱讀理解(含答案)30篇
- 《同濟(jì)大學(xué)簡(jiǎn)介》課件
- 文化產(chǎn)業(yè)管理專業(yè)大學(xué)生職業(yè)生涯規(guī)劃書
- DSM-V美國(guó)精神疾病診斷標(biāo)準(zhǔn)
- 文獻(xiàn)的載體課件
- 2023年高考語文全國(guó)乙卷《長(zhǎng)出一地的好蕎麥》解析
- 混凝土強(qiáng)度回彈檢測(cè)方案
- 歷年中考地理生物變態(tài)難題
- 研學(xué)旅行課程標(biāo)準(zhǔn)(一)-前言、課程性質(zhì)與定位、課程基本理念、課程目標(biāo)
- 部編版二年級(jí)下冊(cè)語文教案全冊(cè)
- 解放牌汽車CA10B后鋼板彈簧吊耳加工工藝及夾具設(shè)計(jì)哈
評(píng)論
0/150
提交評(píng)論