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

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)室名稱:計(jì)算機(jī)實(shí)驗(yàn)室實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程調(diào)度班級(jí): 物聯(lián)網(wǎng)151沈陽工程學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)課程名稱:操作系統(tǒng)實(shí)驗(yàn)日期:2016年_月_日姓名: 學(xué)號(hào)指導(dǎo)教師: 曲樂聲 劉琪 批閱教師:成績(jī):一. 實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)要求用高級(jí)語言編寫模擬進(jìn)程調(diào)度程序,以便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊(duì)列等概念,并體會(huì)和了解基于時(shí)間片輪轉(zhuǎn)調(diào)度算法的具體實(shí)施辦法。二. 實(shí)驗(yàn)設(shè)備PC機(jī)一臺(tái),WIN-TC 軟件。三. 實(shí)驗(yàn)項(xiàng)目(1) 設(shè)計(jì)進(jìn)程控制塊 PCB的結(jié)構(gòu),通常應(yīng)包括如下信息:進(jìn)程名、或輪轉(zhuǎn)時(shí)間片數(shù)、 進(jìn)程已占用的CPU時(shí)間、進(jìn)程到完成還需要的時(shí)間、進(jìn)程的狀態(tài)、進(jìn)程優(yōu)先級(jí)、當(dāng)前隊(duì)列指針等(2) 編寫調(diào)度算法程序:

2、時(shí)間片輪轉(zhuǎn)、優(yōu)先級(jí)調(diào)度算法程序(3) 按要求輸出結(jié)果。(附圖)四. 根據(jù)實(shí)驗(yàn)寫結(jié)果1時(shí)間片輪轉(zhuǎn)時(shí)間片大小進(jìn)程名ABCDE平均q=4到達(dá)時(shí)間01234服務(wù)時(shí)間23456完成時(shí)間2591522周轉(zhuǎn)時(shí)間24712188.6帶權(quán)周轉(zhuǎn)時(shí)間11.31.752.431.892優(yōu)先級(jí)時(shí)間片大小進(jìn)程名ABCDE平均q=4到達(dá)時(shí)間01234服務(wù)時(shí)間23456優(yōu)先數(shù)12345完成時(shí)間211131820周轉(zhuǎn)時(shí)間21011151610.8帶權(quán)周轉(zhuǎn)時(shí)間13.32.7532.62.5四.實(shí)驗(yàn)程序代碼(附頁)成績(jī)?cè)u(píng)定算法正確性2.521.510.50程序正確性2.521.510.50結(jié)果及分析的正確性543210成績(jī)時(shí)間片輪

3、轉(zhuǎn)#in elude <stdio.h> #in elude <stdlib.h> #in elude <stri ng.h>typedef struct nodechar n ame20;/*進(jìn)程的名字*/intprio; /*進(jìn)程的優(yōu)先級(jí)*/intround; /*分配CPU的時(shí)間片*/intcputime; /*CPU執(zhí)行時(shí)間*/intneedtime; /*進(jìn)程執(zhí)行所需要的時(shí)間*/char state;/*進(jìn)程的狀態(tài),W就緒態(tài),執(zhí)行態(tài),F(xiàn)完成態(tài)*/int count; /*記錄執(zhí)行的次數(shù)*/struct node *n ext;/*鏈表指針*/PCB

4、;PCB *ready=NULL,*ru n=NULL,*fi nish=NULL; /* 定義三個(gè)隊(duì)列,就緒隊(duì)列,執(zhí)行隊(duì)列和完成隊(duì)列*/int num;void GetFirst(); /*從就緒隊(duì)列取得第一個(gè)節(jié)點(diǎn)*/void Output(); /*輸出隊(duì)列信息*/void In sertPrio(PCB *in); /*創(chuàng)建優(yōu)先級(jí)隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級(jí)越高*/時(shí)間片隊(duì)列*/時(shí)間片隊(duì)列*/void In sertTime(PCB *in); /* void In sertFi ni sh(PCB *in); /*void PrioCreate();/*優(yōu)先級(jí)輸入函數(shù)*/void Ti

