操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬.doc_第1頁
操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬.doc_第2頁
操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬.doc_第3頁
操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬.doc_第4頁
操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

題目:進(jìn)程管理與調(diào)度模擬系統(tǒng)一、 實驗?zāi)康?、 掌握進(jìn)程在三種基本狀態(tài)中變化的原理與過程。2、 掌握“先來先服務(wù)”、“短作業(yè)優(yōu)先”、“優(yōu)先級”、“時間片輪轉(zhuǎn)”調(diào)度算法的原理與特點。二、 實驗內(nèi)容:采用面向?qū)ο蟮某绦蛟O(shè)計方法來設(shè)計進(jìn)程管理與調(diào)度模擬系統(tǒng)。要寫出各個程序模塊必要分析說明。三、 實驗分析:在進(jìn)程管理與調(diào)度模擬系統(tǒng)中,共涉及到兩個類和一個結(jié)構(gòu)體:PCB結(jié)構(gòu)體、鏈隊列類和OS類。操作系統(tǒng)啟動后,在系統(tǒng)內(nèi)將存在PCB池,用來存放進(jìn)程的PCB結(jié)構(gòu),PCB池的大小決定了系統(tǒng)中能同時存在的進(jìn)程數(shù)量。在本系統(tǒng)中,假定系統(tǒng)能同時存在的進(jìn)程數(shù)為20個,用一個PCB的數(shù)組來表示。PCB池中的PCB會有四種狀態(tài):運行狀態(tài)、就緒狀態(tài)、阻塞狀態(tài)和空閑狀態(tài),所以,在操作系統(tǒng)中將會有四種隊列:運行隊列、就緒對列、阻塞隊列和空閑隊列。進(jìn)程的創(chuàng)建隨著操作系統(tǒng)的調(diào)度,將會在這四種隊列中變遷。四、 實驗過程:1、 設(shè)計PCB和鏈表A、 PCB采用結(jié)構(gòu)體設(shè)計,用于描述進(jìn)程運行所需的全部信息,作為OS對并發(fā)執(zhí)行的進(jìn)程進(jìn)行控制和管理的根據(jù),其貫穿進(jìn)程的整個生命周期,是進(jìn)程存在的唯一標(biāo)志。其結(jié)構(gòu)圖如下:idnamestatusnextpriorityIOdeviceIOreqblockfortimereqtime_cpuaddressId:進(jìn)程內(nèi)部標(biāo)識符。用于標(biāo)識一個進(jìn)程 name:進(jìn)程外部標(biāo)識符。也用于標(biāo)識一個進(jìn)程。Status:進(jìn)程當(dāng)前狀態(tài)。作為進(jìn)程調(diào)度的參考。 Priority:進(jìn)程優(yōu)先級。作為進(jìn)程調(diào)度的參考。Next:狀態(tài)指針。用于指向同狀態(tài)的下一個PCBIodevice:外設(shè)清單。作為進(jìn)程調(diào)度的參考。 Blockfor:阻塞原因,作為喚醒進(jìn)程的標(biāo)志。Ioreq:進(jìn)程還需要的外部設(shè)備,作為進(jìn)程調(diào)度的參考。Timereq:進(jìn)程要求的執(zhí)行時間,用于控制進(jìn)程的運行。time_cpu:已經(jīng)執(zhí)行的時間,用于控制進(jìn)程的運行。Address:地址指針。通過它來運行模擬進(jìn)程要執(zhí)行的代碼。B、 鏈表設(shè)計成一個類(List)。表的示意圖如下:就緒隊列指針阻塞隊列指針空閑隊列指針執(zhí)行指針C、PCB1PCB2PCB3PCB4PCB5PCB6PCB7PCB8PCB943087901鏈表類的數(shù)據(jù)及其所支持的操作如下圖:Listint NodeNum; char *status;PCB *ListHead; PCB *ListTail;Status AppendPCB(PCB *datap);PCB *DeletePCB(int pid);void DisplayList();void DisplayPCB(PCB *pcb);PCB* FindPCB(int pid,PCB* &pre);PCB* FindPCB(int pnum);char* GetListStatus();int GetNodeNum();Status isEmpty();void SetNodeNum(int k);Status GetFirstPCB(PCB* &pcb);void SetStatus(char *s);void SetListHead(PCB*pcb);void SetListTail(PCB*pcb);List(char* nodetype=就緒);virtual List();各操作函數(shù)功能說明如下:Status AppendPCB(PCB *datap);將指定PCB加入鏈表。PCB *DeletePCB(int pid);刪除指定的PCB結(jié)點void DisplayList(); 顯示整個鏈表void DisplayPCB(PCB *pcb);顯示PCB中的詳細(xì)信息PCB* FindPCB(int pid,PCB* &pre);查找指定的結(jié)點PCB* FindPCB(int pnum);查找鏈表中的第pnum個結(jié)點char* GetListStatus();取得當(dāng)前鏈表PCB結(jié)點的狀態(tài)int GetNodeNum();取得鏈表的結(jié)點數(shù)void SetNodeNum(int k);設(shè)置鏈表結(jié)點數(shù)Status isEmpty();判斷鏈表是否為空Status GetFirstPCB(PCB* &pcb);取第一個結(jié)點void SetStatus(char *s);設(shè)置狀態(tài)標(biāo)識void SetListHead(PCB*pcb);設(shè)置頭指針void SetListTail(PCB*pcb);設(shè)置尾指針List(char* nodetype=就緒);構(gòu)造函數(shù),初始化virtual List();虛函數(shù)鏈表的構(gòu)造函數(shù):void List:SetNodeNum(int k) 設(shè)置鏈表結(jié)點數(shù)NodeNum=k; return; void List:SetStatus(char *s);設(shè)置狀態(tài)標(biāo)識status=s; return; void List:SetListHead(PCB*pcb) 設(shè)置頭指針ListHead=pcb; void List:SetListTail(PCB*pcb) 設(shè)置尾指針ListTail=pcb; 完全代碼如下:/ Process.cpp : Defines the entry point for the console application./#include stdafx.h#include List.h#include Os.h#include #include #include #include #include using namespace std;void displayMenu()cout操作系統(tǒng)進(jìn)程管理與調(diào)度的模擬endl;cout1.先來先服務(wù)endl;cout2.最短作業(yè)優(yōu)先endl;cout3.優(yōu)先級算法endl;cout4.時間片輪轉(zhuǎn)算法endl;cout0.退出endl;cout請輸入您的選擇:1為缺省值-;int main(int argc, char* argv)Os os;int choice,max,i=0;char name80=Process;char s10,temp20;while (1)system(cls);displayMenu();scanf(%d,&choice);switch(choice)case 0:exit(0);break;case 1:os.SetStrategy(0);break;case 2:os.SetStrategy(1);break;case 3:os.SetStrategy(2);break;case 4:os.SetStrategy(3);break;default:coutn你的選擇不正確,將以缺省值運行endl;os.SetStrategy(0);break;coutn請輸入你想建立的進(jìn)程數(shù)量(最大20):;scanf(%d,&max);if (max20)coutn你的輸入不正確,缺省為建立10個進(jìn)程.endl;max=10;cout19|strlen(name)=0)coutn你的輸入不正確,將以缺省前綴Process*運行endl;strcpy(name,Process);coutn按任意鍵運行.endl;getch();while(imax)i+;_itoa(i,s,10);/系統(tǒng)函數(shù),將數(shù)轉(zhuǎn)換成10進(jìn)制strcpy(temp,name);strcat(temp,s);os.CreateProcess(temp);/couttemp 1000#pragma once#endif / _MSC_VER 1000#include ConstVar.h#include using namespace std;class Os;typedef struct PCBint id;/進(jìn)程標(biāo)識符;char *name;/進(jìn)程名字;PCBstatus status;/進(jìn)程當(dāng)前狀態(tài);struct PCB *next;/指向同狀態(tài)的下一個PCBint priority;/進(jìn)程優(yōu)先級;int IOdevice;/外設(shè)清單int IOreq;/進(jìn)程還需要的外部設(shè)備;int blockfor;/阻塞原因;int timereq;/進(jìn)程要求的執(zhí)行時間int time_cpu;/已經(jīng)執(zhí)行的時間;void (*fuction)(Os *);/模擬進(jìn)程要執(zhí)行的代碼的地址PCB;class List private:int NodeNum;char *status;/鏈表的狀態(tài)PCB *ListHead;/指向鏈表的第一個進(jìn)程PCB *ListTail;/指向鏈表的最后一個進(jìn)程public:Status AppendPCB(PCB *datap);/將指定PCB加入鏈表PCB *DeletePCB(int pid);/刪除指定的PCB結(jié)點void DisplayList();/顯示整個鏈表void DisplayPCB(PCB *pcb);/顯示PCB中的詳細(xì)信息PCB* FindPCB(int pid,PCB* &pre);/查找指定的結(jié)點PCB* FindPCB(int pnum);/查找鏈表中的第pnum個結(jié)點char* GetListStatus();/取得當(dāng)前鏈表PCB結(jié)點的狀態(tài)int GetNodeNum();/取得鏈表的結(jié)點數(shù)void SetNodeNum(int k);/設(shè)置鏈表結(jié)點數(shù)Status isEmpty();/判斷鏈表是否為空Status GetFirstPCB(PCB* &pcb);/取第一個結(jié)點void SetStatus(char *s);/設(shè)置狀態(tài)標(biāo)識void SetListHead(PCB*pcb);/設(shè)置頭指針void SetListTail(PCB*pcb);/設(shè)置尾指針List(char* nodetype=就緒);/構(gòu)造函數(shù),初始化virtual List();#endif / !defined(AFX_LIST_H_6D78FEEC_384C_415E_97A1_83FD6734BF4C_INCLUDED_)/ Os.h: interface for the Os class./#include ConstVar.h#include List.h#if !defined(AFX_OS_H_C7DDDD64_40F9_409F_A5C4_F3B92D488D50_INCLUDED_)#define AFX_OS_H_C7DDDD64_40F9_409F_A5C4_F3B92D488D50_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000class Os public:PCB pcbPCBNUM;List Running,Ready,Blocked,Free;int strategy;public:void initPCB(PCB *pcb);void initOS();Status CreateProcess(char *name);Status DeleteProcess(int id);Status BlockProcess();Status WakeupProcess();void InsertIntoReady(PCB* pcb);friend void program(Os *os);public:void scheduler();void SetStrategy(int strat);Os();virtual Os();#endif / !defined(AFX_OS_H_C7DDDD64_40F9_409F_A5C4_F3B92D488D50_INCLUDED_)/ List.h: interface for the List class./#if !defined(AFX_LIST_H_6D78FEEC_384C_415E_97A1_83FD6734BF4C_INCLUDED_)#define AFX_LIST_H_6D78FEEC_384C_415E_97A1_83FD6734BF4C_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#include ConstVar.h#include using namespace std;class Os;typedef struct PCBint id;/進(jìn)程標(biāo)識符;char *name;/進(jìn)程名字;PCBstatus status;/進(jìn)程當(dāng)前狀態(tài);struct PCB *next;/指向同狀態(tài)的下一個PCBint priority;/進(jìn)程優(yōu)先級;int IOdevice;/外設(shè)清單int IOreq;/進(jìn)程還需要的外部設(shè)備;int blockfor;/阻塞原因;int timereq;/進(jìn)程要求的執(zhí)行時間int time_cpu;/已經(jīng)執(zhí)行的時間;void (*fuction)(Os *);/模擬進(jìn)程要執(zhí)行的代碼的地址PCB;class List private:int NodeNum;char *status;/鏈表的狀態(tài)PCB *ListHead;/指向鏈表的第一個進(jìn)程PCB *ListTail;/指向

溫馨提示

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

評論

0/150

提交評論