版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)(JAVA版本)
操作系統(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++語(yǔ)?編程實(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):MSwindowsXP
C++版:VisualStudio2008+MFC
Java版:Eclipse3.4+JavaSwing
3.設(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.PCB信息
主要負(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è)備表,分配、釋放設(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ì)
頁(yè)1
2.調(diào)度算法基本?作流程?意
頁(yè)?
1
進(jìn)程調(diào)度框架
五、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
1.PCB(進(jìn)程基本信息)
類結(jié)構(gòu)
說(shuō)明
1.pid進(jìn)程ID
2.pName進(jìn)程名
/doc/63393269b84ae45c3b358c30.htmlerName進(jìn)程?戶
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)
說(shuō)明
1.sysTime系統(tǒng)時(shí)間
2.isContention當(dāng)前調(diào)度是否為搶占?式
3.prelst就緒隊(duì)列
4.waitlst等待隊(duì)列
5.finishlst完成隊(duì)列
6.executing正在執(zhí)?的進(jìn)程
7.sysDclst系統(tǒng)設(shè)備表
3.Device(系統(tǒng)設(shè)備)
說(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è)備
DeviceReq為進(jìn)程設(shè)備請(qǐng)求,包括請(qǐng)求設(shè)備ID和時(shí)間
七、代碼實(shí)現(xiàn)分析
1.算法分析(各算法過(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è)1
優(yōu)先級(jí)進(jìn)程調(diào)度算法(搶占式)
頁(yè)1
時(shí)間?輪轉(zhuǎn)調(diào)度算法
頁(yè)1
多級(jí)反饋輪轉(zhuǎn)調(diào)度算法(搶占式)
頁(yè)1
2.具體實(shí)現(xiàn)(代碼部分有詳細(xì)注釋)
進(jìn)程的插?
@Override
publicvoidaddPreProc(Processproc){
//按優(yōu)先級(jí)加到就緒隊(duì)列
this.prelst.add(proc);
intloc;
for(loc=prelst.size()-2;loc>=0;loc--){
//?proc?的元素后移?個(gè)位置
Processtemp=prelst.get(loc);
if(proc.Priority
prelst.set(loc+1,temp);
}
else{//將proc放?空閑位置
prelst.set(loc+1,proc);
break;
}
}
if(loc<0){
prelst.set(0,proc);
}
}
取出進(jìn)程
@Override
publicProcessdelPreProc(){
//取優(yōu)先級(jí)最?者,即為第?個(gè)
if(prelst.size()<=0){
returnnull;
}
returnthis.prelst.remove(0);//返回最??個(gè)}
先進(jìn)先出算法的調(diào)度
@Override
publicvoidrun(inttime){
intproctimeslice=1;//假設(shè)處理器指令周期為1個(gè)時(shí)鐘周期
while(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)程
Processproc=this.executing;
//下?次執(zhí)?需要的設(shè)備
DcRequestreq=proc.getNextReq();
if(req!=null&&req.getReqtime()<=proc.runtime){
//進(jìn)程需要請(qǐng)求設(shè)備,?且執(zhí)?到請(qǐng)求時(shí)間
this.addWaitProc(proc);
this.executing=this.delPreProc();
}else{//?資源請(qǐng)求
proc.run(proctimeslice);
if(proc.isFinished()){
//當(dāng)前進(jìn)程是已完成進(jìn)程,放?完成隊(duì)列,取下?進(jìn)程
proc.setFinishTime(
Dispatcher.getBeginTime()
+Dispatcher.getRunTime());
//設(shè)置當(dāng)前執(zhí)?結(jié)束時(shí)間
this.addFinishProc(proc);
this.executing=this.delPreProc();
}
}
}
cessWaitlst(proctimeslice);
++Dispatcher.runTime;
--time;
}
}
優(yōu)先級(jí)搶占算法的調(diào)度
@Override
publicvoidrun(inttime,booleanisContention){
if(!isContention){//?搶占?式
this.run(time);
return;
}
intproctimeslice=1;//假設(shè)處理器時(shí)鐘周期
while(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)程
Processproc=this.executing;
//下?次執(zhí)?需要的設(shè)備
DcRequestreq=proc.getNextReq();
if(req!=null&&req.getReqtime()<=proc.runtime){
//進(jìn)程需要請(qǐng)求設(shè)備,?且執(zhí)?到請(qǐng)求時(shí)間
//放?等待隊(duì)列,取下?進(jìn)程
this.addWaitProc(proc);
this.executing=this.delPreProc();
}else{//?資源請(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();
}
}
if(!this.prelst.isEmpty()){//搶占
Processpreproc=this.prelst.get(0);
if(this.executing.Priority>
preproc.Priority){//按優(yōu)先級(jí)搶占
this.addPreProc(this.executing);
this.executing=this.delPreProc();
}
}
}
cessWaitlst(proctimeslice);
++Dispatcher.runTime;
--time;
}
}
時(shí)間?輪轉(zhuǎn)
@Override
publicvoidrun(inttime){
intproctimeslice=1;//假設(shè)處理器時(shí)鐘周期
while(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)程
Processproc=this.executing;
//下?次執(zhí)?需要的設(shè)備
DcRequestreq=proc.getNextReq();
if(req!=null&&req.getReqtime()<=proc.runtime){
//進(jìn)程需要請(qǐng)求設(shè)備,?且執(zhí)?到請(qǐng)求時(shí)間
//放?等待隊(duì)列,取下?進(jìn)程
this.addWaitProc(proc);
this.executing=this.delPreProc();
}else{//?資源請(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ì)列頭移到隊(duì)列尾部
this.addPreProc(this.executing);
//當(dāng)前執(zhí)?進(jìn)程放?就緒隊(duì)列
this.executing=this.delPreProc();
//從就緒隊(duì)列取下?個(gè)進(jìn)程占?cpu
}
}
}
cessWaitlst(proctimeslice);
++Dispatcher.runTime;
--time;
}
}
多級(jí)反饋輪轉(zhuǎn)搶占?式
@Override
publicvoidrun(inttime,booleanisContention){
intproctimeslice=1;//假設(shè)處理器時(shí)鐘周期
while(true){
--time;
if(this.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)程
Processproc=this.executing;
//下?次執(zhí)?需要的設(shè)備
DcRequestreq=proc.getNextReq();
if(req!=null&&
req.getReqtime()<=proc.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{//?資源請(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();
break;//時(shí)間?
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度林木種植基地林業(yè)科研合作承包合同3篇
- 2024年教育科技產(chǎn)品代工開(kāi)發(fā)合同范本3篇
- 2024版計(jì)算機(jī)技術(shù)援助及服務(wù)協(xié)議版B版
- 二零二五年度建筑用金屬材料采購(gòu)合同范本3篇
- 專屬2024版代理合作協(xié)議模板版B版
- 二零二五年度天然氣管道租賃與運(yùn)營(yíng)合同
- 二零二五版酒店員工福利及獎(jiǎng)勵(lì)計(jì)劃合作合同范本3篇
- 2025年度海洋工程設(shè)備拆除與環(huán)保修復(fù)承包合同3篇
- 二零二五年度農(nóng)民工勞動(dòng)權(quán)益維護(hù)合同范本
- 二零二五奶茶店員工入職保障合同模板
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2024年高考數(shù)學(xué)(理)試卷(全國(guó)甲卷)(空白卷)
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(kù)(附答案)
- 合同簽訂執(zhí)行風(fēng)險(xiǎn)管控培訓(xùn)
- 九宮數(shù)獨(dú)200題(附答案全)
- 人員密集場(chǎng)所消防安全管理培訓(xùn)
- PTW-UNIDOS-E-放射劑量?jī)x中文說(shuō)明書
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 典范英語(yǔ)2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
評(píng)論
0/150
提交評(píng)論