操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)(共23頁)_第1頁
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)(共23頁)_第2頁
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)(共23頁)_第3頁
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)(共23頁)_第4頁
操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)(共23頁)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論