




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)課程設(shè)計(jì)(MFC版本)
目錄
1、設(shè)計(jì)目的意義2
1.1、目的意義21.2、實(shí)現(xiàn)目標(biāo)22、設(shè)計(jì)方案3
2.1、軟硬件環(huán)境32.2、開發(fā)工具32.3、思路33、程序功能模塊設(shè)計(jì)4
3.1、總體模塊43.2、部分模塊43.3、詳細(xì)功能描述64、程序總控流程圖65、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)8
5.1、PCB結(jié)構(gòu)85.2、進(jìn)程狀態(tài)結(jié)構(gòu)85.3、控件結(jié)構(gòu)96、程序代碼結(jié)構(gòu)97、程序主要代碼解析108、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果158.1、運(yùn)行時(shí)部分界面15
8.2、數(shù)據(jù)測(cè)試記錄179、設(shè)計(jì)過程中遇到的問題及解決方法1810、結(jié)論1810.1、系統(tǒng)實(shí)現(xiàn)狀況18
10.2、系統(tǒng)特點(diǎn)1810.3、設(shè)計(jì)體會(huì)及收獲1811、參考資料19
模擬進(jìn)程調(diào)度功能的設(shè)計(jì)與實(shí)現(xiàn)
1、設(shè)計(jì)目的意義
1.1、目的意義
通過課程設(shè)計(jì)理解進(jìn)程調(diào)度的概念,深入了解進(jìn)程控制的功能、進(jìn)程的創(chuàng)立、刪除以
及進(jìn)程各個(gè)狀態(tài)間的轉(zhuǎn)換過程;實(shí)現(xiàn)先來先服務(wù)、時(shí)間片輪轉(zhuǎn)、最短作業(yè)優(yōu)先、優(yōu)先級(jí)調(diào)度算法對(duì)進(jìn)程進(jìn)行的調(diào)度過程;通過觀測(cè)有關(guān)的隊(duì)列結(jié)構(gòu)的內(nèi)容的動(dòng)態(tài)變化過程深入體會(huì)各個(gè)調(diào)度算法的特點(diǎn);從而能夠更好的穩(wěn)定從書本上學(xué)到的知識(shí)。編程過程中需要建立隊(duì)列等結(jié)構(gòu)進(jìn)行各種操作,通過該次課程設(shè)計(jì),我們更加從實(shí)用
的角度對(duì)《數(shù)據(jù)結(jié)構(gòu)》課程內(nèi)容進(jìn)行更深入理解和更熟練的應(yīng)用。
使用C++語言進(jìn)行編程,通過對(duì)調(diào)度功能的編程實(shí)現(xiàn),不但能有效訓(xùn)練我們對(duì)編程語
言的熟練使用,還能促進(jìn)我們獨(dú)立思考解決問題、以及獨(dú)立查新獲取知識(shí)的能力。1.2、實(shí)現(xiàn)目標(biāo)
一個(gè)進(jìn)程的生命期可以劃分為一組狀態(tài),這些狀態(tài)刻畫了整個(gè)進(jìn)程。系統(tǒng)根據(jù)PCB結(jié)
構(gòu)中的狀態(tài)值控制過程。在進(jìn)程的生命期內(nèi),一個(gè)進(jìn)程至少具有5種基本狀態(tài),它們是:初始態(tài)、執(zhí)行狀態(tài)、等待狀態(tài)、就緒狀態(tài)和終止?fàn)顟B(tài)。通過系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)進(jìn)程相關(guān)數(shù)據(jù)結(jié)構(gòu)的創(chuàng)立和查看功能;實(shí)現(xiàn)多種進(jìn)程調(diào)度算法:先來先服務(wù)算法、優(yōu)先級(jí)調(diào)度算法、時(shí)間片輪轉(zhuǎn)法等;實(shí)現(xiàn)對(duì)執(zhí)行進(jìn)程的阻塞,對(duì)等待進(jìn)程的喚醒等功能。進(jìn)程的轉(zhuǎn)換過程如下:
2、設(shè)計(jì)方案
2.1軟硬件環(huán)境硬件設(shè)備:PC機(jī)
軟件設(shè)備:WINDOWSXP、MicrosoftVisualC++6.02.2、開發(fā)工具
由于現(xiàn)在使用的操作系統(tǒng)大多數(shù)都是微軟公司的產(chǎn)品,為了更好更貼近的模擬操作系
統(tǒng)中進(jìn)程調(diào)度功能,我們選擇使用C++語言,開發(fā)平臺(tái)MicrosoftVisualC++6.0,借助MFC來完成應(yīng)用Windows應(yīng)用程序的開發(fā)。另外通過課余時(shí)間的學(xué)習(xí),對(duì)Windows應(yīng)用程序的開發(fā)過程也有一些了解,很想學(xué)以致用,做點(diǎn)使用的東西加深對(duì)學(xué)習(xí)過的知識(shí)的理解與吸收。2.3、思路
進(jìn)程根據(jù)外界條件的不斷變化引起狀態(tài)的改變,可以利用系統(tǒng)時(shí)間片的大小、進(jìn)程執(zhí)
行時(shí)間、進(jìn)入主存的時(shí)間、系統(tǒng)內(nèi)存大小、以及調(diào)度算法的選擇來作為條件對(duì)進(jìn)程進(jìn)行調(diào)度。通過在對(duì)話框中添加按鈕、文本編輯框、列表等控件,并為控件關(guān)聯(lián)相應(yīng)的變量和消息函數(shù),實(shí)現(xiàn)各個(gè)控件內(nèi)部以及控件之間的協(xié)同工作,并使用定時(shí)器進(jìn)行時(shí)間的設(shè)置,從而完成系統(tǒng)所要求的進(jìn)程調(diào)度工作。Windows應(yīng)用程序,操作系統(tǒng),計(jì)算機(jī)硬件之間的相互關(guān)系如下:
3、程序功能模塊設(shè)計(jì)(程序功能模塊劃分及層次等)
3.1、總體模塊
3.2、部分模塊
3.3、詳細(xì)功能描述
根據(jù)需要設(shè)置系統(tǒng)內(nèi)存的大小
選擇不同的進(jìn)度調(diào)度算法進(jìn)行進(jìn)程調(diào)度模擬設(shè)置進(jìn)程的各種屬性值創(chuàng)立進(jìn)程
根據(jù)進(jìn)程不同的狀態(tài)放在不同的位置顯示進(jìn)程調(diào)度過程中的動(dòng)態(tài)變化狀況在某一時(shí)間點(diǎn)擊按鈕進(jìn)行進(jìn)程調(diào)度模擬
進(jìn)程調(diào)度模擬過程中可以暫停調(diào)度過程,查看進(jìn)程的狀態(tài)變化過程通過雙擊狀態(tài)列表中的某個(gè)進(jìn)程可以查看進(jìn)程的各屬性值對(duì)執(zhí)行進(jìn)程、就緒進(jìn)程進(jìn)行強(qiáng)制“阻塞〞操作對(duì)等待進(jìn)程進(jìn)行強(qiáng)制“就緒〞操作
將沒有執(zhí)行完畢的進(jìn)程進(jìn)行強(qiáng)制“殺死〞操作
4、程序總控流程圖
(見下頁)
5、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
5.2、進(jìn)程狀態(tài)結(jié)構(gòu)
6、程序代碼結(jié)構(gòu)
程序主要函數(shù)如下,各函數(shù)通過關(guān)聯(lián)相關(guān)變量進(jìn)行消息傳遞CProgressExDlg::CProgressExDlg(CWnd*pParent/*=NULL*/)
:CDialog(CProgressExDlg::IDD,pParent)
構(gòu)造函數(shù),調(diào)用基類CProgressExDlg,并傳遞兩個(gè)參數(shù):一個(gè)CProgressExDlg類的IDD成員,一個(gè)是父窗口指針。
voidCProgressExDlg::DoDataExchange(CDataExchange*pDX)
主要用來完成對(duì)話框數(shù)據(jù)的交換和校驗(yàn)。voidCProgressExDlg::OnButPause()
用于暫停進(jìn)程調(diào)度操作
voidCProgressExDlg::OnButStart()
用于啟動(dòng)進(jìn)程調(diào)度
voidCProgressExDlg::OnButton1()
用于復(fù)位,清除各進(jìn)程
voidCProgressExDlg::OnButton2()
用于創(chuàng)立進(jìn)程
voidCProgressExDlg::OnButtonBlock()
用于使選定進(jìn)程進(jìn)入就緒狀態(tài)
voidCProgressExDlg::OnButtonKill()
用于殺死選定進(jìn)程
voidCProgressExDlg::OnButtonNotify()
用于阻塞選定進(jìn)程
HBRUSHCProgressExDlg::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
用于設(shè)置顯示進(jìn)程屬性時(shí)的字體和顏色
voidCProgressExDlg::OnDblclkListReadypro()
用于雙擊就緒隊(duì)列中的某個(gè)進(jìn)程,進(jìn)而顯示其屬性voidCProgressExDlg::OnDblclkListRunpro()
用于雙擊執(zhí)行隊(duì)列中的某個(gè)進(jìn)程,進(jìn)而顯示其屬性voidCProgressExDlg::OnDblclkListWaitpro()
用于雙擊等待隊(duì)列中的某個(gè)進(jìn)程,進(jìn)而顯示其屬性BOOLCProgressExDlg::OnInitDialog()
初始化對(duì)話框
voidCProgressExDlg::OnPaint()
繪制對(duì)話框
voidCProgressExDlg::OnTimer(UINTnIDEvent)
處理各種調(diào)度算法
7、程序主要代碼解析
由于代碼較多,以下只列出了先來先服務(wù)算法和最短作業(yè)優(yōu)先算法的代碼。
if(nIDEvent==0)//為先來先服務(wù)調(diào)度算法
{
if(((((CListBox*)GetDlgItem(IDC_LIST_RUNPRO))-GetCount())==0)(ReadyVec.size()!=0))//假使沒有進(jìn)程運(yùn)行,先擇優(yōu)先級(jí)最高的進(jìn)入運(yùn)行{
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){
//刪除掉可以進(jìn)入就緒隊(duì)列的優(yōu)先權(quán)最高的進(jìn)程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)//最短作業(yè)優(yōu)先算法{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);}
//操作阻塞隊(duì)列
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、測(cè)試數(shù)據(jù)及測(cè)試結(jié)果
8.1、運(yùn)行時(shí)部分界面剛啟動(dòng)時(shí)
添加進(jìn)程后:
先來先服務(wù)算法調(diào)度點(diǎn)擊開始模擬后:
雙擊執(zhí)行進(jìn)程時(shí):
點(diǎn)擊阻塞時(shí):
8.2、數(shù)據(jù)測(cè)試記錄
9、設(shè)計(jì)過程中遇到的問題及解決方法
滿足進(jìn)程動(dòng)態(tài)生成的需要,使用向量vector進(jìn)行存放進(jìn)程
向量vector中的內(nèi)容不能直接使用下標(biāo)刪除,使用迭代器iterator并結(jié)合函數(shù)erase
使用。
使用組合框ComboBox時(shí)沒有下拉滾動(dòng)條,可以剛開始時(shí)把組合框畫的大一點(diǎn)就可以。運(yùn)行時(shí)同一個(gè)進(jìn)程在不同的兩個(gè)狀態(tài)同時(shí)出現(xiàn),在狀態(tài)轉(zhuǎn)換時(shí)刪除列表框中的內(nèi)容后
要更新一下。
進(jìn)程運(yùn)行完后對(duì)應(yīng)的內(nèi)存資源沒有增加,在每次的進(jìn)程運(yùn)行終止或是從執(zhí)行狀態(tài)轉(zhuǎn)換
到等待狀態(tài),都要釋放資源。
編碼過程中也出現(xiàn)了規(guī)律不夠嚴(yán)密等錯(cuò)誤,經(jīng)過一一排查都把錯(cuò)誤改正了。
10、結(jié)論
10.1、系統(tǒng)實(shí)現(xiàn)狀況
課程設(shè)計(jì)任務(wù)書中所要求的功能我們都已經(jīng)確鑿無誤的實(shí)現(xiàn),測(cè)試中沒有出現(xiàn)什么錯(cuò)
誤。該系統(tǒng)實(shí)現(xiàn)了進(jìn)程控制的功能、進(jìn)程的創(chuàng)立、刪除以及進(jìn)程各個(gè)狀態(tài)間的轉(zhuǎn)換過程;實(shí)現(xiàn)了先來先服務(wù)、時(shí)間片輪轉(zhuǎn)、最短作業(yè)優(yōu)先、優(yōu)先級(jí)調(diào)度算法對(duì)進(jìn)程進(jìn)行調(diào)度過程;系統(tǒng)界面上所有的功能部件說明的功能都已實(shí)現(xiàn)。10.2、系統(tǒng)特點(diǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/TS 6201:2025 EN Health informatics - Personalized digital health framework
- 2025版新型實(shí)木地板安裝與維護(hù)一體化合同
- 2025年在線教育平臺(tái)課程銷售傭金及教學(xué)資源合作合同
- 2025年度綜合性幼兒園運(yùn)營管理承包合同
- 2025年激光測(cè)距儀、測(cè)向儀合作協(xié)議書
- 2025年鋼鐵廠鋼筋施工勞務(wù)承包合同:成本控制
- 業(yè)務(wù)部門財(cái)務(wù)支持計(jì)劃
- 幼兒園小班的校園文化建設(shè)工作計(jì)劃
- 玩中學(xué)學(xué)中玩計(jì)劃
- 細(xì)化貨物標(biāo)識(shí)與管理的措施計(jì)劃
- 表冷器更換施工方案
- 瀝青集料篩分反算計(jì)算表格(自動(dòng)計(jì)算)
- 2023年國家護(hù)理質(zhì)量數(shù)據(jù)平臺(tái)
- 惡性高熱課件
- 真空滅弧室基本知識(shí)課件
- 川教版四年級(jí)(上、下冊(cè))生命生態(tài)與安全教案及教學(xué)計(jì)劃附安全知識(shí)
- 工齡認(rèn)定文件
- 教師招聘考試歷年真題(物理)及答案
- 給藥護(hù)理 口服給藥法
- 初中歷史人教版八年級(jí)上經(jīng)濟(jì)和社會(huì)生活中國近代民族工業(yè)的發(fā)展
- YS/T 562-2009貴金屬合金化學(xué)分析方法鉑釕合金中釕量的測(cè)定硫脲分光光度法
評(píng)論
0/150
提交評(píng)論