




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
暨南大學(xué)本科實(shí)驗(yàn)報(bào)告專用紙課程名稱 《操作系統(tǒng)原理實(shí)驗(yàn)》 成績?cè)u(píng)定實(shí)驗(yàn)項(xiàng)目 進(jìn)程控制 導(dǎo)教師r紅實(shí)驗(yàn)項(xiàng)目編號(hào)0806002904實(shí)驗(yàn)項(xiàng)目類型綜合型學(xué)生姓名 岑江斌—學(xué)號(hào) 2008051584學(xué)院電氣信息學(xué)院系計(jì)算機(jī)科實(shí)驗(yàn)時(shí)間 年r日下午溫度 ~~濕度 一,實(shí)驗(yàn)?zāi)康?。通過動(dòng)態(tài)優(yōu)先權(quán)算法的模擬加深對(duì)進(jìn)程概念和進(jìn)程調(diào)度過程的理解。二,實(shí)驗(yàn)內(nèi)容。用C語言來實(shí)現(xiàn)對(duì)N個(gè)進(jìn)程采用動(dòng)態(tài)優(yōu)先權(quán)優(yōu)先算法的進(jìn)程調(diào)度。每個(gè)用來標(biāo)識(shí)進(jìn)程的進(jìn)程控制塊PCB用結(jié)構(gòu)來描述,包括以下字段:進(jìn)程標(biāo)識(shí)數(shù)ID;進(jìn)程優(yōu)先數(shù)PRIORITY,并規(guī)定優(yōu)先數(shù)越大的進(jìn)程,其優(yōu)先權(quán)越高;進(jìn)程已占用的CPU時(shí)間CPUTIME;進(jìn)程還需占用的CPU時(shí)間ALLTIME。當(dāng)進(jìn)程運(yùn)行完畢時(shí),ALLTIME變?yōu)?;進(jìn)程的阻塞時(shí)間STARTBLOCK,表示當(dāng)進(jìn)程再運(yùn)行STARTBLOCK個(gè)時(shí)間片后,進(jìn)程將進(jìn)入阻塞狀態(tài);進(jìn)程被阻塞的時(shí)間BLOCKTIME,表示已阻塞的進(jìn)程再等待BLOCKTIME個(gè)時(shí)間片后,進(jìn)程將轉(zhuǎn)換成就緒狀態(tài);進(jìn)程狀態(tài)STATE;隊(duì)列指針NEXT,用來將PCB排成隊(duì)列。優(yōu)先數(shù)改變的原則:進(jìn)程在就緒隊(duì)列中呆一個(gè)時(shí)間片,優(yōu)先數(shù)增加1;進(jìn)程每運(yùn)行一個(gè)時(shí)間片,優(yōu)先數(shù)減3。假設(shè)在調(diào)度前,系統(tǒng)中有5個(gè)進(jìn)程,它們的初始狀態(tài)如下:ID0 1234PRIORITY93830290CPUTIME0 0000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY為了清楚地觀察進(jìn)程的調(diào)度過程,程序應(yīng)將每個(gè)時(shí)間片內(nèi)的進(jìn)程的情況顯示出來,參照的具體格式如下:RUNNINGPROG:iREADY_QUEUE:->id1->id2BLOCK_QUEUE:->id3->id4ID01234PRIORITYP0P1P2P3P4CPUTIME C0 C1 C2 C3 C4ALLTIME A0 A1 A2 A3 A4STARTBLOCKT0T1T2T3T4BLOCKTIMEB0B1B2B3B4STATES0S1S2S3S4三,實(shí)驗(yàn)源代碼。#include<string.h>#includevstdio.h>//EOF(=AZ或F6),NULL#include<stdlib.h>//atoi()#include<iostream.h>//cout,cin#include<malloc.h>#defineREADY1//進(jìn)程就緒#defineWORK2//進(jìn)程運(yùn)行#defineBLOCK-1//進(jìn)程阻塞#defineFINISH-2//進(jìn)程完成#defineListHeade-3//ListHeade隊(duì)列頭節(jié)點(diǎn)structPCB{intID;//進(jìn)程標(biāo)識(shí)數(shù)ID;intPRIORITY;//進(jìn)程優(yōu)先數(shù)PRIORITY,并規(guī)定優(yōu)先數(shù)越大的進(jìn)程,其優(yōu)先權(quán)越高;intCPUTIME;//進(jìn)程已占用的CPU時(shí)間CPUTIME;intALLTIME;//進(jìn)程還需占用的CPU時(shí)間ALLTIME。當(dāng)進(jìn)程運(yùn)行完畢時(shí),ALLTIME變?yōu)?;intSTARTBLOCK;//進(jìn)程的阻塞時(shí)間STARTBLOCK,表示當(dāng)進(jìn)程再運(yùn)行STARTBLOCK個(gè)時(shí)間片后,進(jìn)程將進(jìn)入阻塞狀態(tài);intBLOCKTIME;//進(jìn)程被阻塞的時(shí)間BLOCKTIME,表示已阻塞的進(jìn)程再等待BLOCKTIME個(gè)時(shí)間片后,進(jìn)程將轉(zhuǎn)換成就緒狀態(tài);intSTATE;//進(jìn)程狀態(tài)STATE;PCB*next;//隊(duì)列指針NEXT,用來將PCB排成隊(duì)列。};typedefPCB*PCBlist;PCBlistreadylist;//就緒隊(duì)列PCBlistblocklist;//阻塞隊(duì)列PCBlistrun;//被執(zhí)行的進(jìn)程
PCBlistfinishlist;//完成隊(duì)列voidInitQueue(){readylist=(PCBlist)malloc(sizeof(PCB));readylist->next=NULL;//*/={65535,65535,0,0,0,0,-3,NULL};blocklist=(PCBlist)malloc(sizeof(PCB));blocklist->next=NULL;//*/={65535,65535,0,0,0,0,-3,NULL};finishlist=(PCBlist)malloc(sizeof(PCB));finishlist->next=NULL;//*/={65535,65535,0,0,0,0,-3,NULL};}voidInsert(PCBlistlist,PCB&a)//將PCBa插入隊(duì)列l(wèi)ist{PCBlistp,q;p=list;q=list->next;while(q!=NULL&&(q->PRIORITY)>(a.PRIORITY)){//查找插入的位置是對(duì)列按p=q;//PCB的優(yōu)先權(quán)由大到小排列q=q->next;}a.next=q;p->next=&a;startblock,int}startblock,intvoidCreatePS(intid,intpriority,intCPUtime,intalltime,intblocktime){PCBlistp;//創(chuàng)建PCBp=(PCBlist)malloc(sizeof(PCB));p->ID=id;//初始化PCBp->PRIORITY=priority;p->CPUTIME=CPUtime;p->ALLTIME=alltime;p->STARTBLOCK=startblock;p->BLOCKTIME=blocktime;p->STATE=READY;p->next=NULL;Insert(readylist,*p);//將其插入就緒隊(duì)列}voidGetPriority(){run=readylist->next;if(run){readylist->next=run->next;run->next=NULL;}elsereadylist->next=NULL;}voidKillPS(){Insert(finishlist,*run);run->STATE=FINISH;run=NULL;}voidResetPriority(){run->PRIORITY=((run->PRIORITY)-3);if((run->PRIORITY)<0)run->PRIORITY=0;PCB*p;p=(readylist->next);while(p!=NULL){(p->PRIORITY)++;p=(p->next);}}voidResetBlockList(){PCBlistq1,q2;q2=blocklist;q1=(blocklist->next);while(q1!=NULL){q1->BLOCKTIME--;if(q1->BLOCKTIME==0){q2->next=q1->next;Insert(readylist,*q1);q1->STATE=READY;q1=q2->next;}elseq1=q1->next;}}voidExcutePS(){(run->CPUTIME)++;(run->ALLTIME)--;}voidprint(){if(run)cout<<"\tRUNNINGPROG:P"<<run->ID<<endl;cout<<"\tREADY_QUEUE:";PCBlistr;r=readylist->next;while(r!=NULL){cout<<"->"<<r->ID;r=r->next;}cout<<endl;cout<<"\tBLOCK_QUEUE:";r=blocklist->next;while(r!=NULL){cout<<"->"<<r->ID;r=r->next;}cout<<endl<<endl;cout<<"======================================="<<endl;PCBlistP0,P1,P2,P3,P4;r=run;while(r!=NULL){switch(r->ID){case0:P0=r;break;case1:P1=r;break;case2:P2=r;break;case3:P3=r;break;case4:P4=r;break;}r=r->next;}r=readylist->next;while(r!=NULL){switch(r->ID){case0:P0=r;break;case1:P1=r;break;case2:P2=r;break;case3:P3=r;break;case4:P4=r;break;}r=r->next;}r=blocklist->next;while(r!=NULL){switch(r->ID){case0:P0=r;break;case1:P1=r;break;case2:P2=r;break;case3:P3=r;break;case4:P4=r;break;}r=r->next;}r=finishlist->next;while(r!=NULL){switch(r->ID){case0:P0=r;break;case1:P1=r;break;case2:P2=r;break;case3:P3=r;break;case4:P4=r;break;}r=r->next;}cout<<"ID"<<'\t'<<'\t'<<P0->ID<<'\t'<<P1->ID<<'\t'<<P2->ID<<'\t'<<P3->ID<<'\t'<<P4->ID<<endl;cout<<"PRIORITY"<<'\t'<<P0->PRIORITY<<'\t'<<P1->PRIORITY<<'\t'<<P2->PRIORITY<<'\t'<<P3->PRIORITY<<'\t'<<P4->PRIORITY<<endl;cout<<"CPUTIME"<<'\t'<<'\t'<<P0->CPUTIME<<'\t'<<P1->CPUTIME<<'\t'<<P2->CPUTIME<<'\t'<<P3->CPUTIME<<'\t'<<P4->CPUTIME<<endl;cout<<"ALLTIME"<<'\t'<<'\t'<<P0->ALLTIME<<'\t'<<P1->ALLTIME<<'\t'<<P2->ALLTIME<<'\t'<<P3->ALLTIME<<'\t'<<P4->ALLTIME<<endl;cout<<"STARTBLOCK"<<'\t'<<P0->STARTBLOCK<<'\t'<<P1->STARTBLOCK<<'\t'<<P2->STARTBLOCK<<'\t'<<P3->STARTBLOCK<<'\t'<<P4->STARTBLOCK<<endl;cout<<"BLOCKTIME"<<'\t'<<P0->BLOCKTIME<<'\t'<<P1->BLOCKTIME<<'\t'<<P2->BLOCKTIME<<'\t'<<P3->BLOCKTIME<<'\t'<<P4->BLOCKTIME<<endl;cout<<"STATE"<<'\t'<<'\t';switch(P0->STATE){caseREADY:cout<<"READY"<<'\t';break;caseWORK:cout<<"WORK"<<'\t';break;caseBLOCK:cout<<"BLOCK"<<'\t';break;caseFINISH:cout<<"FINISH"<<'\t';break;}switch(P1->STATE){caseREADY:cout<<"READY"<<'\t';break;caseWORK:cout<<"WORK"<<'\t';break;caseBLOCK:cout<<"BLOCK"<<'\t';break;caseFINISH:cout<<"FINISH"<<'\t';break;}switch(P2->STATE){caseREADY:cout<<"READY"<<'\t';break;caseWORK:cout<<"WORK"<<'\t';break;caseBLOCK:cout<<"BLOCK"<<'\t';break;caseFINISH:cout<<"FINISH"<<'\t';break;}switch(P3->STATE){caseREADY:cout<<"READY"<<'\t';break;caseWORK:cout<<"WORK"<<'\t';break;caseBLOCK:cout<<"BLOCK"<<'\t';break;caseFINISH:cout<<"FINISH"<<'\t';break;}switch(P4->STATE){caseREADY:cout<<"READY"<<endl;break;caseWORK:cout<<"WORK"<<endl;break;caseBLOCK:cout<<"BLOCK"<<endl;break;caseFINISH:cout<<"FINISH"<<endl;break;}cout<<"Printanykeytocontinue"<<endl;//getchar();}voidRunPS(){GetPriority();run->STATE=WORK;print();while(run!=NULL){ExcutePS();ResetPriority();//重置優(yōu)先級(jí),本回合喚醒的阻塞進(jìn)程優(yōu)先權(quán)不加一(不參與重置)if(run->ALLTIME==0)KillPS();if(run&&run->STARTBLOCK!=-1)(run->STARTBLOCK)--;if((blocklist->next)!=NULL)ResetBlockList();if(run&&run->STARTBLOCK==0){Insert(blocklist,*run);run->STATE=BLOCK;}else{if(run){Insert(readylist,*run);run->STATE=READY;}}print();GetPriority();print();}}{InitQueue();CreatePS(0,9,0,3,2,3);CreatePS(1,38,0,3,-1,0);CreatePS(2,30,0,6,-1,0);CreatePS(3,29,0,3,-1,0);CreatePS(4,0,0,4,-1,0);RunPS();return0;}四,實(shí)驗(yàn)結(jié)果分析。部分截圖:^LLTINE 30314STARTBLOGK2-1-1-1-1BLOGKTINE30008STATEREADVFINISHREADVREADYREADYPrintanykeytocontinue!*?RUNNINGPROG:P3READV.QUEUE:->2->0->4BLOCK-QUEUE:ID01234PRIORIT¥172926298CPUTIME0332SHLLTII1E30314KTARTBLOCK2-1-1-1-1BLOCKTII1E3000KTftTEREADVFINISHREADVREADVREADYPpintanykeytocontinue*!fREftDV.QUEUE:->2->0->4BLOCK-QUEUE:ID012a4PHIOHITV1829279CPUTIME033aBHLLTINE30304pARTBLOCK2-1-1-1-1HLOCKTINE3000QKTftTEREADVFINISHREADVFINISHREABVPrintanykeytocantinue?*?RUNNINGPROG:P2HEftDV.QUEUE:->0->4BLOCK-QUEUE:ID012
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45216-2025危險(xiǎn)貨物自反應(yīng)物質(zhì)和有機(jī)過氧化物包裝件爆燃試驗(yàn)方法
- 共用墻合同范本
- 兼職防疫保安合同范本
- 出售吊車合同范例
- 加裝電梯托管合同范本
- 光伏銷售質(zhì)保合同范本
- 單位二手房交易合同范本
- 勞動(dòng)合同范例 河南
- 買賣交易正規(guī)合同范本
- 個(gè)人買賣住房合同范本
- 2025年海域使用權(quán)租賃合同
- 四年級(jí)希望杯歷年數(shù)學(xué)競賽試題與答案1-13屆+奧數(shù)分類專項(xiàng)練習(xí)集等
- 《走近世界民間美術(shù)》 課件 2024-2025學(xué)年人美版(2024)初中美術(shù)七年級(jí)下冊(cè)
- (2025春)人教版三年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- 2025年江蘇省高職單招《職測(cè)》高頻必練考試題庫400題(含答案)
- 2025云南紅河州個(gè)舊市大紅屯糧食購銷限公司招聘及人員高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- X證書失智老年人照護(hù)講解
- 工廠安全事故預(yù)防知識(shí)
- 2024-2025學(xué)年人教版數(shù)學(xué)八年級(jí)下冊(cè)期中檢測(cè)卷(含答案)
- 2024年江西應(yīng)用工程職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫含答案解析
- 2024年山東服裝職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論