華師操作系統(tǒng)實驗一——進程調(diào)度的設(shè)計與實現(xiàn)實驗報告(共13頁)_第1頁
華師操作系統(tǒng)實驗一——進程調(diào)度的設(shè)計與實現(xiàn)實驗報告(共13頁)_第2頁
華師操作系統(tǒng)實驗一——進程調(diào)度的設(shè)計與實現(xiàn)實驗報告(共13頁)_第3頁
華師操作系統(tǒng)實驗一——進程調(diào)度的設(shè)計與實現(xiàn)實驗報告(共13頁)_第4頁
華師操作系統(tǒng)實驗一——進程調(diào)度的設(shè)計與實現(xiàn)實驗報告(共13頁)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上院 系:計 算 機 學(xué) 院實驗課程:操作系統(tǒng)實驗實驗項目:進程調(diào)度的設(shè)計與實現(xiàn)指導(dǎo)老師:馮剛開課時間:20122013年度第2學(xué)期專 業(yè):網(wǎng)絡(luò)工程班 級:11本6班學(xué) 生:盧偉柱學(xué) 號:華南師范大學(xué)教務(wù)處專心-專注-專業(yè)一、 實驗?zāi)康?. 綜合應(yīng)用下列知識點設(shè)計并實現(xiàn)操作系統(tǒng)的進程調(diào)度:鄰接表,布爾數(shù)組,非阻塞輸入,圖形用戶界面GUI ,進程控制塊,進程狀態(tài)轉(zhuǎn)換,多級反饋隊列進程調(diào)度算法。 2. 加深理解操作系統(tǒng)進程調(diào)度的過程。3. 加深理解多級反饋隊列進程調(diào)度算法。二、 實驗內(nèi)容與主要設(shè)計思想1. 采用一種熟悉的語言,如C、PASCAL或C+等,編制程序,最好關(guān)鍵代

2、碼采用C/C+ ,界面設(shè)計可采用其它自己喜歡的語言。2. 采用多級反饋隊列調(diào)度算法進行進程調(diào)度。3. 每個進程對應(yīng)一個PCB。在 PCB 中包括進程標識符pid、進程的狀態(tài)標識status、進程優(yōu)先級priority、進程的隊列指針 next 和表示進程生命周期的數(shù)據(jù)項life (在實際系統(tǒng)中不包括該項)。4. 創(chuàng)建進程時即創(chuàng)建一個PCB ,各個進程的pid 都是唯一的,pid 是在1到100 范圍內(nèi)的一個整數(shù)??梢詣?chuàng)建一個下標為1 到100 的布爾數(shù)組,“真”表示下標對應(yīng)的進程標識號是空閑的,“假”表示下標對應(yīng)的進程標識號已分配給某個進程。 5. 進程狀態(tài)status 的取值為“就緒read

3、y”或“運行run ”,剛創(chuàng)建時,狀態(tài)為“ready”。被進程調(diào)度程序選中后變?yōu)椤皉un ”。6. 進程優(yōu)先級priority 是0 到49范圍內(nèi)的一個隨機整數(shù)。7. 進程生命周期life 是1 到5 范圍內(nèi)的一個隨機整數(shù)。8. 初始化時,創(chuàng)建一個鄰接表,包含50個就緒隊列,各就緒隊列的進程優(yōu)先級priority 分別是0 到49。9. 為了模擬用戶動態(tài)提交任務(wù)的過程,要求動態(tài)創(chuàng)建進程。進入進程調(diào)度循環(huán)后,每次按ctrl+f即動態(tài)創(chuàng)建一個進程,然后將該 PCB 插入就緒隊列中。按ctrl+q退出進程調(diào)度循環(huán)。10. 在進程調(diào)度循環(huán)中,每次選擇優(yōu)先級最大的就緒進程來執(zhí)行。將其狀態(tài)從就緒變?yōu)檫\行,

4、通過延時一段時間來模擬該進程執(zhí)行一個時間片的過程,然后優(yōu)先級減半,生命周期減一。設(shè)計圖形用戶界面GUI ,在窗口中顯示該進程和其他所有進程的PCB 內(nèi)容。如果將該運行進程的生命周期不為0 ,則重新把它變?yōu)榫途w狀態(tài),插入就緒隊列中;否則該進程執(zhí)行完成,撤消其PCB 。以上為一次進程調(diào)度循環(huán)。三、 d程序的主要流程圖四、 實驗心得1. 通過計數(shù)器KillTimer()、ONTIMER()以及在計數(shù)器中對函數(shù)run()設(shè)計并在ONTIMER()中對run函數(shù)調(diào)用從而完成多級反饋隊列運行的模擬。2. 使用MFC設(shè)計界面,可以通過按鈕和快捷鍵進成相關(guān)的操作,還充分利用了模板進行簡化設(shè)計鄰接表。3. 實驗

