模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)JAVA版本_第1頁(yè)
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)JAVA版本_第2頁(yè)
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)JAVA版本_第3頁(yè)
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)JAVA版本_第4頁(yè)
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)JAVA版本_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度子系統(tǒng)模擬實(shí)現(xiàn)一、設(shè)計(jì)內(nèi)容及意義1. 課程設(shè)計(jì)內(nèi)容使用java語(yǔ)言或C+砒言編程實(shí)現(xiàn)模擬操作系統(tǒng)進(jìn)程調(diào)度子系統(tǒng)的基本 功能;實(shí)現(xiàn)先來(lái)先服務(wù)、時(shí)間片輪轉(zhuǎn)、多級(jí)反饋輪轉(zhuǎn)法對(duì)進(jìn)程進(jìn)行的調(diào) 度過(guò)程;掌握各個(gè)調(diào)度算法的特點(diǎn)。2. 該課程設(shè)計(jì)意義理解進(jìn)程調(diào)度的概念深入了解進(jìn)程控制塊的功能、進(jìn)程的創(chuàng)建、刪除以及進(jìn)程各個(gè)狀態(tài) 間的轉(zhuǎn)換過(guò)程從實(shí)用的角度對(duì)數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容進(jìn)行更深入理解和更熟練的 應(yīng)用進(jìn)一步練習(xí)對(duì)Java及C+語(yǔ)言的熟練使用二、設(shè)計(jì)方案1. 硬件環(huán)境PC一臺(tái)2. 開(kāi)發(fā)語(yǔ)言及工具操作系統(tǒng):MS windows XPC+城:Visual Studio 2008 + MFCJa

2、va 版:Eclipse 3.4 + Java Swing3. 設(shè)計(jì)思路系統(tǒng)設(shè)備表用丁存取調(diào)度過(guò)程中進(jìn)程可申請(qǐng)的資源進(jìn)程控制塊主要負(fù)責(zé)具體進(jìn)程信息的保存等待隊(duì)列、就緒隊(duì)列、完成隊(duì)列用丁保存執(zhí)行過(guò)程的狀態(tài)信息 進(jìn)程調(diào)度進(jìn)程(類、線程)在就緒隊(duì)列與等待隊(duì)列之間進(jìn)行調(diào)度 主界面顯示調(diào)度過(guò)程的三個(gè)隊(duì)列的狀態(tài)信息用戶創(chuàng)建進(jìn)程放入就緒隊(duì)列等待調(diào)度三、功能模塊設(shè)計(jì)1. 進(jìn)程狀態(tài)轉(zhuǎn)換2. PCEB 息主要負(fù)責(zé)保存各進(jìn)程基本信息提供外部狀態(tài)設(shè)置和讀取接口3. 系統(tǒng)設(shè)備類系統(tǒng)設(shè)備的基本信息設(shè)備狀態(tài)設(shè)置、讀取接口4. 調(diào)度類向就緒隊(duì)列添加新創(chuàng)建進(jìn)程從就緒隊(duì)列取相應(yīng)進(jìn)程執(zhí)行將執(zhí)行阻塞進(jìn)程放入等待隊(duì)列檢測(cè)系統(tǒng)設(shè)備表,分

3、配、釋放設(shè)備、喚醒等待進(jìn)程執(zhí)行完成程序放入完成隊(duì)列(僅為保存狀態(tài),非系統(tǒng)部分)提供獲取執(zhí)行狀態(tài)的外部接口,即各個(gè)隊(duì)列數(shù)據(jù)的獲取5. 視圖類提供用戶操作接口(調(diào)度策略選擇、進(jìn)程創(chuàng)建)顯示各隊(duì)列狀態(tài)信息創(chuàng)建進(jìn)程調(diào)度類線程,調(diào)用調(diào)度類的接口四、程序總控流程圖1. 用戶接口、調(diào)度算法、進(jìn)程狀態(tài)轉(zhuǎn)換關(guān)系示意系統(tǒng)總體設(shè)計(jì)初始化系統(tǒng)r創(chuàng)建進(jìn)程調(diào)度進(jìn)程>初始化系統(tǒng)設(shè)備表*用戶選擇調(diào)度策略»啟動(dòng)進(jìn)程調(diào)度進(jìn)程根據(jù)具體算法調(diào)度進(jìn)程設(shè)置進(jìn)程基本信息>添加設(shè)備請(qǐng)求>創(chuàng)建進(jìn)程加入就緒隊(duì)列<7頁(yè)面i7 / 242.調(diào)度算法基本工作流程示意進(jìn)程調(diào)度框架/用戶選擇進(jìn)程五、1.頁(yè)面i數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

