




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 目錄第一章 概述11.1 需求分析11.2背景設計1第二章 概要設計2第三章 詳細設計43.1高響應比調(diào)度算法43.2時間片輪轉(zhuǎn)法53.3短進程優(yōu)先法7第四章 調(diào)試分析與測試結果9第五章 總結13第六章 參考文獻14第七章 附錄15第一章 概述1.1 需求分析進程是操作系統(tǒng)最重要的概念之一,進程調(diào)度是操作系統(tǒng)內(nèi)核的重要功能,本實驗要求用C語言編寫一個進程調(diào)度模擬程序,使用短作業(yè)優(yōu)先調(diào)度算法,高響應比調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法實現(xiàn)進程調(diào)度??梢允謩幼枞c喚醒。并用MFC實現(xiàn)圖形界面。本實驗可加深對進程調(diào)度算法的理解。1.2背景設計在OS中,調(diào)度的實質(zhì)是一種資源分配,調(diào)度算法即指:根據(jù)系統(tǒng)的資
2、源分配策略所規(guī)定的資源分配算法。對于不同的系統(tǒng)和系統(tǒng)目標,通常采用不同的調(diào)度算法,如在批處理系統(tǒng)中,為照顧為數(shù)眾多的短作業(yè),采用短作業(yè)有限調(diào)度算法;在分時系統(tǒng)中,為保證系統(tǒng)具有合理的響應時間,采用輪轉(zhuǎn)法進行調(diào)度。采用算法時,則要考慮多方面因素,以便達到最佳效果。第二章 概要設計設計一個有多個進程共行的進程調(diào)度程序。進程調(diào)度算法:短作業(yè)優(yōu)先調(diào)度算法,高響應比調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、服務時間、進程狀態(tài)等等。struct progressCString Name; /進程名稱CString Start
3、;/創(chuàng)建時間int ServiceT;/服務時間int RunningT;/消逝時間int RemainT;/剩余時間int id;/進程標識符CProgressCtrl* pro;/指向進度條的指針int Rp;/進程成為就緒進程的時間float prio;/進程優(yōu)先權;進程的優(yōu)先權為:響應時間/要求服務時間。進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒、執(zhí)行、阻塞、完成。就緒進程獲得 CPU后都只能運行一個時間片。用已占用CPU時間加1來表示。當阻塞進程時,將當前運行的進程移動到阻塞隊列,并從就緒隊列將下個進程移動到進程執(zhí)行區(qū)(本程序中就緒隊列中第一個即為正在執(zhí)行進程,后
4、文不再贅述)。當添加或喚醒進程時,將添加標記m_bchange置為真,并將進程添加進就緒隊列。在運行一個時間片中,檢查添加標記m_bchange是否為真,若為真,則判斷單選框選中的算法,并按各自算法進行模擬調(diào)度,詳見詳細設計。當執(zhí)行區(qū)進程完成時,將之移動到已完成的隊列,并判斷就緒隊列中是否有進程:若有,則將下一個進程添加進就緒隊列;若無,則彈出提示窗口。重復以上流程,直到用戶退出。第三章 詳細設計3.1高響應比調(diào)度算法該算法在添加標記m_bchange為真且單選框選中“高響應比優(yōu)先”時調(diào)用,分別通過每個進程前的隊列中進程RemainT之和除以該進程的ServiceT,求出優(yōu)先級prio,并根據(jù)
5、prio重新為就緒隊列排序。最后將m_bchange置為假。if ( m_bchange )if(iRadioButton=IDC_RADIO1)/計算優(yōu)先級for (int i=1;iProNum;i+)float sum=0;for (int j=0;ji;j+)sum+=Proj.RemainT;Proi.prio=sum/Proi.ServiceT;/end for/根據(jù)優(yōu)先級排序progress Tem;for ( i=0;iProNum-1;i+)for (int j=0;jProNum-1-i;j+)if (Proj.prioProj+1.prio)Tem=Proj+1;Proj
6、+1=Proj;Proj=Tem;m_bchange=false;/end 排序3.2時間片輪轉(zhuǎn)法該算法在添加標記m_bchange為真且單選框選中“輪轉(zhuǎn)調(diào)度”時調(diào)用,直接將就緒隊列相鄰2個進程兩兩互換,最終達到將正在執(zhí)行進程放置于就緒隊列后,并將下一個將要執(zhí)行的進程開始執(zhí)行,輸出結果,并將m_bchange置為真,以便繼續(xù)輪轉(zhuǎn)。if(iRadioButton=IDC_RADIO2)progress Tem;for ( int i=0;iSetRange(0,Pro0.ServiceT);Pro0.RemainT-;Pro0.RunningT+;m_Zhixing.Format(標識符:%d
7、進程名稱:%s 創(chuàng)建時間:%s 需要時間:%d秒 剩余時間:%d秒 已運行時間:%d秒 優(yōu)先權:%frn, Pro0.id,Pro0.Name,Pro0.Start,Pro0.ServiceT,Pro0.RemainT,Pro0.RunningT,Pro0.prio);GetDlgItem(IDC_EDIT_Zhixing)-SetWindowText(m_Zhixing);P-SetPos(Pro0.RunningT);/end 排序3.3短進程優(yōu)先法該算法在添加標記m_bchange為真且單選框選中“短進程優(yōu)先”時調(diào)用,按照進程RemainT來重新排列隊列順序。最后將m_bc
8、hange置為假。if(iRadioButton=IDC_RADIO3)progress Tem;for (int i=0;iProNum-1;i+)for (int j=0;jProj+1.RemainT)Tem=Proj+1;Proj+1=Proj;Proj=Tem;rm_bchange=false;/end 排序第四章 調(diào)試分析與測試結果 高響應比優(yōu)先算法 輪轉(zhuǎn)調(diào)度算法 短進程優(yōu)先算法 進程的阻塞與喚醒 差錯控制第五章 總結通過此次課程設計,更深入的理解了各個進程調(diào)度算法,及實現(xiàn)過程。熟悉了MFC環(huán)境的使用。增進了VC編程的水平。對進程或作業(yè)先來先服務、短作業(yè)優(yōu)先算法,最高響應比算法,高
9、優(yōu)先權、按時間片輪轉(zhuǎn)調(diào)度算法以及進程調(diào)度的概念和算法,有了更深入的認識!初步理解了操作系統(tǒng)對于作業(yè)處理的基本思想!并加深了我對于操作系統(tǒng)理論的理解。在此過程中,遇到了困難,能及時請教同學,查詢相關資料,及時解決了問題,但仍有不足之處,將會在今后學習中更加努力。第六章 參考文獻計算機操作系統(tǒng)(第三版)湯子瀛 西安電子科技大學出版社 操作系統(tǒng)教程方敏編 西安電子科技大學出版社 操作系統(tǒng)原理與實踐教程周湘貞、曾憲權 清華出版社 數(shù)據(jù)結構(C語言版)嚴蔚敏 清華大學出版社深入淺出MFC(第2版)侯俊杰 華中科技大學出版社第七章 附錄pcb1.cpp:#include stdafx.h#include
10、pcb1.h#include pcb1Dlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifBEGIN_MESSAGE_MAP(CPcb1App, CWinApp)ON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()CPcb1App:CPcb1App()CPcb1App theApp;BOOL CPcb1App:InitInstance()AfxEnableControlContainer();#ifdef _AF
11、XDLLEnable3dControls();#elseEnable3dControlsStatic();#endifCPcb1Dlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)else if (nResponse = IDCANCEL)return FALSE;Pcb1.rc- IDD_PCB1_DIALOG:pcb1Dlg.cpp:#include stdafx.h#include pcb1.h#include pcb1Dlg.h#ifdef _DEBUG#define new DEBU
12、G_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifprogress Pro100; /就緒隊列progress Zusai100; /阻塞隊列static int ProNum=0; /用來表示第n就緒進程static int ZusaiNum=0; /用來表示第n阻塞進程static int id=0;int m_bchange;class CAboutDlg : public CDialogpublic:CAboutDlg();enum IDD = IDD_ABOUTBOX ;protected:virtual void D
13、oDataExchange(CDataExchange* pDX); protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CPcb1Dlg:CPcb1Dlg(CWnd* pParent ): CDialog(CPcb1Dlg:IDD,
14、 pParent)m_Jincheng = _T();m_Jiuxu = _T();m_Wancheng = _T();m_Time = _T();m_Zhixing = _T();m_Zusai = _T();m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CPcb1Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_PROGRESS1, m_progress);DDX_Text(pDX, IDC_EDIT_Jinch
15、eng, m_Jincheng);DDX_Text(pDX, IDC_EDIT_Jiuxu, m_Jiuxu);DDX_Text(pDX, IDC_EDIT_Wancheng, m_Wancheng);DDX_Text(pDX, IDC_EDIT_Time, m_Time);DDX_Text(pDX, IDC_EDIT_Zhixing, m_Zhixing);DDX_Text(pDX, IDC_EDIT_Zusai, m_Zusai);BEGIN_MESSAGE_MAP(CPcb1Dlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDR
16、AGICON()ON_BN_CLICKED(IDC_BUTTON_Huanxiang, OnBUTTONHuanxiang)ON_BN_CLICKED(IDC_BUTTON_Qingkong, OnBUTTONQingkong)ON_BN_CLICKED(IDC_BUTTON_Tianjia, OnBUTTONTianjia)ON_BN_CLICKED(IDC_BUTTON_Zuisai, OnBUTTONZuisai)ON_WM_TIMER()END_MESSAGE_MAP()BOOL CPcb1Dlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(
17、IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);(CButton * )GetDlgItem( IDC_RADIO1 )-SetCheck( TRUE );return TRUE; void CPcb1Dlg:OnSysCommand(UINT nID, LPARAM
18、 lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CPcb1Dlg:OnPaint() if (IsIconic()CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMet
19、rics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CPcb1Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/喚醒按扭void CPcb1Dlg:OnBUTTONHuanxiang() if ( ZusaiNum=0 )Message
20、Box(阻塞隊列為空,沒有可喚醒的進程,溫馨提示,MB_OK|MB_ICONINFORMATION);return; ProProNum=Zusai0;int atime=this-getArrTime();ProProNum.Rp=atime;ZusaiNum-; ProNum+;/阻塞的隊列元素都前移一位for (int i=0;iZusaiNum;i+)Zusaii=Zusaii+1;/顯示就緒m_Jiuxu.Empty();CString T;for (i=1;iSetWindowText(m_Jiuxu);/顯示阻塞m_Zusai.Empty();for (i=0;iSetWindo
21、wText(m_Zusai);m_bchange=true;SetTimer(1,1000,NULL);/清空按扭void CPcb1Dlg:OnBUTTONQingkong() m_Wancheng.Empty();UpdateData(false);/添加按扭 void CPcb1Dlg:OnBUTTONTianjia() UpdateData(true); if ( m_Jincheng.IsEmpty() )MessageBox(請輸入進程名稱);GetDlgItem(IDC_EDIT_Jincheng)-SetFocus();return;if ( m_Time.IsEmpty()
22、)MessageBox(請輸入服務時間);GetDlgItem(IDC_EDIT_Time)-SetFocus();return; int atime=this-getArrTime();ProProNum.Name=m_Jincheng;ProProN=&m_progress;ProProNum.RemainT=atoi(m_Time);ProProNum.ServiceT=atoi(m_Time);ProProNum.RunningT=0;ProProNum.Start=(CTime:GetCurrentTime().Format(%H:%M:%S);ProProNum.Rp=
23、atime;ProProNum.id=id+1;m_Jincheng.Empty();m_Time.Empty();UpdateData(false);id+;ProNum+; if(ProNum1) CString Temple=;for ( int i=1;iSetWindowText(m_Jiuxu); SetTimer(1,1000,NULL);m_bchange=true;/阻塞按扭void CPcb1Dlg:OnBUTTONZuisai() int i;if ( ProNum=0 )KillTimer(1);MessageBox(當前沒有進程在執(zhí)行,請?zhí)砑踊騿拘堰M程);return
24、;elseZusaiZusaiNum+=Pro0;m_Zusai.Empty();CString Temple=;/顯示阻塞for ( i=0;iSetWindowText(m_Zusai);/更新進度條,將進程條和運行清空P-SetPos(0);GetDlgItem(IDC_EDIT_Zhixing)-SetWindowText(_T();ProNum-;if ( ProNumgetArrTime();/因為第一個元素空了,所以數(shù)組要前移double temp=0; double High; int highidex; for(i=1;i=temp)temp=High;high
25、idex=i;Pro0=Prohighidex;for ( i=highidex;iProNum;i+)Proi=Proi+1;for (i=highidex;iSetRange(0,Pro0.ServiceT);Pro0.RemainT-;Pro0.RunningT+;m_Zhixing.Format(標識符:%d 進程名稱:%s 創(chuàng)建時間:%s 需要時間:%d秒 剩余時間:%d秒 已運行時間:%d秒 優(yōu)先權:%frn, Pro0.id,Pro0.Name,Pro0.Start,Pro0.ServiceT,Pro0.RemainT,Pro0.RunningT,Pro0.prio);GetDl
26、gItem(IDC_EDIT_Zhixing)-SetWindowText(m_Zhixing);P-SetPos(Pro0.RunningT);/如果添加了新的成員,重新排序 if ( m_bchange )if(iRadioButton=IDC_RADIO1)/計算優(yōu)先級for (int i=1;iProNum;i+)float sum=0;for (int j=0;ji;j+)sum+=Proj.RemainT;Proi.prio=sum/Proi.ServiceT;/end for/根據(jù)優(yōu)先級排序progress Tem;for ( i=0;iProNum-1;i+)fo
27、r (int j=0;jProNum-1-i;j+)if (Proj.prioProj+1.prio)Tem=Proj+1;Proj+1=Proj;Proj=Tem;m_bchange=false;/end 排序if(iRadioButton=IDC_RADIO2)progress Tem;for ( int i=0;iSetRange(0,Pro0.ServiceT);Pro0.RemainT-;Pro0.RunningT+;m_Zhixing.Format(標識符:%d 進程名稱:%s 創(chuàng)建時間:%s 需要時間:%d秒 剩余時間:%d秒 已運行時間:%d秒 優(yōu)先權:%frn, Pro0.i
28、d,Pro0.Name,Pro0.Start,Pro0.ServiceT,Pro0.RemainT,Pro0.RunningT,Pro0.prio);GetDlgItem(IDC_EDIT_Zhixing)-SetWindowText(m_Zhixing);P-SetPos(Pro0.RunningT);/end 排序if(iRadioButton=IDC_RADIO3)progress Tem;for (int i=0;iProNum-1;i+)for (int j=0;jProj+1.RemainT)Tem=Proj+1;Proj+1=Proj;Proj=Tem;m_bcha
29、nge=false;/end 排序/如果已經(jīng)完成if ( Pro0.RemainTSetPos(0);UpdateData(false);GetDlgItem(IDC_EDIT_Wancheng)-SetWindowText(m_Wancheng);/如果沒有就緒的進程if( ProNum=0 )KillTimer(1);GetDlgItem(IDC_EDIT_Zhixing)-SetWindowText(_T();MessageBox(當前沒有進程在執(zhí)行,請?zhí)砑踊騿拘堰M程!);/還有就緒的進程elseint i;int atime=this-getArrTime();/因為第一個元素空了,所
30、以數(shù)組要前移double temp=0; double High; int highidex; for(i=1;i=temp)temp=High;highidex=i;Pro0=Prohighidex;for ( i=highidex;iProNum;i+)Proi=Proi+1;CString Temple=;for ( i=1;iSetWindowText(m_Jiuxu);m_bchange=true;/end 完成m_Jiuxu=;CString Temple=;for ( int i=1;iSetWindowText(m_Jiuxu);CDialog:OnTimer(nIDEvent
31、);StdAfx.cpp:#include stdafx.hpcb1.h:#if !defined(AFX_PCB1_H_D0EC9916_5956_47D0_A87D_BF26EFBECAD7_INCLUDED_)#define AFX_PCB1_H_D0EC9916_5956_47D0_A87D_BF26EFBECAD7_INCLUDED_#if _MSC_VER 1000#pragma once#endif #ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include
32、resource.hclass CPcb1App : public CWinApppublic:CPcb1App();public:virtual BOOL InitInstance();DECLARE_MESSAGE_MAP();#endifpcb1Dlg.h:#if !defined(AFX_PCB1DLG_H_85A9A06E_CC92_4F5B_B772_4E1D184B7433_INCLUDED_)#define AFX_PCB1DLG_H_85A9A06E_CC92_4F5B_B772_4E1D184B7433_INCLUDED_#if _MSC_VER 1000#pragma o
33、nce#endif struct progressCString Name; /進程名稱CString Start;/創(chuàng)建時間int ServiceT;/服務時間int RunningT;/消逝時間int RemainT;/剩余時間int id;/進程標識符CProgressCtrl* pro;/指向進度條的指針int Rp;/進程成為就緒進程的時間float prio;/進程優(yōu)先權;class CPcb1Dlg : public CDialogpublic:int getArrTime();CPcb1Dlg(CWnd* pParent = NULL);enum IDD = IDD_PCB1_
34、DIALOG ;CProgressCtrlm_progress;CStringm_Jincheng;CStringm_Jiuxu;CStringm_Wancheng;CStringm_Time;CStringm_Zhixing;CStringm_Zusai;protected:virtual void DoDataExchange(CDataExchange* pDX);protected:HICON m_hIcon;virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnBUTTONHuanxiang();afx_msg void OnBUTTONQingkong();afx_msg void OnBUTTONTianjia();afx_msg void OnBUTTONZuisai();afx_msg void OnTimer(UINT nIDEvent);DECLARE_MESSAGE_MAP();#endifResource.h:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設施運營績效評價體系構建考核試卷
- 企業(yè)勞務派遣優(yōu)勢分析考核試卷
- 投資保護與東道國政策環(huán)境適應性分析考核試卷
- 全球低碳經(jīng)濟政策協(xié)調(diào)與合作考核試卷
- 部編九年級語文月考試卷
- 2025年中國LED背鏡燈數(shù)據(jù)監(jiān)測研究報告
- 2025年中國CD片盒數(shù)據(jù)監(jiān)測報告
- 2025年中國2.4-二氯氯芐數(shù)據(jù)監(jiān)測報告
- 2025至2030年中國黃旗蟒市場分析及競爭策略研究報告
- 2025至2030年中國除草劑氟磺胺草醚原藥市場分析及競爭策略研究報告
- 園林工程分部(子分部)工程、分項工程劃分
- 【MOOC】人像攝影-中國傳媒大學 中國大學慕課MOOC答案
- 派出所應對校園突發(fā)事件應急預案
- 燃氣管道防火防爆安全方案
- 網(wǎng)絡安全漏洞挖掘與報告
- 埋地消防管滲漏整改工程施工方案
- 裝飾裝修施工人員安全知識培訓考試試卷及答案
- 2023年上海市普通高中學業(yè)水平合格性考試地理試題及答案
- 宿舍消防安全培訓課件
- 2024版小學一年級下冊綜合實踐活動模擬試卷
- 江蘇2024年江蘇省美術館招聘筆試歷年典型考題及考點附答案解析
評論
0/150
提交評論