模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法_第1頁
模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法_第2頁
模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法_第3頁
模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法_第4頁
模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)課程實(shí)驗(yàn)實(shí)驗(yàn)課題:模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法 姓 名: 學(xué) 號: 年級班級:08級信息與計算科學(xué) 專業(yè)方向:08信本軟件方向 指導(dǎo)教師: 實(shí)驗(yàn)時間:2010-11-18 一、實(shí)驗(yàn)名稱:模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法二、實(shí)驗(yàn)?zāi)康模篴、進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。觀察、體會操作系統(tǒng)的進(jìn)程調(diào)度方法,并通過一個簡單的進(jìn)程調(diào)度模擬程序的實(shí)現(xiàn),加深對進(jìn)程控制塊、進(jìn)程隊列、進(jìn)程調(diào)度算法,進(jìn)程切換的理解,并體會和了解各種調(diào)度算法的具體實(shí)施辦法。b、提高實(shí)際動手編程能力,為日后從事軟件開發(fā)工作打下堅實(shí)基礎(chǔ)。三、實(shí)驗(yàn)要求:a、使用模塊化設(shè)計思想來設(shè)計。b、給出主函數(shù)和各個算法函數(shù)的流程圖。c、學(xué)生可按照自身條件,隨意

2、選擇采用的算法,(例如:采用冒泡法編寫程序,實(shí)現(xiàn)短進(jìn)程優(yōu)先調(diào)度的算法)。d、進(jìn)程調(diào)度程序模擬程序只對PCB進(jìn)行相應(yīng)的調(diào)度模擬操作,不需要實(shí)際程序。 四、實(shí)驗(yàn)內(nèi)容及實(shí)驗(yàn)步驟1、實(shí)驗(yàn)內(nèi)容a、設(shè)計進(jìn)程控制塊PCB表結(jié)構(gòu),模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法:FIFO,靜態(tài)優(yōu)先級調(diào)度,時間片輪轉(zhuǎn)調(diào)度,短進(jìn)程優(yōu)先調(diào)度算法,多級反饋隊列調(diào)度。(實(shí)現(xiàn)其中之一個以上)。b、編寫一個進(jìn)程調(diào)度程序模擬程序。模擬程序只對PCB進(jìn)行相應(yīng)的調(diào)度模擬操作,不需要實(shí)際程序。c、由用戶輸入(可通過文件輸入)進(jìn)程名、進(jìn)程狀態(tài)、進(jìn)程運(yùn)行時間和進(jìn)程優(yōu)先級等數(shù)據(jù)。2、實(shí)驗(yàn)步驟1) 打開microsoft vasual C+ 6.0“開始”菜單 所有

3、程序單擊“microsoft vasual C+ 6.0”,進(jìn)入創(chuàng)建頁面。2)單擊標(biāo)題欄“文件”選擇“新建”進(jìn)入界面如下: 選擇工程,win32 console application編輯工程名稱chengkun1存儲在E盤,創(chuàng)建創(chuàng)建新工作區(qū)確定。3)創(chuàng)建文件:單擊標(biāo)題欄“文件”選擇“新建”進(jìn)入界面類似于上面的界面。4)在建好的文件中加入附件中的源程序,并進(jìn)行編譯。五 實(shí)驗(yàn)原始記錄及結(jié)果分析六 參考代碼 #include #include #include const int MAXPCB=100;/定義最大進(jìn)程數(shù) /定義進(jìn)程控制塊PCB結(jié)構(gòu)體類型 typedef struct PCB_Nod

4、e char sName20;/進(jìn)程名int iStatus;/進(jìn)程狀態(tài)(1就緒 2等待 3運(yùn)行) 當(dāng)前程序中暫時全部默認(rèn)為就緒處理int iRunTime; /進(jìn)程運(yùn)行時間(納秒)int iPriority; /進(jìn)程優(yōu)先級(0級最高) int iFinished; /進(jìn)程是否執(zhí)行完成標(biāo)志(1:已完成;0:末完成)int iWaitTime; /進(jìn)程等待時間(納秒)PCB; PCB pcbsMAXPCB;/PCB數(shù)組隊列 int iPCBNum;/實(shí)際進(jìn)程數(shù)char sFileName20;/進(jìn)程流文件名void InitPCB()/PCB初始化函數(shù) int i; for(i=0;iMAXPC

5、B;i+) strcpy(pcbsi.sName,); pcbsi.iStatus=-1; pcbsi.iRunTime=-1; pcbsi.iPriority=-1; pcbsi.iFinished=0; pcbsi.iWaitTime=0; /for(i=0;iMAXPCB;i+)iPCBNum=0; /void InitPCB()int ReadPCBFile()/讀進(jìn)程流文件數(shù)據(jù),存入PCB數(shù)組隊列pcbs,并輸出 FILE *fp; int i; coutsFileName; if(fp=fopen(sFileName,r)=NULL) cout錯誤:進(jìn)程流文件 sFileName