4、PCB(進(jìn)程基本信息)類結(jié)構(gòu)ProcessPCB-Pidint-PnameString-userNameString-Priotityint-subtimeint-totalTimeint-runTimeint-DcRequestLstList<DeviceReq>說(shuō)明1.pid進(jìn)程ID2.pNameft程名3.userName®程用戶4.priority進(jìn)程優(yōu)先級(jí)5.subtime進(jìn)程提交時(shí)間6.totalTime進(jìn)程需要執(zhí)仃的總時(shí)間7.runtime進(jìn)程已經(jīng)運(yùn)行時(shí)間8.dcReqlst當(dāng)前進(jìn)程所需要的設(shè)備請(qǐng)求表2. Dispatcher (進(jìn)程調(diào)度進(jìn)程)類結(jié)構(gòu)Disp

5、atcher-Systimeint-isContentionboolean-preLstList<Process>-waitLstList<Process>-finishLstList<Process>-executingProcess-sysDcLstList<Process>說(shuō)明1. sysTime系統(tǒng)時(shí)間2. isContention當(dāng)前調(diào)度是否為搶占方式3. prelst就緒隊(duì)列4. waitlst 等待隊(duì)歹U5. finishlst完成隊(duì)歹U6. executing正在執(zhí)行的進(jìn)程7. sysDclst系統(tǒng)設(shè)備表3. Device (系統(tǒng)

6、設(shè)備)類結(jié)構(gòu)Device-dcIdint-dcTypeint-dcDiscString-dcTimeint-dcPidint-dcleftTimeint說(shuō)明1. dcid設(shè)備標(biāo)識(shí)2. dcType設(shè)備類型3. dcTime該設(shè)備一次I/O服務(wù)需要時(shí)間4. dcPid使用該設(shè)備的進(jìn)程5. dcDisc設(shè)備描述6. dcLefTime設(shè)備剩余服務(wù)時(shí)間六、程序代碼結(jié)構(gòu)1.類層次關(guān)系2.詳細(xì)說(shuō)明Dispatcher定義進(jìn)程調(diào)度進(jìn)程的基本信息和接口FIFODispatcher、PLevelDispatcher、RRDispatcher、MRDispatcher分別實(shí)現(xiàn)相應(yīng)的調(diào)度算法Device為系統(tǒng)設(shè)備