5、meCreate();/*時(shí)間片輸入函數(shù)*/void Priority(); /*按照優(yōu)先級(jí)調(diào)度*/void Rou ndR un ();/*時(shí)間片輪轉(zhuǎn)調(diào)度*/int main(void) char chose;printf(”輸入進(jìn)程名及其需要運(yùn)行的時(shí)間n");scan f("%d", &n um);getchar();(P/R)n");prin tf("Scheduli ngmethod for in put process:scan f("%c",&chose);switch(chose)case &#

6、39;P':case 'p':PrioCreate();Priority。;break;case 'R':case 'r':TimeCreate();Rou ndRu n();break;default:break;Output。;return 0;void GetFirst() /*取得第一個(gè)就緒隊(duì)列節(jié)點(diǎn)*/run = ready;if(ready!=NULL)run ->state = 'R'ready = ready ->n ext;run ->n ext = NULL;void Output。/*

7、輸出隊(duì)列信息*/PCB *p;p = ready;statetco un terprintf(”進(jìn)程名 t prioritytnumber'tcputime'ttime you need tprocessn");while(p!=NULL)prin tf("%st%dt%dt%dt%dtt%ctt%dn",p-> name,p->prio,p->rou nd,p->cputime,p->n eedtime,p->state,p->co un t);p = p_>n ext;p = fin ish;wh

8、ile(p!=NULL)prin tf("%st%dt%dt%dt%dtt%ctt%dn",p-> name,p->prio,p->rou nd,p->cputime,p->n eedtime,p->state,p->co un t);p = p_>n ext;p = run;while(p!=NULL)prin tf("%st%dt%dt%dt%dtt%ctt%dn",p-> name,p->prio,p->rou nd,p->cputime,p->n eedtime,p-&

9、gt;state,p->co un t);p = p_>n ext;void In sertPrio(PCB *in)/*創(chuàng)建優(yōu)先級(jí)隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級(jí)越低*/PCB *fst,* nxt; fst = nxt = ready;if(ready = NULL) /*如果隊(duì)列為空,則為第一個(gè)元素*/in->n ext = ready;ready = in;else /*查到合適的位置進(jìn)行插入*/if(in ->prio >= fst _>prio) /*in->n ext = ready;ready = in;elsewhile(fst- >

10、;n ext != NULL) /*nxt = fst;fst = fst- >n ext;比第一個(gè)還要大,則插入到隊(duì)頭*/移動(dòng)指針查找第一個(gè)別它小的元素的位置進(jìn)行插入*/if(fst ->n ext = NULL) /*in ->n ext = fst ->n ext;fst ->n ext = in;已經(jīng)搜索到隊(duì)尾,則其優(yōu)先級(jí)數(shù)最小,將其插入到隊(duì)尾即可*/else /* 插入到隊(duì)列中*/n xt = in;in ->n ext = fst;void In sertTime(PCB *in) /*將進(jìn)程插入到就緒隊(duì)列尾部*/PCB *fst;fst = r

11、eady;if(ready = NULL)in->n ext = ready;ready = in;elsewhile(fst-> next != NULL)fst = fst->n ext;in ->next = fst ->n ext;fst ->n ext = in;void In sertFi ni sh(PCB *in) /*將進(jìn)程插入到完成隊(duì)列尾部*/PCB *fst;fst = fini sh;if(fin ish = NULL)in->n ext = finish;fin ish = in;elsewhile(fst-> next

12、 != NULL)fst = fst->n ext;in ->next = fst ->n ext;fst ->n ext = in;void PrioCreate() /*優(yōu)先級(jí)調(diào)度輸入函數(shù)*/PCB *tmp;int i;required:' n");prin tf("E nterthe process n ame and process timefor(i = 0;i < num; i+)if(tmp = (PCB *)malloc(sizeof(PCB)=NULL)perror("malloc");exit(

13、1);sca nf("%s",tmp->n ame);getchar(); /*吸收回車符號(hào)*/sca nf("%d",&( tmp-> needtime);tmp ->cputime = 0;tmp ->state =W;tmp ->prio = 50 - tmp->needtime; /*設(shè)置其優(yōu)先級(jí),需要的時(shí)間越多,優(yōu)先級(jí)越低*/tmp ->round = 0;tmp ->co unt = 0;In sertPrio(tmp); /*按照優(yōu)先級(jí)從高到低,插入到就緒隊(duì)列*/void TimeCr

14、eate()/*時(shí)間片輸入函數(shù) */PCB *tmp;int i;slice:nprintf("Enterthe process name and the time required for the process time");for(i = 0;i < num; i+)if(tmp = (PCB *)malloc(sizeof(PCB)=NULL)perror("malloc");exit(1);sca nf("%s",tmp->n ame);getchar();sca nf("%d",&(

15、 tmp-> needtime);tmp ->cputime = 0;tmp ->state =W;tmp ->prio = 0;tmp ->rou nd = 2; /*假設(shè)每個(gè)進(jìn)程所分配的時(shí)間片是 2*/tmp ->co unt = 0;In sertTime(tmp);void Priority() /*按照優(yōu)先級(jí)調(diào)度,每次執(zhí)行一個(gè)時(shí)間片 */int flag = 1;GetFirst();while(run != NULL) /*當(dāng)就緒隊(duì)列不為空時(shí),則調(diào)度進(jìn)程如執(zhí)行隊(duì)列執(zhí)行*/Output。; /*while(flag)輸出每次調(diào)度過程中各個(gè)節(jié)點(diǎn)的狀態(tài)

16、*/run->prio -= 3; /*優(yōu)先級(jí)減去三*/run->cputime+; /*CPU時(shí)間片加一 */run->n eedtime-;/*進(jìn)程執(zhí)行完成的剩余時(shí)間減一*/if(run->n eedtime = 0)/*如果進(jìn)程執(zhí)行完畢,將進(jìn)程狀態(tài)置為F將其插入到完成隊(duì)列*/進(jìn)程執(zhí)行的次數(shù)加一*/run ->state = 'F' run->co un t+; /* InsertFini sh(r un);flag = 0;else /*將進(jìn)程狀態(tài)置為W,入就緒隊(duì)列*/run->state = 'W;進(jìn)程執(zhí)行的次數(shù)加一*/

17、run->co un t+; /*In sertTime(ru n);flag = 0;flag = 1;GetFirst(); /*繼續(xù)取就緒隊(duì)列隊(duì)頭進(jìn)程進(jìn)入執(zhí)行隊(duì)列*/int flag = 1;GetFirst();while(run != NULL)Output。;while(flag)run->co un t+;run->cputime+;run->n eedtime-;if(run->needtime = 0) /*進(jìn)程執(zhí)行完畢 */run ->state = 'F'InsertFini sh(r un);flag = 0;else

18、 if(run->count = run->round)/*時(shí)間片用完 */run->state = 'W;run->cou nt = 0; /*計(jì)數(shù)器清零,為下次做準(zhǔn)備*/In sertTime(ru n);flag = 0;flag = 1;GetFirst();FF3sb Anyto cant inuewFF3bbccAH進(jìn)程名cc bb占用CPU時(shí)間到憲成還裁旳時(shí)間輪轉(zhuǎn)時(shí)間片狀態(tài)A40R進(jìn)程名CC bb aa進(jìn)程呂CC bb aa占用GPU時(shí)間到完咸還蒙的時(shí)間輪轉(zhuǎn)時(shí)阿片狀態(tài)313»3B3F占用CFU時(shí)冋到芫成還爰的葉間輪轉(zhuǎn)時(shí)間片狀態(tài)6-2&am

19、p;FFF片名占用CPU3t|B|到充咸還要的時(shí)間輪轉(zhuǎn)時(shí)間片 狀態(tài)00優(yōu)先級(jí)#in elude<stdio.h>#in elude<stdlib.h>#in elude<coni o.h>#defi negetpeh(type) (type*)malloc(sizeof(type)#defineNULL 0struct pcb char n ame10;char state;int super;int ntime;int rtime;struct pcb* link;*ready=NULL,*p;typedef struct pcb PCB;void sor

20、t() PCB *first,*second;int insert=0;if(ready=NULL)|(p_>super)>(ready_>super)p->li nk=ready;ready=p;else /*進(jìn)程比較優(yōu)先級(jí),插入適當(dāng)?shù)奈恢弥?/first=ready;sec on d=first->li nk;while(sec on d!=NULL)if(p->super)>(second->super)/*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大*/ /*插入到當(dāng)前進(jìn)程前面*/p->li nk=sec ond;first->li nk=p

21、;seco nd=NULL;in sert=1;else /*插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊(duì)尾*/first=first->li nk;sec on d=sec on d->li nk;if(in sert=0)first->li nk=p;voidin put()/*建立進(jìn)程控制塊函數(shù)*/ int i,num;system("cls"); /* 清屏 */printf("nprint the numberof the process: ");sca nf("%d",&n um);for(i=1;i<=

22、nu m;i+)prin tf("nprocess No.%d:n",i);p=getpch(PCB);printf("nprint the name of process:");sca nf("%s",p->n ame);prin tf("nprint the priority:");sca nf("%d",&p->super);printf("nprint the time of process:");sca nf("%d",&am

23、p;p->n time);prin tf("n");p_>rtime=0;p_>state=W;p->li nk=NULL;sort(); /* 調(diào)用 sort 函數(shù) */int space()int l=0;PCB* pr=ready;while(pr!=NULL)l+;pr=pr->li nk;return(l);void disp(PCB * pr) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/prin tf("nprocess n amet state't priority'tn eed timet run ti

24、me' n");prin tf("|%st",pr- >n ame);prin tf("|%ct",pr->state);prin tf("|%dt",pr->super);prin tf("|%dtt",pr- >n time);prin tf("|%dt",pr->rtime);prin tf("n");void check() /* 建立進(jìn)程查看函數(shù)*/PCB* pr;printf("n* the process is running:n");/* 顯示當(dāng)前運(yùn)行進(jìn)程 */disp(p);pr=ready;printf("n* the state:n");/* 顯示就緒隊(duì)列狀態(tài) */while(pr!=NULL)disp(pr);pr=pr->li nk; void destroy() /*建立進(jìn)程撤消函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤消進(jìn)程)*/printf("nthe process%s is running.n",p->name);fr

溫馨提示

  • 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)論