6、打不開,請檢查文件名和路徑!endl; else while(!feof(fp) fscanf(fp,%s %d %d %d,pcbsiPCBNum.sName,&pcbsiPCBNum.iStatus,&pcbsiPCBNum.iRunTime,&pcbsiPCBNum .iPriority); iPCBNum+; /while(!feof(fp) /輸出所讀入的進(jìn)程數(shù)據(jù) coutendl從文件 sFileName 讀入的進(jìn)程數(shù)據(jù):endlendl; cout進(jìn)程名 進(jìn)程狀態(tài) 運(yùn)行時間 優(yōu)先級endl; for(i=0;iiPCBNum;i+) cout pcbsi.sName pcbsi.

7、iStatus pcbsi.iRunTime pcbsi.iPriorityendl; cout進(jìn)程總數(shù):iPCBNumendl; return(1); /if(fp=fopen(sFileName,r)=NULL)return(0); / int ReadPCBFile()void ReSetPCB()/重置PCB完成標(biāo)志、等待時間,以供另一個調(diào)度算法使用,并輸出所讀入的進(jìn)程數(shù)據(jù) int i; /輸出所讀入的進(jìn)程數(shù)據(jù) coutendl-endl; coutendl從文件 sFileName 讀入的進(jìn)程數(shù)據(jù):endlendl; cout進(jìn)程名 進(jìn)程狀態(tài) 運(yùn)行時間 優(yōu)先級endl; for(i=

8、0;iiPCBNum;i+) pcbsi.iFinished=0; pcbsi.iWaitTime=0; cout pcbsi.sName pcbsi.iStatus pcbsi.iRunTime pcbsi.iPriorityendl;cout進(jìn)程總數(shù):iPCBNumendl; /void ReSetPCB()void FIFO() /先進(jìn)先出調(diào)度算法 int i,j; int iSum; /總等待時間/輸出先進(jìn)先出調(diào)度算法執(zhí)行流 coutendl-endl; cout先進(jìn)先出調(diào)度算法執(zhí)行流:endlendl; cout序號 進(jìn)程名 運(yùn)行時間 等待時間endl; iSum=0; for(i=

9、0;iiPCBNum;i+) cout i+1 pcbsi.sName pcbsi.iRunTime pcbsi.iWaitTimeendl; iSum+=pcbsi.iWaitTime;/累加總等待時間 for(j=i+1;jiPCBNum;j+) pcbsj.iWaitTime+=pcbsi.iRunTime; cout總調(diào)度次數(shù):iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void FIFO()void Priority()/優(yōu)先級調(diào)度算法

10、int i,j;int iCurMin;/當(dāng)前最低優(yōu)先級PCB在數(shù)組pcbs中的下標(biāo)int iPassedTime=0;/已經(jīng)過的時間int iSum;/總等待時間int iQueueMAXPCB;/用于存放排序后進(jìn)程數(shù)組下標(biāo)的數(shù)組隊列int iCurPriority=1000;/當(dāng)前最低優(yōu)先級for(i=0;iiPCBNum;i+) /按優(yōu)先級遞增排序PCB,將排序后下標(biāo)的存放在iQueue隊列中。 (選擇排序) iCurPriority=1000; for(j=0;jiPCBNum;j+)if(pcbsj.iFinished=0)&(pcbsj.iPriorityiCurPriority)

11、iCurMin=j; iCurPriority=pcbsj.iPriority; /for(j=0;jiPCBNum;j+)iQueuei=iCurMin; pcbsiCurMin.iFinished=1; pcbsiCurMin.iWaitTime+=iPassedTime; iPassedTime+=pcbsiCurMin.iRunTime; /for(i=0;iiPCBNum;i+) /輸出優(yōu)先級調(diào)度執(zhí)行流 coutendl-endl; cout優(yōu)先級調(diào)度執(zhí)行流:endlendl; cout序號 進(jìn)程名 優(yōu)先級 運(yùn)行時間 等待時間endl; iSum=0; for(i=0;iiPCBNu

12、m;i+)cout i+1pcbsiQueuei.sName pcbsiQueuei.iPrioritypcbsiQueuei.iRunTime pcbsiQueuei.iWaitTimeendl; iSum+=pcbsiQueuei.iWaitTime;/累加總等待時間 cout總調(diào)度次數(shù):iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void Priority()void RR()/時間片輪轉(zhuǎn)調(diào)度算法int i;int iNotEnded=1;

13、/標(biāo)志:不是所有進(jìn)程都已經(jīng)獲得足夠時間片運(yùn)行完成int iNum;/到目前為止末執(zhí)行完的進(jìn)程數(shù)int iRound=0;/輪轉(zhuǎn)周期數(shù)int iSum=0;/總時間片數(shù)float fBlockTime=10;/時間片的長度(納秒)coutendl請輸入時間片的長度(納秒):endlfBlockTime;coutendl-endl;cout時間片輪轉(zhuǎn)調(diào)度執(zhí)行流(時間片的長度為:fBlockTime納秒):endl; while(iNotEnded=1)iNotEnded=0; iNum=0; for(i=0;iiPCBNum;i+)/統(tǒng)計到目前為止末執(zhí)行完的進(jìn)程數(shù)iNumif(pcbsi.iFin

14、ished=0) iNum+; /if(pcbsi.iFinished=0) /for(i=0;i0)iRound+;/累加輪轉(zhuǎn)周期數(shù)coutendl第iRound輪:;for(i=0;iiPCBNum;i+) if(pcbsi.iFinished=0) iNotEnded=1;coutpcbsi.sName ;iSum+;/累加總時間片數(shù) if(pcbsi.iRunTime=fBlockTime*(iRound)/i進(jìn)程在本輪獲得一個時間片后能夠運(yùn)行完成 pcbsi.iFinished=1; /if(pcbsi.iRunTime=fBlockTime*(iRound+1)/if(pcbsi.

15、iFinished=0) /for(i=0;i0) /while(iNotEnded=1)coutendl輪轉(zhuǎn)周期數(shù):iRound總時間片數(shù):iSumendl;coutendl-endl; /void RR() void SPF()/短進(jìn)程優(yōu)先調(diào)度算法 int i,j;int iCurMin;/當(dāng)前最短運(yùn)行時間PCB在數(shù)組pcbs中的下標(biāo) int iPassedTime=0;/已經(jīng)過的時間 int iSum;/總等待時間int iQueueMAXPCB; /用于存放排序后進(jìn)程數(shù)組下標(biāo)的數(shù)組隊列int iCurRunTime;/當(dāng)前最短進(jìn)程運(yùn)行時間for(i=0;iiPCBNum;i+) /按進(jìn)

16、程運(yùn)行時間遞增排序PCB,將排序后下標(biāo)的存放在iQueue隊列中。 (選擇排序) iCurRunTime=1000000; for(j=0;jiPCBNum;j+)if(pcbsj.iFinished=0)&(pcbsj.iRunTimeiCurRunTime) iCurMin=j; iCurRunTime=pcbsj.iRunTime; /for(j=0;jiPCBNum;j+)iQueuei=iCurMin; pcbsiCurMin.iFinished=1; pcbsiCurMin.iWaitTime+=iPassedTime; iPassedTime+=pcbsiCurMin.iRunT

17、ime; /for(i=0;iiPCBNum;i+) /輸出短進(jìn)程優(yōu)先調(diào)度執(zhí)行流 coutendl-endl; cout短進(jìn)程優(yōu)先調(diào)度執(zhí)行流:endlendl; cout序號 進(jìn)程名 運(yùn)行時間 等待時間endl; iSum=0; for(i=0;iiPCBNum;i+)cout i+1 pcbsiQueuei.sName pcbsiQueuei.iRunTime pcbsiQueuei.iWaitTimeendl; iSum+=pcbsiQueuei.iWaitTime;/累加總等待時間 cout總調(diào)度次數(shù):iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時

18、間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void SPF ()void Version()/顯示版權(quán)信息函數(shù) coutendlendl; cout endl; cout 進(jìn)程調(diào)度算法模擬系統(tǒng) endl; cout endl; cout (c)All Right Reserved endl; cout LGY 賴國勇 endl; cout Version 2010 build 2.0 endl; cout endl; coutendlendl; /void Version()void main()/主函數(shù) int iInput;/用戶輸入的整數(shù)以選擇算法 bool bGoOn;/是否繼續(xù)進(jìn)程調(diào)度算法模擬的標(biāo)志char sGoOn1;/用戶輸入是否繼續(xù)進(jìn)程調(diào)度算法模擬的字母:y、Y、N、nVersion();/顯示版權(quán)信息函數(shù)InitPCB();/PCB初始化函數(shù)bGoOn= true;strcpy(sGoOn, );if(ReadPCBFile()=1)/標(biāo)志 讀進(jìn)程流文件數(shù)據(jù)函數(shù) 執(zhí)行是否正確while (bGoOn)coutendl請輸入算法編號(1 OR 2 OR 3 OR 4)選擇進(jìn)程調(diào)度算法:endlendl;co

溫馨提示

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

最新文檔

評論

0/150

提交評論