进程管理系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、设计系统目的 (1)
二、设计系统要求 (1)
三、系统分析 (1)
四、系统设计 (1)
五、程序设计流程图 (5)
六、源程序清单 (5)
七、调试过程中的问题及系统测试情况 (12)
1、调试过程 (12)
2、系统测试结果 (12)
八、系统设计总结 (14)
一、设计系统目的
本设计的目的是加深对进程概念及进程管理各部分内容的理解,熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构实施。
二、设计系统要求
设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系可选。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
三、系统分析
本系统实现的功能有
1、进程控制和同步等
可以控制进程的就绪执行和阻塞三种状态等基本功能。
2、进程调度
调度算法采用的是先来先服务算法。
3、进程在运行过程中状态变化的屏幕输出
输出的内容包括—就绪的进程队列,当前cup正在执行的进程,被阻塞的进程队
列。
四、系统设计
本系统所包括的数据结构是对列类
本系统由于需要输出就绪队列,执行队列,阻塞对列,故需要利用对列来实现。
最好利用队列类来实现,这样可以充分利用类的继承来简化程序。
队列类的定义如下
class queue
{
public:
queue():rear(NULL),front(NULL){};
~queue();
void enqueue( char &item);
char dequeue();
void del(char item);
void display();
int find(char item);
int isempty(){return front==NULL;}
private:
queuenode *front,*rear;
};
队列类的析构函数如下
queue::~queue()
{
queuenode * p;
while(front!=NULL)
{
p=front;front=front->link;delete p;
}
队列类的成员函数的定义如下:
void queue::enqueue(char &item)
{
if(front==NULL)
front=rear=new queuenode(item,NULL);
else
rear=rear->link=new queuenode(item,NULL);
}
char queue::dequeue()
{
queuenode *p=front; char f=p->data;
front=front->link; delete p;
return f;
}
void queue::display() {
queuenode *p;
p=front;
while(p!=NULL)
{
cout<
p=p->link;
}
cout<<"NULL";
}
queue::find(char item) {
queuenode *w;
w=front;
M:while(w!=NULL)
{
if(item==w->data) {
return 1;
break;
}
else
{
w=w->link;
goto M;
}
}
if(w==NULL)
return 0;
}
void queue::del( char item)
{
queuenode *q,*b;
q=front;
while(q->data!=item)
{
b=q;
q=q->link;
}
if(q==front)
{
front=front->link;
delete q;}
else
if(q==rear)
{
rear=b;rear->link=NULL;delete q;}
else
{
b->link=q->link;
delete q;}
}
五、程序设计流程图
六、源程序清单
源程序如下
#include
class queue;
class queuenode{
friend class queue; /*定义队列的友类*/
private:
char data;
queuenode * link;
queuenode (char d=0,queuenode * l=NULL): data(d),link(l){} };