7、DeviceReq為進(jìn)程設(shè)備請(qǐng)求,包括請(qǐng)求設(shè)備ID和時(shí)間七、1.代碼實(shí)現(xiàn)分析算法分析(各算法過(guò)程見(jiàn)下流程圖)設(shè)備的分配釋放先來(lái)先服務(wù)優(yōu)先級(jí)調(diào)度時(shí)間片輪轉(zhuǎn)多級(jí)反饋輪轉(zhuǎn)設(shè)備分配釋放頁(yè)面1先進(jìn)先出進(jìn)程調(diào)度算法頁(yè)面18 / 24時(shí)間片輪轉(zhuǎn)調(diào)度算法頁(yè)面110 / 24多級(jí)反饋輪轉(zhuǎn)調(diào)度算法(搶占式)頁(yè)面111 / 242.具體實(shí)現(xiàn)(代碼部分有詳細(xì)注釋) 進(jìn)程的插入Overridepublic void addPreProc(Process proc) (/按優(yōu)先級(jí)加到就緒隊(duì)列this .prelst.add(proc);int loc;for (loc=prelst.size()-2; loc>=0

8、; loc-)/比proc大的元素后移一個(gè)位置Process temp = prelst.get(loc);if (proc.Priority<temp.Priority) prelst.set( loc+1, temp);else /將proc放入空閑位置prelst.set( loc+1, proc); break ;if (loc<0)prelst.set(0, proc); 取出進(jìn)程O(píng)verridepublic Process delPreProc() /取優(yōu)先級(jí)最高者,即為第一個(gè)if (prelst.size()<=0)return null ;return thi

9、s .prelst.remove(0);/返回最小一個(gè)先進(jìn)先出算法的調(diào)度Overridepublic void run( int time) int proctimeslice = 1;while (time>0)if (this .executing= this .executing =else Process proc =/假設(shè)處理器指令周期為1個(gè)時(shí)鐘周期/處理機(jī)運(yùn)行time時(shí)間null )/沒(méi)有進(jìn)程占用處理機(jī)則空轉(zhuǎn)this .delPreProc();/執(zhí)行當(dāng)前進(jìn)程this .executing;下一次執(zhí)行需要的設(shè)備DcRequest req = proc.getNextReq()

10、;if (req!= null && req.getReqtime()<=proc.runtime)/進(jìn)程需要請(qǐng)求設(shè)備,而且執(zhí)行到請(qǐng)求時(shí)間this .addWaitProc(proc);31 / 24this .executing = this .delPreProc();) else ( /無(wú)資源請(qǐng)求proc.run(proctimeslice); if (proc.isFinished()(/當(dāng)前進(jìn)程是已完成進(jìn)程,放入完成隊(duì)列 ,取下一進(jìn)程proc.setFinishTime(Dispatcher. getBeginTime ()+ Dispatcher. getRu

11、nTime ();/設(shè)置當(dāng)前執(zhí)行結(jié)束時(shí)間this .addFinishProc(proc);this .executing = this .delPreProc();)super .processWaitlst(proctimeslice);+Dispatcher. runTime -time;)優(yōu)先級(jí)搶占算法的調(diào)度Overridepublic void run( int time,if (!isContention)this .run(time);return ;)int proctimeslice = 1;while (time>0)if (this .executing=this

12、.executing =)else Process proc =boolean isContention) /非搶占方式this/下一次執(zhí)行需要的設(shè)備/假設(shè)處理器時(shí)鐘周期/處理機(jī)運(yùn)行time時(shí)間null )/沒(méi)有進(jìn)程占用處理機(jī)則空轉(zhuǎn)this .delPreProc();/執(zhí)行當(dāng)前進(jìn)程.executing;DcRequest req = proc.getNextReq();if (req!= null && req.getReqtime()<=proc.runtime)/進(jìn)程需要請(qǐng)求設(shè)備,而且執(zhí)行到請(qǐng)求時(shí)間/放入等待隊(duì)列,取下一進(jìn)程this .addWaitProc(pro

13、c);this .executing = this .delPreProc();) else /無(wú)資源請(qǐng)求proc.run(proctimeslice);if (proc.isFinished()/當(dāng)前進(jìn)程是已完成進(jìn)程,放入完成隊(duì)列 ,取下一進(jìn)程設(shè)置當(dāng)前執(zhí)行結(jié)束時(shí)間if(!thisthisDispatcher. getRunTime ();.addFinishProc(proc);.executing =this .delPreProc();this .prelst.isEmpty() /Process preproc =this搶占.prelst.get(0);if(this .execut

14、ing.Priority>preproc.Priority)this .addPreProc(this/按優(yōu)先級(jí)搶占 .executing);this .executing =this.delPreProc();proc.setFinishTime(/Dispatcher. getBeginTime ()+cessWaitlst(proctimeslice);+Dispatcher. runTime ;-time;)時(shí)間片輪轉(zhuǎn)Overridepublic void run( int time) int proctimeslice = 1;/假設(shè)處理器時(shí)鐘周期while

15、(time>0)/處理機(jī)運(yùn)行time時(shí)間if (this .executing= null )/沒(méi)有進(jìn)程占用處理機(jī)則空轉(zhuǎn)this .executing = this .delPreProc();)else /執(zhí)行當(dāng)前進(jìn)程Process proc = this .executing;/下一次執(zhí)行需要的設(shè)備DcRequest req = proc.getNextReq();if (req!= null && req.getReqtime()<=proc.runtime)/進(jìn)程需要請(qǐng)求設(shè)備,而且執(zhí)行到請(qǐng)求時(shí)間/放入等待隊(duì)列,取下一進(jìn)程this .addWaitProc(p

16、roc);this .executing = this .delPreProc();) else /無(wú)資源請(qǐng)求proc.run(proctimeslice);if (proc.isFinished()/當(dāng)前進(jìn)程是已完成進(jìn)程,放入完成隊(duì)列 ,取下一進(jìn)程 proc.setFinishTime(/設(shè)置當(dāng)前執(zhí)行結(jié)束時(shí)間Dispatcher. getBeginTime ()+Dispatcher. getRunTime ();this .addFinishProc(proc);this .executing = this .delPreProc(); else /如果當(dāng)前時(shí)間片沒(méi)有執(zhí)行完,則從就緒隊(duì)列頭

17、移到隊(duì)列尾部this .addPreProc( this .executing);/當(dāng)前執(zhí)行進(jìn)程放入就緒隊(duì)列this .executing = this .delPreProc();/從就緒隊(duì)列取下一個(gè)進(jìn)程占用cpusuper .processWaitlst(proctimeslice);+Dispatcher. runTime ;-time;多級(jí)反饋輪轉(zhuǎn)搶占方式Overridepublic void run( int time, boolean isContention) int proctimeslice = 1;/假設(shè)處理器時(shí)鐘周期while (true )-time;if (this

18、.executing= null )/沒(méi)有進(jìn)程占用處理機(jī)則空轉(zhuǎn)this .executing = this .delPreProc();if (this .executing!= null ) /每調(diào)度一次重新計(jì)算時(shí)間片time = this .executing.getPriority()*3+1; break ; else /執(zhí)行當(dāng)前進(jìn)程Process proc = this .executing;/下一次執(zhí)行需要的設(shè)備DcRequest req = proc.getNextReq(); if (req!= null && req.getReqtime()<=proc

19、.runtime)/進(jìn)程需要請(qǐng)求設(shè)備,而且執(zhí)行到請(qǐng)求時(shí)間/ TODO放入等待隊(duì)列,取下一進(jìn)程 this .addWaitProc(proc);this .executing = this .delPreProc();break ; /時(shí)間片未完,設(shè)備請(qǐng)求,重新調(diào)度 else /無(wú)資源請(qǐng)求proc.run(proctimeslice); if (proc.isFinished()if(!super/當(dāng)前進(jìn)程是已完成進(jìn)程,proc.setFinishTime(/放入完成隊(duì)列,取下一進(jìn)程設(shè)置當(dāng)前執(zhí)行結(jié)束時(shí)間) elseifgetBeginTime()+getRunTime (); this .add

20、FinishProc(proc); this .executing = this .delPreProc(); break ; / 時(shí)間片沒(méi)用完,程序執(zhí)行完,下一次調(diào)度 (time<=0)/時(shí)間片用完/當(dāng)前執(zhí)行進(jìn)程放入就緒隊(duì)列 this .addPreProc(proc); /從就緒隊(duì)列取下一個(gè)進(jìn)程占用cpuDispatcher.Dispatcher.this .executing = break ;/時(shí)間片用完,程序未執(zhí)行完,下一次調(diào)度this .delPreProc();/搶占ifthis .prelst.isEmpty()rocess preproc =this .prelst.g

21、et(0);(this .executing.Priority>(preproc.Priority+1)/取出時(shí)優(yōu)先級(jí)已經(jīng)降一級(jí).executing.setPriority(thisthisthis/恢復(fù)優(yōu)先級(jí),放入當(dāng)前進(jìn)程被取出隊(duì)列尾部this .executing.Priority+1);.addPreProc( this .executing);.executing = this .delPreProc();break ;/搶占,下一次調(diào)度.processWaitlst(proctimeslice);+Dispatcher.runTime ;八、測(cè)試結(jié)果1.先來(lái)先服務(wù)申請(qǐng)資源及阻塞

22、3fOiitch用尸;User調(diào)ssm: t樣元服寮2就堵隊(duì)列進(jìn)程名:進(jìn)程汩0Prosressl User進(jìn)程名用戶名 優(yōu)先綴00提交時(shí)問(wèn)已運(yùn)行總時(shí)間12Progress執(zhí)行時(shí)間:等待隊(duì)列進(jìn)程ID正在執(zhí)行壽時(shí)閭總時(shí)間總時(shí)間進(jìn)程心完成隊(duì)列進(jìn)程1口23憂先綴;中間狀態(tài)執(zhí)行結(jié)果2.優(yōu)先級(jí)按優(yōu)先順序放入就緒隊(duì)列優(yōu)先級(jí)搶占及執(zhí)行結(jié)果,process dispatcher用F ; User重置系藐)進(jìn)程ID進(jìn)程名用戶名憂先皺提交時(shí)間已運(yùn)行總時(shí)間Progress 4*執(zhí)行時(shí)間;就緒隊(duì)列進(jìn)程名;等待隊(duì)列25岫D謎程名 用戶名 優(yōu)先畿KWil ' II交時(shí)閽 巳話行 總時(shí)間憂先級(jí);進(jìn)程ID進(jìn)程名用戶名情

23、先綴提交時(shí)間完成時(shí)間總時(shí)間 _13Progress 4User0164125*2Progress 3User1048231Proaress?User3055,正在執(zhí)行進(jìn)程ID進(jìn)程名用戶名坑先綴提壹時(shí)間已運(yùn)行怠時(shí)間 .克威隊(duì)列(創(chuàng)建進(jìn)程)(暫停)C退廠)3.時(shí)間片輪轉(zhuǎn)測(cè)試數(shù)據(jù)用尸;User調(diào)度策略;f刁(確置(重置系藐)process dispatcher進(jìn)程ID進(jìn)程名用戶名憂先綴提交時(shí)間己運(yùn)行總時(shí)間Progress30ProgresslUser00011fflKProgress2Us&r00023C2Proaress3User00012,執(zhí)仃時(shí)向:眥蠟隊(duì)列進(jìn)程名:芫成隊(duì)列進(jìn)程心 進(jìn)程名用尸名憂先綴提交時(shí)同完成曠間總時(shí)間(申曲源)等待隊(duì)列1 7岫D譜程名用戶名優(yōu)先坂琴待資源撮交時(shí)閽 已運(yùn)行總時(shí)閭憂先綴:項(xiàng)建進(jìn)程)進(jìn)程ID進(jìn)程名用戶名憂先緩提交時(shí)間已運(yùn)行正在執(zhí)行總時(shí)間(靠照調(diào)度)中間過(guò)程測(cè)試結(jié)果4.多級(jí)反饋輪轉(zhuǎn)測(cè)試數(shù)據(jù)搶占測(cè)試執(zhí)行狀態(tài)執(zhí)行結(jié)果九、設(shè)計(jì)過(guò)程難點(diǎn)1.遇到的問(wèn)題1)調(diào)度時(shí)機(jī)決策2)迭代器的破壞3)多級(jí)反饋隊(duì)列兼容4)設(shè)備分配、釋放5)外部統(tǒng)一接口,類型兼容、上轉(zhuǎn)型對(duì)象6)進(jìn)程的搶占2. 解決方法1)設(shè)置進(jìn)程相應(yīng)狀態(tài)(空轉(zhuǎn)、結(jié)束、阻塞、時(shí)間片用完、搶斷)2)修改循環(huán)嵌套層次,或標(biāo)記迭代位置、跳出該層循環(huán)重構(gòu)迭代器

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論