資源描述:
《時間片輪轉算法和優(yōu)先級調度算法 c語言模擬實現(xiàn) 收藏》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、時間片輪轉算法和優(yōu)先級調度算法C語言模擬實現(xiàn)收藏一、目的和要求進程調度是處理機管理的核心內容。本實驗要求用高級語言編寫模擬進程調度程序,以便加深理解有關進程控制快、進程隊列等概念,并體會和了解優(yōu)先數(shù)算法和時間片輪轉算法的具體實施辦法。二、實驗內容1.設計進程控制塊PCB的結構,通常應包括如下信息:進程名、進程優(yōu)先數(shù)(或輪轉時間片數(shù))、進程已占用的CPU時間、進程到完成還需要的時間、進程的狀態(tài)、當前隊列指針等。??2.編寫兩種調度算法程序:優(yōu)先數(shù)調度算法程序循環(huán)輪轉調度算法程序3.按要求輸出結果。三、提示和
2、說明分別用兩種調度算法對伍個進程進行調度。每個進程可有三種狀態(tài);執(zhí)行狀態(tài)(RUN)、就緒狀態(tài)(READY,包括等待狀態(tài))和完成狀態(tài)(FINISH),并假定初始狀態(tài)為就緒狀態(tài)。(一)進程控制塊結構如下:??????NAME——進程標示符??????PRIO/ROUND——進程優(yōu)先數(shù)/進程每次輪轉的時間片數(shù)(設為常數(shù)2)??????CPUTIME——進程累計占用CPU的時間片數(shù)??????NEEDTIME——進程到完成還需要的時間片數(shù)??????STATE——進程狀態(tài)??????NEXT——鏈指針注:????
3、1.為了便于處理,程序中進程的的運行時間以時間片為單位進行計算;????2.各進程的優(yōu)先數(shù)或輪轉時間片數(shù),以及進程運行時間片數(shù)的初值,均由用戶在程序運行時給定。(二)進程的就緒態(tài)和等待態(tài)均為鏈表結構,共有四個指針如下:??????RUN——當前運行進程指針??????READY——就需隊列頭指針??????TAIL——就需隊列尾指針??????FINISH——完成隊列頭指針(三)程序說明????1.在優(yōu)先數(shù)算法中,進程優(yōu)先數(shù)的初值設為:??????50-NEEDTIME每執(zhí)行一次,優(yōu)先數(shù)減1,CPU時間片
4、數(shù)加1,進程還需要的時間片數(shù)減1。在輪轉法中,采用固定時間片單位(兩個時間片為一個單位),進程每輪轉一次,CPU時間片數(shù)加2,進程還需要的時間片數(shù)減2,并退出CPU,排到就緒隊列尾,等待下一次調度。????2.程序的模塊結構提示如下:整個程序可由主程序和如下7個過程組成:(1)INSERT1——在優(yōu)先數(shù)算法中,將尚未完成的PCB按優(yōu)先數(shù)順序插入到就緒隊列中;(2)INSERT2——在輪轉法中,將執(zhí)行了一個時間片單位(為2),但尚未完成的進程的PCB,插到就緒隊列的隊尾;(3)FIRSTIN——調度就緒隊列
5、的第一個進程投入運行;(4)PRINT——顯示每執(zhí)行一次后所有進程的狀態(tài)及有關信息。(5)CREATE——創(chuàng)建新進程,并將它的PCB插入就緒隊列;(6)PRISCH——按優(yōu)先數(shù)算法調度進程;(7)ROUNDSCH——按時間片輪轉法調度進程。主程序定義PCB結構和其他有關變量。(四)運行和顯示程序開始運行后,首先提示:請用戶選擇算法,輸入進程名和相應的NEEDTIME值。每次顯示結果均為如下5個字段:??????name??cputime??needtime??priority??state注:????1.
6、在state字段中,"R"代表執(zhí)行態(tài),"W"代表就緒(等待)態(tài),"F"代表完成態(tài)。2.應先顯示"R"態(tài)的,再顯示"W"態(tài)的,再顯示"F"態(tài)的。??3.在"W"態(tài)中,以優(yōu)先數(shù)高低或輪轉順序排隊;在"F"態(tài)中,以完成先后順序排隊。viewplaincopytoclipboardprint?1./*??2.操作系統(tǒng)實驗之時間片輪轉算法和優(yōu)先級調度算法??3.By?Visual?C++?6.0??4.*/???#include????#include????#include?
7、???typedef?struct?node???{?????char?name[20];????/*進程的名字*/?????int?prio;?????/*進程的優(yōu)先級*/?????int?round;?????/*分配CPU的時間片*/?????int?cputime;????/*CPU執(zhí)行時間*/?????int?needtime;????/*進程執(zhí)行所需要的時間*/?????char?state;?????/*進程的狀態(tài),W——就緒態(tài),R——執(zhí)行態(tài),F(xiàn)——完成態(tài)*/?????i
8、nt?count;?????/*記錄執(zhí)行的次數(shù)*/?????struct?node?*next;???/*鏈表指針*/???}PCB;???PCB?*ready=NULL,*run=NULL,*finish=NULL;?/*定義三個隊列,就緒隊列,執(zhí)行隊列和完成隊列*/???int?num;???void?GetFirst();????/*從就緒隊列取得第一個節(jié)點*/???void?Output();?????/*輸出隊列信息