




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統課程實驗實驗課題:模擬實現進程調度算法 姓 名: 學 號: 年級班級:08級信息與計算科學 專業方向:08信本軟件方向 指導教師: 實驗時間:2010-11-18 一、實驗名稱:模擬實現進程調度算法二、實驗目的:a、進程調度是處理機管理的核心內容。觀察、體會操作系統的進程調度方法,并通過一個簡單的進程調度模擬程序的實現,加深對進程控制塊、進程隊列、進程調度算法,進程切換的理解,并體會和了解各種調度算法的具體實施辦法。b、提高實際動手編程能力,為日后從事軟件開發工作打下堅實基礎。三、實驗要求:a、使用模塊化設計思想來設計。b、給出主函數和各個算法函數的流程圖。c、學生可按照自身條件,隨意
2、選擇采用的算法,(例如:采用冒泡法編寫程序,實現短進程優先調度的算法)。d、進程調度程序模擬程序只對PCB進行相應的調度模擬操作,不需要實際程序。 四、實驗內容及實驗步驟1、實驗內容a、設計進程控制塊PCB表結構,模擬實現進程調度算法:FIFO,靜態優先級調度,時間片輪轉調度,短進程優先調度算法,多級反饋隊列調度。(實現其中之一個以上)。b、編寫一個進程調度程序模擬程序。模擬程序只對PCB進行相應的調度模擬操作,不需要實際程序。c、由用戶輸入(可通過文件輸入)進程名、進程狀態、進程運行時間和進程優先級等數據。2、實驗步驟1) 打開microsoft vasual C+ 6.0“開始”菜單 所有
3、程序單擊“microsoft vasual C+ 6.0”,進入創建頁面。2)單擊標題欄“文件”選擇“新建”進入界面如下: 選擇工程,win32 console application編輯工程名稱chengkun1存儲在E盤,創建創建新工作區確定。3)創建文件:單擊標題欄“文件”選擇“新建”進入界面類似于上面的界面。4)在建好的文件中加入附件中的源程序,并進行編譯。五 實驗原始記錄及結果分析六 參考代碼 #include #include #include const int MAXPCB=100;/定義最大進程數 /定義進程控制塊PCB結構體類型 typedef struct PCB_Nod
4、e char sName20;/進程名int iStatus;/進程狀態(1就緒 2等待 3運行) 當前程序中暫時全部默認為就緒處理int iRunTime; /進程運行時間(納秒)int iPriority; /進程優先級(0級最高) int iFinished; /進程是否執行完成標志(1:已完成;0:末完成)int iWaitTime; /進程等待時間(納秒)PCB; PCB pcbsMAXPCB;/PCB數組隊列 int iPCBNum;/實際進程數char sFileName20;/進程流文件名void InitPCB()/PCB初始化函數 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()/讀進程流文件數據,存入PCB數組隊列pcbs,并輸出 FILE *fp; int i; coutsFileName; if(fp=fopen(sFileName,r)=NULL) cout錯誤:進程流文件 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) /輸出所讀入的進程數據 coutendl從文件 sFileName 讀入的進程數據:endlendl; cout進程名 進程狀態 運行時間 優先級endl; for(i=0;iiPCBNum;i+) cout pcbsi.sName pcbsi.
7、iStatus pcbsi.iRunTime pcbsi.iPriorityendl; cout進程總數:iPCBNumendl; return(1); /if(fp=fopen(sFileName,r)=NULL)return(0); / int ReadPCBFile()void ReSetPCB()/重置PCB完成標志、等待時間,以供另一個調度算法使用,并輸出所讀入的進程數據 int i; /輸出所讀入的進程數據 coutendl-endl; coutendl從文件 sFileName 讀入的進程數據:endlendl; cout進程名 進程狀態 運行時間 優先級endl; for(i=
8、0;iiPCBNum;i+) pcbsi.iFinished=0; pcbsi.iWaitTime=0; cout pcbsi.sName pcbsi.iStatus pcbsi.iRunTime pcbsi.iPriorityendl;cout進程總數:iPCBNumendl; /void ReSetPCB()void FIFO() /先進先出調度算法 int i,j; int iSum; /總等待時間/輸出先進先出調度算法執行流 coutendl-endl; cout先進先出調度算法執行流:endlendl; cout序號 進程名 運行時間 等待時間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總調度次數:iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void FIFO()void Priority()/優先級調度算法
10、int i,j;int iCurMin;/當前最低優先級PCB在數組pcbs中的下標int iPassedTime=0;/已經過的時間int iSum;/總等待時間int iQueueMAXPCB;/用于存放排序后進程數組下標的數組隊列int iCurPriority=1000;/當前最低優先級for(i=0;iiPCBNum;i+) /按優先級遞增排序PCB,將排序后下標的存放在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+) /輸出優先級調度執行流 coutendl-endl; cout優先級調度執行流:endlendl; cout序號 進程名 優先級 運行時間 等待時間endl; iSum=0; for(i=0;iiPCBNu
12、m;i+)cout i+1pcbsiQueuei.sName pcbsiQueuei.iPrioritypcbsiQueuei.iRunTime pcbsiQueuei.iWaitTimeendl; iSum+=pcbsiQueuei.iWaitTime;/累加總等待時間 cout總調度次數:iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void Priority()void RR()/時間片輪轉調度算法int i;int iNotEnded=1;
13、/標志:不是所有進程都已經獲得足夠時間片運行完成int iNum;/到目前為止末執行完的進程數int iRound=0;/輪轉周期數int iSum=0;/總時間片數float fBlockTime=10;/時間片的長度(納秒)coutendl請輸入時間片的長度(納秒):endlfBlockTime;coutendl-endl;cout時間片輪轉調度執行流(時間片的長度為:fBlockTime納秒):endl; while(iNotEnded=1)iNotEnded=0; iNum=0; for(i=0;iiPCBNum;i+)/統計到目前為止末執行完的進程數iNumif(pcbsi.iFin
14、ished=0) iNum+; /if(pcbsi.iFinished=0) /for(i=0;i0)iRound+;/累加輪轉周期數coutendl第iRound輪:;for(i=0;iiPCBNum;i+) if(pcbsi.iFinished=0) iNotEnded=1;coutpcbsi.sName ;iSum+;/累加總時間片數 if(pcbsi.iRunTime=fBlockTime*(iRound)/i進程在本輪獲得一個時間片后能夠運行完成 pcbsi.iFinished=1; /if(pcbsi.iRunTime=fBlockTime*(iRound+1)/if(pcbsi.
15、iFinished=0) /for(i=0;i0) /while(iNotEnded=1)coutendl輪轉周期數:iRound總時間片數:iSumendl;coutendl-endl; /void RR() void SPF()/短進程優先調度算法 int i,j;int iCurMin;/當前最短運行時間PCB在數組pcbs中的下標 int iPassedTime=0;/已經過的時間 int iSum;/總等待時間int iQueueMAXPCB; /用于存放排序后進程數組下標的數組隊列int iCurRunTime;/當前最短進程運行時間for(i=0;iiPCBNum;i+) /按進
16、程運行時間遞增排序PCB,將排序后下標的存放在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+) /輸出短進程優先調度執行流 coutendl-endl; cout短進程優先調度執行流:endlendl; cout序號 進程名 運行時間 等待時間endl; iSum=0; for(i=0;iiPCBNum;i+)cout i+1 pcbsiQueuei.sName pcbsiQueuei.iRunTime pcbsiQueuei.iWaitTimeendl; iSum+=pcbsiQueuei.iWaitTime;/累加總等待時間 cout總調度次數:iPCBNumendl;cout總等待時間:iSumendl;printf(平均等待時
18、間 %.2fn,(float)iSum / (float)iPCBNum);coutendl-endl; /void SPF ()void Version()/顯示版權信息函數 coutendlendl; cout endl; cout 進程調度算法模擬系統 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()/主函數 int iInput;/用戶輸入的整數以選擇算法 bool bGoOn;/是否繼續進程調度算法模擬的標志char sGoOn1;/用戶輸入是否繼續進程調度算法模擬的字母:y、Y、N、nVersion();/顯示版權信息函數InitPCB();/PCB初始化函數bGoOn= true;strcpy(sGoOn, );if(ReadPCBFile()=1)/標志 讀進程流文件數據函數 執行是否正確while (bGoOn)coutendl請輸入算法編號(1 OR 2 OR 3 OR 4)選擇進程調度算法:endlendl;co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國智能停車解決方案行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國時尚服裝行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國房屋裝修行業發展分析及發展趨勢預測與投資風險研究報告
- 2025-2030中國家用增壓水泵行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國復合調味品市場消費趨勢與需求潛力預測研究報告版
- 畜牧養殖場安全運營責任協議
- 畜牧養殖防疫責任及權益保障協議
- 網絡推廣服務協議書
- 2025年消防安全知識培訓考試題庫:消防法律法規精解消防安全培訓評估報告試題
- 學生退學協議書二零二五年
- 2025年中國華電集團公司招聘筆試參考題庫含答案解析
- 收費站特情處理培訓
- 教師資格考試小學科學面試試題及答案指導(2024年)
- 【MOOC】考古發現與中國文化-浙江大學 中國大學慕課MOOC答案
- 計量經濟學導論:現代觀點(第七版)課件:有定性信息的多元回歸
- 2025中考語文古詩文專項復習 專題一 古詩詞曲閱讀 教材85首古詩詞曲分主題梳理
- 2024年高考福建卷物理真題(原卷版)
- 《QGDW11202.11-2022智能變電站自動化設備檢測規范第11部分寬頻測量裝置》
- 安全生產標準化檔案盒側標簽
- 《量子計算入門》課件
- 學校安全隱患報告和舉報獎懲制度
評論
0/150
提交評論