5、中最重要的是在自己無法解決問題的時候,向同學(xué)、老師等請教以及利用好網(wǎng)絡(luò)資源。4. 在設(shè)計的時候,要盡可能考慮到用戶的一切可能的操作,提高程序的用戶友好性。五、 主要源程序清單主要程序MyScheuleDlg.cpp的代碼:/ MyScheduleDlg.cpp : implementation file/#include "stdafx.h"#include "MySchedule.h"#include "MyScheduleDlg.h"#include <string.h>#include <iostream>

6、;#include <queue>#include "PCB.h"using namespace std;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifbool flag100;queue<PCB> q50;/ CMyScheduleDlg dialogCMyScheduleDlg:CMyScheduleDlg(CWnd* pParent /*=NULL*/): CDialog(CMyScheduleDlg:IDD, pPa

7、rent)/AFX_DATA_INIT(CMyScheduleDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CMyScheduleDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExc

8、hange(pDX);/AFX_DATA_MAP(CMyScheduleDlg)DDX_Control(pDX, IDC_LIST1, m_LIST);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyScheduleDlg, CDialog)/AFX_MSG_MAP(CMyScheduleDlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButt

9、on3)ON_WM_TIMER()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyScheduleDlg message handlersBOOL CMyScheduleDlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSe

10、tIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herem_LIST.DeleteAllItems(); while(m_LIST.DeleteColumn(0);/ 清空Control List內(nèi)容m_LIST.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); / 添加網(wǎng)格m_LIST.SetTextColor(RGB(255,0,255); / 設(shè)置字體顏色/m_LIST.InsertColumn(0,"",L

11、VCFMT_LEFT,0); / 第0列用來定位/ 插入列,50個優(yōu)先級列for(int i=0;i<50;i+)CString s;s.Format("%d",i);s="優(yōu)先級"+s;m_LIST.InsertColumn(i,s,LVCFMT_LEFT,185);for(i=0;i<100;i+)m_LIST.InsertItem(i,"");for(i=1;i<=100;i+)flagi=false;for(i=0;i<50;i+)addPCB();return TRUE; / return TRUE

12、unless you set the focus to a control/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMyScheduleDlg:OnPaint() if (IsIconic()CPaintDC dc(this);

13、/ device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height

14、() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMyScheduleDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMyScheduleDlg:OnButton1() /創(chuàng)建線程/ TODO: Add yo

15、ur control notification handler code hereKillTimer(1);addPCB();UpdateWindow();OnButton2();void CMyScheduleDlg:OnButton2()/調(diào)度開始 / TODO: Add your control notification handler code hereSetTimer(1,1000,NULL);/設(shè)置定時器void CMyScheduleDlg:OnButton3()/ TODO: Add your control notification handler code hereKill

16、Timer(1);/移除定時器void CMyScheduleDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultrun();CDialog:OnTimer(nIDEvent);void CMyScheduleDlg:run()/模擬進程執(zhí)行PCB pcb;CString s1,s2,s3,s4;for(int i=49;i>=0;i-)/檢測各個隊列是否為空if(!qi.empty()break;if(i!=-1)pcb=qi.front();qi.pop();

17、s1.Format("%d",pcb.getpid(); s2.Format("%d",pcb.getlife(); pcb.setstatus("run");s3="pid:"+s1+" status:"+pcb.getstatus()+" life:"+s2;m_LIST.SetTextColor(RGB(0,255,0); / 設(shè)置字體顏色m_LIST.SetItemText(0,pcb.getpriority(),s3);UpdateWindow();Sleep(10

18、00);/ 停頓一段時間m_LIST.SetTextColor(RGB(255,0,0); / 設(shè)置字體顏色for(int j=0;j<=qi.size();j+)s4=m_LIST.GetItemText(j+1,pcb.getpriority();m_LIST.SetItemText(j,pcb.getpriority(),s4);m_LIST.SetItemText(j,pcb.getpriority(),"");UpdateWindow();pcb.setpriority(pcb.getpriority()/2);pcb.setlife(pcb.getlife

19、()-1);if(pcb.getlife()!=0)s1.Format("%d",pcb.getpid(); s2.Format("%d",pcb.getlife(); pcb.setstatus("ready");s3="pid:"+s1+" status:"+pcb.getstatus()+" life:"+s2;qpcb.getpriority().push(pcb); m_LIST.SetItemText(qpcb.getpriority().size()-1,pcb

20、.getpriority(),s3);elseflagpcb.getpid()=false;else KillTimer(1);AfxMessageBox("進程調(diào)度完畢!");void CMyScheduleDlg:addPCB()/添加PCBPCB pcb;CString s1,s2,s3,s4;while(true)pcb.setpid(rand()%100+1);if(!flagpcb.getpid()flagpcb.getpid()=true;break;pcb.setstatus("ready");pcb.setpriority(rand()%49);pcb.setlife(rand()%5+1);s1.Format("%d",pcb.getpid();s2.Format("%d",pcb.getl

溫馨提示

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

評論

0/150

提交評論