




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——模擬進程調度功能的設計與實現操作系統課程設計(MFC版本)
目錄
1、設計目的意義2
1.1、目的意義21.2、實現目標22、設計方案3
2.1、軟硬件環境32.2、開發工具32.3、思路33、程序功能模塊設計4
3.1、總體模塊43.2、部分模塊43.3、詳細功能描述64、程序總控流程圖65、數據結構設計8
5.1、PCB結構85.2、進程狀態結構85.3、控件結構96、程序代碼結構97、程序主要代碼解析108、測試數據及測試結果158.1、運行時部分界面15
8.2、數據測試記錄179、設計過程中遇到的問題及解決方法1810、結論1810.1、系統實現狀況18
10.2、系統特點1810.3、設計體會及收獲1811、參考資料19
模擬進程調度功能的設計與實現
1、設計目的意義
1.1、目的意義
通過課程設計理解進程調度的概念,深入了解進程控制的功能、進程的創立、刪除以
及進程各個狀態間的轉換過程;實現先來先服務、時間片輪轉、最短作業優先、優先級調度算法對進程進行的調度過程;通過觀測有關的隊列結構的內容的動態變化過程深入體會各個調度算法的特點;從而能夠更好的穩定從書本上學到的知識。編程過程中需要建立隊列等結構進行各種操作,通過該次課程設計,我們更加從實用
的角度對《數據結構》課程內容進行更深入理解和更熟練的應用。
使用C++語言進行編程,通過對調度功能的編程實現,不但能有效訓練我們對編程語
言的熟練使用,還能促進我們獨立思考解決問題、以及獨立查新獲取知識的能力。1.2、實現目標
一個進程的生命期可以劃分為一組狀態,這些狀態刻畫了整個進程。系統根據PCB結
構中的狀態值控制過程。在進程的生命期內,一個進程至少具有5種基本狀態,它們是:初始態、執行狀態、等待狀態、就緒狀態和終止狀態。通過系統設計,實現進程相關數據結構的創立和查看功能;實現多種進程調度算法:先來先服務算法、優先級調度算法、時間片輪轉法等;實現對執行進程的阻塞,對等待進程的喚醒等功能。進程的轉換過程如下:
2、設計方案
2.1軟硬件環境硬件設備:PC機
軟件設備:WINDOWSXP、MicrosoftVisualC++6.02.2、開發工具
由于現在使用的操作系統大多數都是微軟公司的產品,為了更好更貼近的模擬操作系
統中進程調度功能,我們選擇使用C++語言,開發平臺MicrosoftVisualC++6.0,借助MFC來完成應用Windows應用程序的開發。另外通過課余時間的學習,對Windows應用程序的開發過程也有一些了解,很想學以致用,做點使用的東西加深對學習過的知識的理解與吸收。2.3、思路
進程根據外界條件的不斷變化引起狀態的改變,可以利用系統時間片的大小、進程執
行時間、進入主存的時間、系統內存大小、以及調度算法的選擇來作為條件對進程進行調度。通過在對話框中添加按鈕、文本編輯框、列表等控件,并為控件關聯相應的變量和消息函數,實現各個控件內部以及控件之間的協同工作,并使用定時器進行時間的設置,從而完成系統所要求的進程調度工作。Windows應用程序,操作系統,計算機硬件之間的相互關系如下:
3、程序功能模塊設計(程序功能模塊劃分及層次等)
3.1、總體模塊
3.2、部分模塊
3.3、詳細功能描述
根據需要設置系統內存的大小
選擇不同的進度調度算法進行進程調度模擬設置進程的各種屬性值創立進程
根據進程不同的狀態放在不同的位置顯示進程調度過程中的動態變化狀況在某一時間點擊按鈕進行進程調度模擬
進程調度模擬過程中可以暫停調度過程,查看進程的狀態變化過程通過雙擊狀態列表中的某個進程可以查看進程的各屬性值對執行進程、就緒進程進行強制“阻塞〞操作對等待進程進行強制“就緒〞操作
將沒有執行完畢的進程進行強制“殺死〞操作
4、程序總控流程圖
(見下頁)
5、數據結構設計
5.2、進程狀態結構
6、程序代碼結構
程序主要函數如下,各函數通過關聯相關變量進行消息傳遞CProgressExDlg::CProgressExDlg(CWnd*pParent/*=NULL*/)
:CDialog(CProgressExDlg::IDD,pParent)
構造函數,調用基類CProgressExDlg,并傳遞兩個參數:一個CProgressExDlg類的IDD成員,一個是父窗口指針。
voidCProgressExDlg::DoDataExchange(CDataExchange*pDX)
主要用來完成對話框數據的交換和校驗。voidCProgressExDlg::OnButPause()
用于暫停進程調度操作
voidCProgressExDlg::OnButStart()
用于啟動進程調度
voidCProgressExDlg::OnButton1()
用于復位,清除各進程
voidCProgressExDlg::OnButton2()
用于創立進程
voidCProgressExDlg::OnButtonBlock()
用于使選定進程進入就緒狀態
voidCProgressExDlg::OnButtonKill()
用于殺死選定進程
voidCProgressExDlg::OnButtonNotify()
用于阻塞選定進程
HBRUSHCProgressExDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
用于設置顯示進程屬性時的字體和顏色
voidCProgressExDlg::OnDblclkListReadypro()
用于雙擊就緒隊列中的某個進程,進而顯示其屬性voidCProgressExDlg::OnDblclkListRunpro()
用于雙擊執行隊列中的某個進程,進而顯示其屬性voidCProgressExDlg::OnDblclkListWaitpro()
用于雙擊等待隊列中的某個進程,進而顯示其屬性BOOLCProgressExDlg::OnInitDialog()
初始化對話框
voidCProgressExDlg::OnPaint()
繪制對話框
voidCProgressExDlg::OnTimer(UINTnIDEvent)
處理各種調度算法
7、程序主要代碼解析
由于代碼較多,以下只列出了先來先服務算法和最短作業優先算法的代碼。
if(nIDEvent==0)//為先來先服務調度算法
{
if(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())==0)(ReadyVec.size()!=0))//假使沒有進程運行,先擇優先級最高的進入運行{
sort(ReadyVec.begin(),ReadyVec.end(),Compare);
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-ResetContent();for(inti=0;iReadyVec.size();i++){
CStringbuf;
buf.Format(%d%s,ReadyVec[i].PID,ReadyVec[i].PName);
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-InsertString(i,buf);}
ReadyVec[0].status=0;
RunVec.push_back(ReadyVec[0]);tempRunPcb=ReadyVec[0];
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-DeleteString(0);CStringbuf;
buf.Format(%d%s,ReadyVec[0].PID,ReadyVec[0].PName);((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-AddString(buf);}
elseif(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())!=0)(ReadyVec.size()!=0)){
RunVec[0].WorkTime-=100;
if(RunVec[0].WorkTime=0){
((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-ResetContent();m_memSize+=ReadyVec[0].MemCount;runTime=0;
RunVec.clear();
vectorPCB::iteratorpos1=ReadyVec.begin();ReadyVec.erase(pos1);}}
elseif(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())!=0)(ReadyVec.size()==0)){
RunVec[0].WorkTime-=100;
if(RunVec[0].WorkTime=0){
((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-ResetContent();m_memSize+=ReadyVec[0].MemCount;runTime=0;
RunVec.clear();
vectorPCB::iteratorpos1=ReadyVec.begin();ReadyVec.erase(pos1);}}
if((((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-GetCount())!=0){
if(WaitVec.size()!=0){
sort(WaitVec.begin(),WaitVec.end(),Compare);for(intj=0;jWaitVec.size();j++){
if(WaitVec[j].MemCount=m_memSize){
//刪除掉可以進入就緒隊列的優先權最高的進程m_memSize-=WaitVec[j].MemCount;WaitVec[j].status=1;
ReadyVec.push_back(WaitVec[j]);
vectorPCB::iteratorpos=WaitVec[j];WaitVec.erase(pos);
((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-DeleteString(j);CStringbuf;
buf.Format(%d%s,ReadyVec[j].PID,ReadyVec[j].PName);((CListBox
*)GetDlgItem(IDC_LIST_RUNPRO))-InsertString(ReadyVec.size(),buf);
}}
((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-ResetContent();for(j=0;jWaitVec.size();j++){
CStringbuf;
buf.Format(%d%s,WaitVec[j].PID,WaitVec[j].PName);
((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-InsertString(j,buf);}
}}
UpdateData(FALSE);}
elseif(nIDEvent==1)//最短作業優先算法{if((!ReadyVec.empty())((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())==0)){
std::stable_sort(ReadyVec.begin(),ReadyVec.end(),CompareByWkt);((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-ResetContent();for(inti=0;iReadyVec.size();i++){
CStringbuf;
buf.Format(%d%s,ReadyVec[i].PID,ReadyVec[i].PName);
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-InsertString(i,buf);}
ReadyVec[0].status=0;
RunVec.push_back(ReadyVec[0]);ReadyVec[0].WorkTime-=100;
tempRunPcb=ReadyVec[0];CStringbuf;
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-GetText(0,buf);((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-DeleteString(0);((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-AddString(buf);UpdateData(false);}
elseif(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())!=0)(ReadyVec.size()!=0)){
ReadyVec[0].WorkTime-=100;
if(ReadyVec[0].WorkTime=0){
((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-ResetContent();UpdateData(false);
m_memSize+=ReadyVec[0].MemCount;runTime=0;
RunVec.clear();
vectorPCB::iteratorpos1=ReadyVec.begin();ReadyVec.erase(pos1);}
//操作阻塞隊列
stable_sort(WaitVec.begin(),WaitVec.end(),CompareByWkt);if(WaitVec.size()!=0){
if(WaitVec[0].MemCount=m_memSize){
m_memSize-=WaitVec[0].MemCount;WaitVec[0].status=1;
ReadyVec.push_back(WaitVec[0]);vectorPCB::iteratorpos=WaitVec.begin();WaitVec.erase(pos);
if(ReadyVec.size()!=0){
((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-ResetContent();for(inti=0;iReadyVec.size();i++){
CStringbuf;
buf.Format(%d%s,ReadyVec[i].PID,ReadyVec[i].PName);((CListBox*)GetDlgItem(IDC_LIST_READYPRO))-InsertString(i,buf);}
UpdateData(false);}
((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-ResetContent();for(inti=0;iWaitVec.size();i++){
CStringbuf;
buf.Format(%d%s,WaitVec[i].PID,WaitVec[i].PName);
((CListBox*)GetDlgItem(IDC_LIST_WAITPRO))-InsertString(i,buf);}
UpdateData(FALSE);}}}
elseif(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())!=0)(ReadyVec.empty())){
ReadyVec[0].WorkTime-=100;
if(ReadyVec[0].WorkTime=0){
((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-ResetContent();UpdateData(FALSE);m_memSize+=ReadyVec[0].MemCount;runTime=0;
RunVec.clear();}}else{
UpdateData(FALSE);}}
8、測試數據及測試結果
8.1、運行時部分界面剛啟動時
添加進程后:
先來先服務算法調度點擊開始模擬后:
雙擊執行進程時:
點擊阻塞時:
8.2、數據測試記錄
9、設計過程中遇到的問題及解決方法
滿足進程動態生成的需要,使用向量vector進行存放進程
向量vector中的內容不能直接使用下標刪除,使用迭代器iterator并結合函數erase
使用。
使用組合框ComboBox時沒有下拉滾動條,可以剛開始時把組合框畫的大一點就可以。運行時同一個進程在不同的兩個狀態同時出現,在狀態轉換時刪除列表框中的內容后
要更新一下。
進程運行完后對應的內存資源沒有增加,在每次的進程運行終止或是從執行狀態轉換
到等待狀態,都要釋放資源。
編碼過程中也出現了規律不夠嚴密等錯誤,經過一一排查都把錯誤改正了。
10、結論
10.1、系統實現狀況
課程設計任務書中所要求的功能我們都已經確鑿無誤的實現,測試中沒有出現什么錯
誤。該系統實現了進程控制的功能、進程的創立、刪除以及進程各個狀態間的轉換過程;實現了先來先服務、時間片輪轉、最短作業優先、優先級調度算法對進程進行調度過程;系統界面上所有的功能部件說明的功能都已實現。10.2、系統特點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國熱水設備數據監測研究報告
- 2024年菏澤市牡丹區招聘教師筆試真題
- 2024年固原市鎮公益性崗位招聘筆試真題
- 戶外廣告制作合同范文(5篇)
- 汽車電動化趨勢下的競爭格局演變-全面剖析
- 生物仿制藥研發-全面剖析
- 混合云安全解決方案探索-全面剖析
- NAFLD患者血脂異常與肝纖維化關系-全面剖析
- 一年級班主任多元評價機制計劃
- 金融行業HSE管理體系的應用措施
- 二年級上冊道德與法治教學設計-4.2 做誠實的孩子 魯人版
- 2025年統計學期末考試題庫:綜合案例分析題解題技巧試卷
- 2024年大學生就業力調研報告-智聯招聘-202405
- 2025年車站值班員高級考試題庫
- 廣西2025年體育統考身體素質測試項目評分標準
- 品牌運營推廣合同范本
- 【MOOC】《醫學心理學》(北京大學)章節期末中國大學慕課答案
- 2023-2024學年湖南省長沙市長沙縣八年級(下)月考數學試卷(6月份)(含答案)
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲罐設計規范(正式版)
- 學校辦學基本條件評估指標體系修訂
- 寧國市慈善協會籌備工作報告
評論
0/150
提交評論