操作系統(tǒng)-進程調(diào)度算法地模擬_第1頁
操作系統(tǒng)-進程調(diào)度算法地模擬_第2頁
操作系統(tǒng)-進程調(diào)度算法地模擬_第3頁
操作系統(tǒng)-進程調(diào)度算法地模擬_第4頁
操作系統(tǒng)-進程調(diào)度算法地模擬_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

./《操作系統(tǒng)》實驗題目進程調(diào)度算法模擬一、實驗?zāi)康耐ㄟ^對進程調(diào)度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀態(tài)和進程調(diào)度過程、調(diào)度算法的理解。二、設(shè)備與環(huán)境〔1硬件設(shè)備:PC機一臺〔2軟件環(huán)境:安裝Windows操作系統(tǒng)或者Linux操作系統(tǒng),并安裝相關(guān)的程序開發(fā)環(huán)境,如C\C++\Java等編程語言環(huán)境。三、實驗容〔1用C、C++、Java語言編程實現(xiàn)對5個進程采用動態(tài)優(yōu)先權(quán)調(diào)度算法進行調(diào)度的過程。數(shù)據(jù)如下:5個進程的到達時刻和服務(wù)時間見下表,忽略I/O以及其它開銷時間,使用動態(tài)優(yōu)先權(quán)算法進行調(diào)度,優(yōu)先權(quán)初始值為100,請輸出各個進程的完成時刻、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間。進程到達時刻服務(wù)時間A03B26C44D65E82〔2每個用來標(biāo)識進程的進程控制塊PCB可用結(jié)構(gòu)來描述,包括以下字段〔用不到的字段可以不定義。進程標(biāo)識數(shù)ID。進程優(yōu)先數(shù)PRIORITY,并規(guī)定優(yōu)先數(shù)越大的進程,其優(yōu)先權(quán)越高。進程已占用CPU時間CPUTIME。進程還需占用的CPU時間ALLTIME。當(dāng)進程運行完畢時,ALLTIME變?yōu)?。進程的阻塞時間STARTBLOCK,表示當(dāng)進程再運行STARTBLOCK個時間片后,進程將進入阻塞狀態(tài)。進程被阻塞的時間BLOCKTIME,表示已阻塞的進程再等待BLOCKTIME個時間片后,將轉(zhuǎn)換成就緒狀態(tài)。進程狀態(tài)STATE。隊列指針NEXT,用來將PCB排成隊列?!?優(yōu)先數(shù)改變的原則:進程在就緒隊列中呆一個時間片,優(yōu)先數(shù)增加1。進程每運行一個時間片,優(yōu)先數(shù)減3?!?為了清楚地觀察每個進程的調(diào)度過程,程序應(yīng)將每個時間片的進程的情況顯示出來,包括正在運行的進程,處于就緒隊列中的進程和處于阻塞隊列中的進程?!?分析程序運行的結(jié)果,談一下自己的認識。四、實驗結(jié)果及分析〔1實驗關(guān)鍵代碼①模擬PCB數(shù)據(jù)結(jié)構(gòu)定義:///枚舉進程的狀態(tài):新建、就緒、執(zhí)行、阻塞、終止enumSTATE_PROCESS{New,Ready,Run,Block,Finish};typedefenumSTATE_PROCESSSTATE;///建立PCB結(jié)構(gòu)體structPCB_NODE{intid;///進程標(biāo)識數(shù)intpriority;///進程優(yōu)先數(shù)intarriveTime;///進程到達時間intcpuTime;///進程已占用CPU時間intallTime;///進程還需占用CPU時間intblockTime;///進程已阻塞時間STATEstate;///進程狀態(tài)structPCB_NODE*prev;///PCB前指針structPCB_NODE*next;///PCB后指針};typedefstructPCB_NODEPCB;②模擬進程隊列操作函數(shù)定義:///進程入列voidqueuePush<PCB*process,PCB*queueHead>///進程出列voidqueuePop<PCB*process,PCB*queueHead>///查看隊列中進程信息voidqueueWalk<PCB*queueHead>③模擬就緒隊列操作函數(shù)定義:///進程插入到就緒隊列voidreadyQueuePush<PCB*process>///優(yōu)先數(shù)最大的進程出列PCB*readyQueuePop<>///每個時間片更新就緒隊列中的進程信息voidreadyQueueUpdate<inttimeSlice,PCB*pcb>///返回就緒隊列最大優(yōu)先數(shù)的值intreadyMaxPriority<>///查看就緒隊列中的進程信息voidreadyQueueWalk<>④模擬阻塞隊列操作函數(shù)定義:///進程插入到阻塞隊列voidblockQueuePush<PCB*process>///優(yōu)先數(shù)最大的進程出列PCB*blockQueuePop<>///每個時間片更新阻塞隊列中進程的信息voidblockQueueUpdate<>///查看阻塞隊列中的進程信息voidblockQueueWalk<>⑤模擬動態(tài)優(yōu)先權(quán)進程調(diào)度函數(shù)定義:///初始化進程PCB數(shù)據(jù),返回PCB頭指針PCB*initData<>///模擬CPU執(zhí)行1個時間片的操作voidcpuWord<PCB*cpuProcess>⑥主函數(shù)關(guān)鍵代碼:inttimeSlice=0;///模擬CPU時間片intcpuBusy=0;///模擬CPU狀態(tài)PCB*cpuProcess=NULL;///當(dāng)前CPU執(zhí)行的進程PCB*pHead,*pro;///進程PCB頭指針pHead=initData<>;///初始化進程PCB,返回進程頭指針pro=pHead+1;///pro指向PCB中第一個進程readyQueueUpdate<timeSlice,pro>;///根據(jù)進程到達時間將新建進程加入緒隊列///模擬動態(tài)優(yōu)先權(quán)進程調(diào)度while<true>{if<readyQueueNum==0&&blockQueueNum==0&&cpuBusy==0>{printf<"就緒隊列、阻塞隊列和CPU當(dāng)前無進程運行,退出\n">;break;}///endifif<cpuBusy==0>{///CPU空閑,選擇一個進程進入CPUif<readyQueueNum>0>{///選擇就緒隊列優(yōu)先級最高的進程作為CPU運行進程cpuProcess=readyQueuePop<>;}else{///就緒隊列中沒有進程,改為選擇阻塞隊列優(yōu)先級最高的進程cpuProcess=blockQueuePop<>;}cpuProcess->cpuTime=0;///設(shè)置當(dāng)前運行進程占用CPU時間cpuProcess->state=Run;///設(shè)置當(dāng)前運行進程的狀態(tài)cpuBusy=1;///設(shè)置CPU當(dāng)前狀態(tài)為忙}///endiftimeSlice++;///當(dāng)前時間片加1printf<"\n第%d個時間片后:\n",timeSlice>;cpuWord<cpuProcess>;///模擬CPU執(zhí)行1個時間片的操作if<cpuProcess->allTime==0>{///若當(dāng)前執(zhí)行進程還需CPU時間片為0cpuProcess->state=Finish;///設(shè)置當(dāng)前進程狀態(tài)為終止free<cpuProcess>;///釋放該進程的PCB存空間cpuBusy=0;///CPU狀態(tài)設(shè)置為空閑}///endif///更新就緒隊列和阻塞隊列中的進程信息blockQueueUpdate<>;readyQueueUpdate<timeSlice,pro>;///查看就緒隊列和阻塞隊列的進程信息readyQueueWalk<>;blockQueueWalk<>;if<cpuBusy==1&&readyQueueNum>0&&cpuProcess->priority<readyMaxPriority<>>{blockQueuePush<cpuProcess>;///需搶占CPU,當(dāng)前執(zhí)行的進程調(diào)入阻塞隊列cpuProcess=readyQueuePop<>;///從就緒隊列中選擇優(yōu)先級最高的進程運行}///endif}printf<"\n模擬進程動態(tài)優(yōu)先權(quán)調(diào)度算法結(jié)束.\n">;return0;動態(tài)優(yōu)先權(quán)調(diào)度算法流程圖〔2實驗結(jié)果①第1個時間片后:②第2個時間片后:③第3個時間片后:④第4個時間片后:⑤第5個時間片后:⑥第6個時間片后:⑦第7個時間片后:⑧第8個時間片后:⑨第9個時間片后:⑩第10個時間片后:?第11個時間片后:?第12個時間片后:?第13個時間片后:?第14個時間片后:?第15個時間片后:?第16個時間片后:?第17個時間片后:?第18個時間片后:?第19個時間片后:?第20個時間片后:實驗結(jié)果分析①調(diào)度算法開始之前進程PCB信息為:②調(diào)度算法結(jié)束之后進程PCB信息為:③調(diào)度算法分析:進程ID到達時間服務(wù)時間結(jié)束時間周轉(zhuǎn)時間帶權(quán)周轉(zhuǎn)時間00310103.312620183.024416123.036518122.44821352.5〔4實驗心得通過進程動態(tài)優(yōu)先權(quán)調(diào)度算法的模擬,對進程的運行狀態(tài),進程PCB數(shù)據(jù)結(jié)構(gòu),進程調(diào)度算法有了更深的理解。動態(tài)優(yōu)先權(quán)調(diào)度算法為了防止高優(yōu)先級進程無休止地運行下去,調(diào)度程序在每個時鐘滴答〔即每個時鐘中斷降低當(dāng)前進程的優(yōu)先級。如果這個動作導(dǎo)致該進程的優(yōu)先級低于次高優(yōu)先級的進程,則進行進程切換,可以避免低優(yōu)先級進程長時間的饑餓等待。此外,優(yōu)先級可以由系統(tǒng)動態(tài)確定。例如有些進程為I/O密集型,其多數(shù)時間用來等待I/O結(jié)束。當(dāng)這樣的進程需要CPU時,應(yīng)立即分配給它CPU,以便啟動下一個I/O請求,這樣就可以在另一個進程計算的同時執(zhí)行I/O操作。使這類I/O密集型進程長時間等待只會造成它無謂地長時間占用存。使I/O密集型進程獲得較好服務(wù)的一種簡單算法是,將其優(yōu)先級設(shè)為1/f,f為該進程在上一時間片中所占的部分。如果一個在其50ms的時間片中只使用1ms的進程的優(yōu)先級為50,而在阻塞之前用掉25ms的進程優(yōu)先級為2,使用掉全部時間片的進程優(yōu)先級為1。這樣,可以很方便地將一組進程按優(yōu)先級分成若干類,并在各類之間采用優(yōu)先級調(diào)度,而在各類進程的部采用輪轉(zhuǎn)調(diào)度。如下圖為一個具有4類優(yōu)先級的系統(tǒng),其調(diào)度算法如下:只要存在優(yōu)先級為第4類的可

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論