


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)室名稱:計(jì)算機(jī)實(shí)驗(yàn)室實(shí)驗(yàn)項(xiàng)目名稱:進(jìn)程調(diào)度班級: 物聯(lián)網(wǎng)151沈陽工程學(xué)院學(xué)生實(shí)驗(yàn)報告實(shí)驗(yàn)課程名稱:操作系統(tǒng)實(shí)驗(yàn)日期:2016年_月_日姓名: 學(xué)號指導(dǎo)教師: 曲樂聲 劉琪 批閱教師:成績:一. 實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)要求用高級語言編寫模擬進(jìn)程調(diào)度程序,以便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊(duì)列等概念,并體會和了解基于時間片輪轉(zhuǎn)調(diào)度算法的具體實(shí)施辦法。二. 實(shí)驗(yàn)設(shè)備PC機(jī)一臺,WIN-TC 軟件。三. 實(shí)驗(yàn)項(xiàng)目(1) 設(shè)計(jì)進(jìn)程控制塊 PCB的結(jié)構(gòu),通常應(yīng)包括如下信息:進(jìn)程名、或輪轉(zhuǎn)時間片數(shù)、 進(jìn)程已占用的CPU時間、進(jìn)程到完成還需要的時間、進(jìn)程的狀態(tài)、進(jìn)程優(yōu)先級、當(dāng)前隊(duì)列指針等(2) 編寫調(diào)度算法程序:
2、時間片輪轉(zhuǎn)、優(yōu)先級調(diào)度算法程序(3) 按要求輸出結(jié)果。(附圖)四. 根據(jù)實(shí)驗(yàn)寫結(jié)果1時間片輪轉(zhuǎn)時間片大小進(jìn)程名ABCDE平均q=4到達(dá)時間01234服務(wù)時間23456完成時間2591522周轉(zhuǎn)時間24712188.6帶權(quán)周轉(zhuǎn)時間11.31.752.431.892優(yōu)先級時間片大小進(jìn)程名ABCDE平均q=4到達(dá)時間01234服務(wù)時間23456優(yōu)先數(shù)12345完成時間211131820周轉(zhuǎn)時間21011151610.8帶權(quán)周轉(zhuǎn)時間13.32.7532.62.5四.實(shí)驗(yàn)程序代碼(附頁)成績評定算法正確性2.521.510.50程序正確性2.521.510.50結(jié)果及分析的正確性543210成績時間片輪
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)先級*/intround; /*分配CPU的時間片*/intcputime; /*CPU執(zhí)行時間*/intneedtime; /*進(jìn)程執(zhí)行所需要的時間*/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; /* 定義三個隊(duì)列,就緒隊(duì)列,執(zhí)行隊(duì)列和完成隊(duì)列*/int num;void GetFirst(); /*從就緒隊(duì)列取得第一個節(jié)點(diǎn)*/void Output(); /*輸出隊(duì)列信息*/void In sertPrio(PCB *in); /*創(chuàng)建優(yōu)先級隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越高*/時間片隊(duì)列*/時間片隊(duì)列*/void In sertTime(PCB *in); /* void In sertFi ni sh(PCB *in); /*void PrioCreate();/*優(yōu)先級輸入函數(shù)*/void Ti
5、meCreate();/*時間片輸入函數(shù)*/void Priority(); /*按照優(yōu)先級調(diào)度*/void Rou ndR un ();/*時間片輪轉(zhuǎn)調(diào)度*/int main(void) char chose;printf(”輸入進(jìn)程名及其需要運(yùn)行的時間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() /*取得第一個就緒隊(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)先級隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越低*/PCB *fst,* nxt; fst = nxt = ready;if(ready = NULL) /*如果隊(duì)列為空,則為第一個元素*/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;比第一個還要大,則插入到隊(duì)頭*/移動指針查找第一個別它小的元素的位置進(jìn)行插入*/if(fst ->n ext = NULL) /*in ->n ext = fst ->n ext;fst ->n ext = in;已經(jīng)搜索到隊(duì)尾,則其優(yōu)先級數(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)先級調(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(); /*吸收回車符號*/sca nf("%d",&( tmp-> needtime);tmp ->cputime = 0;tmp ->state =W;tmp ->prio = 50 - tmp->needtime; /*設(shè)置其優(yōu)先級,需要的時間越多,優(yōu)先級越低*/tmp ->round = 0;tmp ->co unt = 0;In sertPrio(tmp); /*按照優(yōu)先級從高到低,插入到就緒隊(duì)列*/void TimeCr
14、eate()/*時間片輸入函數(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è)每個進(jìn)程所分配的時間片是 2*/tmp ->co unt = 0;In sertTime(tmp);void Priority() /*按照優(yōu)先級調(diào)度,每次執(zhí)行一個時間片 */int flag = 1;GetFirst();while(run != NULL) /*當(dāng)就緒隊(duì)列不為空時,則調(diào)度進(jìn)程如執(zhí)行隊(duì)列執(zhí)行*/Output。; /*while(flag)輸出每次調(diào)度過程中各個節(jié)點(diǎn)的狀態(tài)
16、*/run->prio -= 3; /*優(yōu)先級減去三*/run->cputime+; /*CPU時間片加一 */run->n eedtime-;/*進(jìn)程執(zhí)行完成的剩余時間減一*/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)/*時間片用完 */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時間到憲成還裁旳時間輪轉(zhuǎn)時間片狀態(tài)A40R進(jìn)程名CC bb aa進(jìn)程呂CC bb aa占用GPU時間到完咸還蒙的時間輪轉(zhuǎn)時阿片狀態(tài)313»3B3F占用CFU時冋到芫成還爰的葉間輪轉(zhuǎn)時間片狀態(tài)6-2&am
19、p;FFF片名占用CPU3t|B|到充咸還要的時間輪轉(zhuǎn)時間片 狀態(tài)00優(yōu)先級#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)先級,插入適當(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州省考試院2025年4月高三年級適應(yīng)性考試化學(xué)試題及答案
- 山西衛(wèi)生健康職業(yè)學(xué)院《第二外語三》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省德州市禹城市2024-2025學(xué)年五下數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含答案
- 玉林師范學(xué)院《中國現(xiàn)代文學(xué)名作與中學(xué)語文》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海交通職業(yè)技術(shù)學(xué)院《生物醫(yī)藥倫理與藥事管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 南昌大學(xué)科學(xué)技術(shù)學(xué)院《現(xiàn)代舞基礎(chǔ)訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 榆林職業(yè)技術(shù)學(xué)院《預(yù)防醫(yī)學(xué)進(jìn)展》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南國土資源職業(yè)學(xué)院《藝術(shù)雕塑》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西工程學(xué)院《世界新能源戰(zhàn)略與政策分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 新疆建設(shè)職業(yè)技術(shù)學(xué)院《初級韓國語》2023-2024學(xué)年第二學(xué)期期末試卷
- 藥理學(xué)考研歷年真題匯總(重點(diǎn)題)
- DB32T 3904-2020 電動自行車停放充電場所消防技術(shù)規(guī)范
- 云南省文山壯族苗族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 施工組織設(shè)計(jì)-擬投入的主要施工機(jī)械設(shè)備表
- 質(zhì)量目標(biāo)管理表
- DBJ41T 074-2013 高壓細(xì)水霧滅火系統(tǒng)設(shè)計(jì)、施工及驗(yàn)收規(guī)范
- Q∕SY 05262-2019 機(jī)械清管器技術(shù)條件
- 《出納員登記日記賬》 課件
- DB32∕T 2518-2013 農(nóng)田徑流氮磷生態(tài)攔截溝渠塘構(gòu)建技術(shù)規(guī)范
- 拳擊單招考試評分標(biāo)準(zhǔn)
- DBJ51 014-2021 四川省建筑地基基礎(chǔ)檢測技術(shù)規(guī)程
評論
0/150
提交評論