資源描述:
《優(yōu)先級調(diào)度算法實驗報告》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、優(yōu)先級調(diào)度算法實驗報告院系:****************學(xué)院班級:***********姓名:***學(xué)號:************一、實驗題目:優(yōu)先級調(diào)度算法二、實驗?zāi)康倪M(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實驗要求用高級語言編寫模擬進(jìn)程調(diào)度程序,以便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊列等概念,并體會和了解優(yōu)先級算法的具體實施辦法。三、實驗內(nèi)容1.設(shè)計進(jìn)程控制塊PCB的結(jié)構(gòu),通常應(yīng)包括如下信息:進(jìn)程名、進(jìn)程優(yōu)先數(shù)(或輪轉(zhuǎn)時間片數(shù))、進(jìn)程已占用的CPU時間、進(jìn)程到完成還需要的時間、進(jìn)程的狀態(tài)、當(dāng)前隊列指針等。2.編寫優(yōu)
2、先級調(diào)度算法程序3.按要求輸出結(jié)果。四、實驗要求每個進(jìn)程可有三種狀態(tài);執(zhí)行狀態(tài)(RUN)、就緒狀態(tài)(READY,包括等待狀態(tài))和完成狀態(tài)(FINISH),并假定初始狀態(tài)為就緒狀態(tài)。(一)進(jìn)程控制塊結(jié)構(gòu)如下:NAME——進(jìn)程標(biāo)示符PRIO/ROUND——進(jìn)程優(yōu)先數(shù)NEEDTIME——進(jìn)程到完成還需要的時間片數(shù)STATE——進(jìn)程狀態(tài)NEXT——鏈指針注:1.為了便于處理,程序中進(jìn)程的的運(yùn)行時間以時間片為單位進(jìn)行計算;2.各進(jìn)程的優(yōu)先數(shù)或,以及進(jìn)程運(yùn)行時間片數(shù)的初值,均由用戶在程序運(yùn)行時給定。(二)進(jìn)程的就緒態(tài)和等待態(tài)
3、均為鏈表結(jié)構(gòu),共有四個指針如下:RUN——當(dāng)前運(yùn)行進(jìn)程指針READY——就需隊列頭指針TAIL——就需隊列尾指針FINISH——完成隊列頭指針五、實驗結(jié)果:六、實驗總結(jié):首先這次實驗的難度不小,它必須在熟悉掌握數(shù)據(jù)結(jié)構(gòu)的鏈表和隊列的前提下才能完成,這次實驗中用了三個隊列,就緒隊列,執(zhí)行隊列和完成隊列,就緒隊列中的優(yōu)先級數(shù)是有序插入的,當(dāng)進(jìn)行進(jìn)程調(diào)度的時候,需要先把就緒隊列的隊首節(jié)點(diǎn)(優(yōu)先級數(shù)最大的節(jié)點(diǎn))移入執(zhí)行隊列中,當(dāng)執(zhí)行進(jìn)程結(jié)束后,判斷該進(jìn)程是否已經(jīng)完成,如果已經(jīng)完成則移入完成隊列,如果沒有完成,重新有序插入
4、就緒隊列中,這就是這次實驗算法的思想。附錄(算法代碼):#include#include#includetypedefstructnode{charname[20];/*進(jìn)程的名字*/intprio;/*進(jìn)程的優(yōu)先級*///intcputime;/*CPU執(zhí)行時間*/intneedtime;/*進(jìn)程執(zhí)行所需要的時間*/charstate;/*進(jìn)程的狀態(tài),W--就緒態(tài),R--執(zhí)行態(tài),F(xiàn)--完成態(tài)*/structnode*next;/*鏈表指針*/}PCB;P
5、CB*ready=NULL,*run=NULL,*finish=NULL;/*定義三個隊列,就緒隊列,執(zhí)行隊列和完成隊列*/intnum;voidGetFirst();/*從就緒隊列取得第一個節(jié)點(diǎn)*/voidOutput();/*輸出隊列信息*/voidInsertPrio(PCB*in);/*創(chuàng)建優(yōu)先級隊列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越高*/voidInsertTime(PCB*in);/*時間片隊列*/voidInsertFinish(PCB*in);/*時間片隊列*/voidPrioCreate();/*優(yōu)先級
6、輸入函數(shù)*///voidTimeCreate();/*時間片輸入函數(shù)*/voidPriority();/*按照優(yōu)先級調(diào)度*///voidRoundRun();/*時間片輪轉(zhuǎn)調(diào)度*/voidmain(){printf("優(yōu)先數(shù)調(diào)度算法");printf("請輸入要創(chuàng)建的進(jìn)程數(shù)目:");scanf("%d",&num);PrioCreate();Priority();Output();}voidGetFirst()/*取得第一個就緒隊列節(jié)點(diǎn)*/{run=ready;if(ready!=NULL){run->sta
7、te='R';ready=ready->next;run->next=NULL;}}voidOutput()/*輸出隊列信息*/{PCB*p;p=ready;printf("進(jìn)程名t優(yōu)先級t需要時間t進(jìn)程狀態(tài)");while(p!=NULL){printf("%st%dt%dtt%ct",p->name,p->prio,p->needtime,p->state);p=p->next;}p=finish;while(p!=NULL){printf("%st%dt%dtt%ct"
8、,p->name,p->prio,p->needtime,p->state);p=p->next;}p=run;while(p!=NULL){printf("%st%dt%dtt%ct",p->name,p->prio,p->needtime,p->state);p=p->next;}}voidInsertPrio(PCB*in)/*創(chuàng)建優(yōu)先級隊列,規(guī)定優(yōu)先