操作系统进程管理与调度的模拟_第1页
操作系统进程管理与调度的模拟_第2页
操作系统进程管理与调度的模拟_第3页
操作系统进程管理与调度的模拟_第4页
操作系统进程管理与调度的模拟_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:进程管理与调度模拟系统一、 实验目的1、 掌握进程在三种基本状态中变化的原理与过程。2、 掌握“先来先服务”、“短作业优先”、“优先级”、“时间片轮转”调度算法的原理与特点。二、 实验内容:采用面向对象的程序设计方法来设计进程管理与调度模拟系统。要写出各个程序模块必要分析说明。三、 实验分析:在进程管理与调度模拟系统中,共涉及到两个类和一个结构体:PCB结构体、链队列类和OS类。操作系统启动后,在系统内将存在PCB池,用来存放进程的PCB结构,PCB池的大小决定了系统中能同时存在的进程数量。在本系统中,假定系统能同时存在的进程数为20个,用一个PCB的数组来表示。PCB池中的PCB会有四

2、种状态:运行状态、就绪状态、阻塞状态和空闲状态,所以,在操作系统中将会有四种队列:运行队列、就绪对列、阻塞队列和空闲队列。进程的创建随着操作系统的调度,将会在这四种队列中变迁。四、 实验过程:1、 设计PCB和链表A、 PCB采用结构体设计,用于描述进程运行所需的全部信息,作为OS对并发执行的进程进行控制和管理的根据,其贯穿进程的整个生命周期,是进程存在的唯一标志。其结构图如下:idnamestatusnextpriorityIOdeviceIOreqblockfortimereqtime_cpuaddressId:进程内部标识符。用于标识一个进程 name:进程外部标识符。也用于标识一个进程

3、。Status:进程当前状态。作为进程调度的参考。 Priority:进程优先级。作为进程调度的参考。Next:状态指针。用于指向同状态的下一个PCBIodevice:外设清单。作为进程调度的参考。 Blockfor:阻塞原因,作为唤醒进程的标志。Ioreq:进程还需要的外部设备,作为进程调度的参考。Timereq:进程要求的执行时间,用于控制进程的运行。time_cpu:已经执行的时间,用于控制进程的运行。Address:地址指针。通过它来运行模拟进程要执行的代码。B、 链表设计成一个类(List)。表的示意图如下:就绪队列指针阻塞队列指针空闲队列指针执行指针C、PCB1PCB2PCB3PC

4、B4PCB5PCB6PCB7PCB8PCB943087901链表类的数据及其所支持的操作如下图: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();S

5、tatus 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();各操作函数功能说明如下:Status AppendPCB(PCB *datap);将指定PCB加入链表。PCB *DeletePCB(int pid);删除指定的PCB结点void DisplayList(); 显示整个链表void

6、 DisplayPCB(PCB *pcb);显示PCB中的详细信息PCB* FindPCB(int pid,PCB* &pre);查找指定的结点PCB* FindPCB(int pnum);查找链表中的第pnum个结点char* GetListStatus();取得当前链表PCB结点的状态int GetNodeNum();取得链表的结点数void SetNodeNum(int k);设置链表结点数Status isEmpty();判断链表是否为空Status GetFirstPCB(PCB* &pcb);取第一个结点void SetStatus(char *s);设置状态标识void SetL

7、istHead(PCB*pcb);设置头指针void SetListTail(PCB*pcb);设置尾指针List(char* nodetype=就绪);构造函数,初始化virtual List();虚函数链表的构造函数:void List:SetNodeNum(int k) 设置链表结点数NodeNum=k; return; void List:SetStatus(char *s);设置状态标识status=s; return; void List:SetListHead(PCB*pcb) 设置头指针ListHead=pcb; void List:SetListTail(PCB*pcb) 设

8、置尾指针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操作系统进程管理与调度的模拟endl;cout1.先来先服务endl;cout2.最短作业优先endl;cout3.优先级算法endl;cout4.

9、时间片轮转算法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.SetSt

10、rategy(2);break;case 4:os.SetStrategy(3);break;default:coutn你的选择不正确,将以缺省值运行endl;os.SetStrategy(0);break;coutn请输入你想建立的进程数量(最大20):;scanf(%d,&max);if (max20)coutn你的输入不正确,缺省为建立10个进程.endl;max=10;cout19|strlen(name)=0)coutn你的输入不正确,将以缺省前缀Process*运行endl;strcpy(name,Process);coutn按任意键运行.endl;getch();while(im

11、ax)i+;_itoa(i,s,10);/系统函数,将数转换成10进制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;/进程标识符;char *name;/进程名字;PCBstatus status;/进程当前状态;struct PCB *next;/指向同状态的下一个PCB

12、int priority;/进程优先级;int IOdevice;/外设清单int IOreq;/进程还需要的外部设备;int blockfor;/阻塞原因;int timereq;/进程要求的执行时间int time_cpu;/已经执行的时间;void (*fuction)(Os *);/模拟进程要执行的代码的地址PCB;class List private:int NodeNum;char *status;/链表的状态PCB *ListHead;/指向链表的第一个进程PCB *ListTail;/指向链表的最后一个进程public:Status AppendPCB(PCB *datap);

13、/将指定PCB加入链表PCB *DeletePCB(int pid);/删除指定的PCB结点void DisplayList();/显示整个链表void DisplayPCB(PCB *pcb);/显示PCB中的详细信息PCB* FindPCB(int pid,PCB* &pre);/查找指定的结点PCB* FindPCB(int pnum);/查找链表中的第pnum个结点char* GetListStatus();/取得当前链表PCB结点的状态int GetNodeNum();/取得链表的结点数void SetNodeNum(int k);/设置链表结点数Status isEmpty();/

14、判断链表是否为空Status GetFirstPCB(PCB* &pcb);/取第一个结点void SetStatus(char *s);/设置状态标识void SetListHead(PCB*pcb);/设置头指针void SetListTail(PCB*pcb);/设置尾指针List(char* nodetype=就绪);/构造函数,初始化virtual List();#endif / !defined(AFX_LIST_H_6D78FEEC_384C_415E_97A1_83FD6734BF4C_INCLUDED_)/ Os.h: interface for the Os class./

15、#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:v

16、oid 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_C

17、7DDDD64_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

18、 using namespace std;class Os;typedef struct PCBint id;/进程标识符;char *name;/进程名字;PCBstatus status;/进程当前状态;struct PCB *next;/指向同状态的下一个PCBint priority;/进程优先级;int IOdevice;/外设清单int IOreq;/进程还需要的外部设备;int blockfor;/阻塞原因;int timereq;/进程要求的执行时间int time_cpu;/已经执行的时间;void (*fuction)(Os *);/模拟进程要执行的代码的地址PCB;class List private:int NodeNum;char *status;/链表的状态PCB *ListHead;/指向链表的第一个进程PCB *ListTail;/指向

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论