版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生心理健康檔案管理計(jì)劃
- 2024年編程教學(xué)合作協(xié)議書
- 2023年秋10月《刑法學(xué)》全國(guó)自考考題含解析
- 2024-2025學(xué)年高中英語版必修第一冊(cè)北師版 Unit 2 單元專項(xiàng)提升
- 信陽市2024-2025學(xué)年高三第一次教學(xué)質(zhì)量檢測(cè) 地理試卷(含答案)
- 2023-2024學(xué)年廣西九年級(jí)(上)月考化學(xué)試卷(10月份)
- 2025屆湖北省黃石市第二學(xué)期高三期末教學(xué)質(zhì)量調(diào)測(cè)化學(xué)試題含解析
- 2025屆河南省新鄉(xiāng)一中等四校重點(diǎn)中學(xué)高三下學(xué)期二輪??蓟瘜W(xué)試題含解析
- 塑料 中高加載速率(1ms)下斷裂韌性(GIC和KIC)的測(cè)定 編制說明
- 2025屆河北雄安新區(qū)博奧高級(jí)中學(xué)聯(lián)考化學(xué)試題含解析
- 《慢性腎臟病早期篩查 診斷及防治指南》解讀
- 科普藥學(xué)知識(shí)
- 《護(hù)理病房安全管理制度》
- 園林灌木怎樣修剪
- 2023全國(guó)青少年文化遺產(chǎn)知識(shí)大賽試題及答案(第1201-1270題)
- SWITCH暗黑破壞神3超級(jí)金手指修改 版本號(hào):2.7.7.92380
- 7.4.1二項(xiàng)分布教學(xué)設(shè)計(jì)-高二下學(xué)期數(shù)學(xué)人教A版2019選擇性
- 雪茄品牌培訓(xùn)課件
- 內(nèi)固定取出術(shù)護(hù)理查房課件
- 韓語發(fā)音課件
- 2021年中國(guó)中車公司組織架構(gòu)和部門職能
評(píng)論
0/150
提交評(píng)論