进程管理系统设计.docx
- 文档编号:16511610
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:15
- 大小:18.96KB
进程管理系统设计.docx
《进程管理系统设计.docx》由会员分享,可在线阅读,更多相关《进程管理系统设计.docx(15页珍藏版)》请在冰点文库上搜索。
进程管理系统设计
一、设计系统目的
本设计的目的是加深对进程概念及进程管理各局部容的理解,熟悉进程管
理中主要数据构造的设计及进程调度算法、进程控制机构、同步机构及通讯机构实施。
二、设计系统要求
设计一个允许n个进程并发运行的进程管理模拟系统。
该系统包括有简单的进
程控制、同步与通讯机构,其进程调度算法可任意选择。
每个进程用一个PCB表示,其容根据具体情况设置。
各进程之间有一定的同步关系可选。
系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
三、系统分析
本系统实现的功能有
1、进程控制和同步等
可以控制进程的就绪执行和阻塞三种状态等根本功能。
2、进程调度
调度算法采用的是先来先效劳算法。
3、进程在运行过程中状态变化的屏幕输出
输出的容包括—就绪的进程队列,当前cup正在执行的进程,被阻塞的进程队
列。
四、系统设计
本系统所包括的数据构造是对列类
本系统由于需要输出就绪队列,执行队列,阻塞对列,故需要利用对列来实现。
最好利用队列类来实现,这样可以充分利用类的继承来简化程序。
队列类的定义如下
classqueue
{
public:
queue():
rear(NULL),front(NULL){};
~queue();
voidenqueue(char&item);
chardequeue();
voiddel(charitem);
voiddisplay();
intfind(charitem);
intisempty(){returnfront==NULL;}
private:
queuenode*front,*rear;
};
队列类的析构函数如下
queue:
:
~queue()
{
queuenode*p;
while(front!
=NULL)
{
p=front;front=front->link;deletep;
}
队列类的成员函数的定义如下:
voidqueue:
:
enqueue(char&item)
{
if(front==NULL)
front=rear=newqueuenode(item,NULL);
else
rear=rear->link=newqueuenode(item,NULL);
}
charqueue:
:
dequeue()
{
queuenode*p=front;
charf=p->data;
front=front->link;
deletep;
returnf;
}
voidqueue:
:
display()
{
queuenode*p;
p=front;
while(p!
=NULL)
{
cout<
p=p->link;
}
cout<<"NULL";
}
queue:
:
find(charitem)
{
queuenode*w;
w=front;
M:
while(w!
=NULL)
{
if(item==w->data)
{
return1;
break;
}
else
{
w=w->link;
gotoM;
}
}
if(w==NULL)
return0;
}
voidqueue:
:
del(charitem)
{
queuenode*q,*b;
q=front;
while(q->data!
=item)
{
b=q;
q=q->link;
}
if(q==front)
{
front=front->link;
deleteq;}
else
if(q==rear)
{
rear=b;rear->link=NULL;deleteq;}
else
{
b->link=q->link;
deleteq;}
}
五、程序设计流程图
六、源程序清单
源程序如下
*include
classqueue;
classqueuenode{
friendclassqueue;/*定义队列的友类*/
private:
chardata;
queuenode*link;
queuenode(chard=0,queuenode*l=NULL):
data(d),link(l){}
};
classqueue{/*定义队列类以利于执行就绪*/
/*阻塞队列的继承*/
public:
queue():
rear(NULL),front(NULL){};/*构造函数*/
~queue();
voidenqueue(char&item);
chardequeue();
voiddel(charitem);
voiddisplay();
intfind(charitem);
intisempty(){returnfront==NULL;}/*判断队列是否为空*/
private:
queuenode*front,*rear;/*队列的头指针和指向下一结点的指针*/
};
queue:
:
~queue()/*定义析构函数*/
{
queuenode*p;
while(front!
=NULL){
p=front;front=front->link;deletep;
}
}
voidqueue:
:
enqueue(char&item)/*定义入队列函数*/
{
if(front==NULL)
front=rear=newqueuenode(item,NULL);
else
rear=rear->link=newqueuenode(item,NULL);
}
charqueue:
:
dequeue()/*出队列函数*/
{
queuenode*p=front;
charf=p->data;front=front->link;
deletep;
returnf;
}
voidqueue:
:
display(){
queuenode*p;
p=front;
while(p!
=NULL)/*如果队列非空输出数据并使指针指向*/
/*下一数据*/
{cout<
p=p->link;
}
cout<<"NULL";
}
queue:
:
find(charitem)/*查找队列中是否包含某值*/
{queuenode*w;
w=front;
M:
while(w!
=NULL)
{
if(item==w->data)
{return1;break;
}
else
{w=w->link;
gotoM;
}
}
if(w==NULL)
return0;
}
voidqueue:
:
del(charitem)/*删除某值的函数*/
{queuenode*q,*b;
q=front;
while(q->data!
=item)
{b=q;
q=q->link;
}
if(q==front)
{front=front->link;deleteq;}
else
if(q==rear)
{rear=b;rear->link=NULL;
deleteq;}
else
{b->link=q->link;
deleteq;}
}
voidmain()
{
intn;
chara;
cout<<"\n*********************进程管理小模拟系统
********************\n"< queuezhixing,jiuxu,zuse; cout<<"\n**注意: ***\n1.假设想完毕输 入请输入R。 \n2.本模拟系统进程调度采用的是先来先效劳算法输入进程名 的顺序即为到达cpu的顺序\n"< charr; r='R'; for(inti=0;;i++) { chare[100]; cout<<"输入进程名: "<<""; cin>>e[i]; if(e[i]! =r) jiuxu.enqueue(e[i]);/*将输入插入就绪队列*/ else break; } A: cout<<"\n请选择操作1、执行进程2、将阻塞队列中进程调入就绪队列3、 封锁进程4、完毕进程5、退出程序。 "; cin>>n; if(n==1) { if(! zhixing.isempty()) { cout<<"已经有进程在执行,此操作不能执行\n"; charw; cout< cout<<"如果要继续请输入*如果要退出按其它任意键"< cout<<"要选择的操作: "; cin>>w; if(w=='*') gotoL;/*无条件转移至L*/ else gotoE;} else { if(! jiuxu.isempty()) { a=jiuxu.dequeue(); if(a! =r) zhixing.enqueue(a); gotoL; } else gotoL; } } else if(n==2) { if(! zuse.isempty()) { a=zuse.dequeue(); if(a! =r) jiuxu.enqueue(a); gotoL; } else gotoL; } else if(n==3) { if(! zhixing.isempty()) { a=zhixing.dequeue(); if(a! =r) zuse.enqueue(a); gotoL; } else gotoL; } else if(n==4) { cout<<"\n请输入要完毕的进程名"; cin>>a; if(zhixing.find(a)||jiuxu.find(a)||zuse.find(a))/*查找所有队列中是否含*/ /*有a假设有完毕进程a*/ { if(zhixing.find(a)) {zhixing.del(a);} else if(jiuxu.find(a)) {jiuxu.del(a);} if(zuse.find(a)) {zuse.del(a);} cout<<"\n完毕进程成功\n"< gotoL; } else cout<<"没有此进程"< gotoL; L: if(n==1||n==2||n==3||n==4)/*输出执行就绪阻塞队列*/ { cout<<"执行队列"< zhixing.display(); cout< cout<<"就绪队列"< jiuxu.display();cout< cout<<"阻塞队列"< zuse.display();cout< gotoA; } else if(n==5); else gotoA; } E: ; } 七、调试过程中的问题及系统测试情况 1、调试过程 调试时一开场老是出错,尤其是c语言和vc++有区别的地方。 比方类的定义后要加分号,而函数的定义那么不用。 在调试时,有时候出现警告信息,有时候没有。 可能是因为机房和宿舍的编译器的版本不同导致的吧。 在调试的过程中,出现的问题不是很多,主要是因为本系统采用的数据构造比拟少,而且进程调度算法是先来先效劳算法,用程序比拟容易实现。 假设用高响应比优先等算法,估计难度会比这大。 2、系统测试结果 进入系统,首先系统会有提示信息,提示信息如下: 按系统的提示输入数据以后,输入完毕符按enter键后系统如下列图所示: 如上图所示,如果我们输入1按Enter键以后结果如下列图所示,以此类推,按入其他的数字进展其他操作: 八、系统设计总结 通过这次课程设计,使我们对操作系统有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实践才能更好地学习它,我们也发现我们的好多缺乏之处,通过学习也有所改良;因为是亲自在做,所以每一步比起学习理论知识更管用多了。 在做的过程中,不光是收获本课的知识,也了解了不少计算机的一些我们不太会关注的东西。 如什么叫进程,它是如何工作的,为什么会有它的产生呢! 平时,我们都知道计算时机莫名其妙的很卡,那是因为什么呢.就是因为进程,是因为我们翻开的软件太多了,我们都知道计算机不是同时一起对所有运行界面一起实现,而是它在用很快速的速度对我们操作的那一块出现的执行,这种速度可以让我们感觉到是同时在运作的。 作为学习这个专业的学生,我觉得这些认识都是我们最根本的,所以深入学习进程如何管理和工作情况是必须的。 再有就是对操作系统的一些系统调用不太了解,还有对操作系统中经常出现的错误也不了解,所以在以后的学习过程中,我们会更加注视实践操作。 在课程设计过程中,收获知识,提高能力的同时,我们也懂得怎么样去制定、实现方案,课程设计是培养学生综合运用所学知识发现提出分析和解决实际问题锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 随着科学技术开展的日新月异,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以稳固以前所学过的知识,而且学到了很多在书本上没有学到过的知识。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,在设计的过程中发现自己的缺乏之处,对一些前面学过的知识理解得不够深刻,掌握得不够结实,在设计中我们遇到了很多编程问题,最后在教师的辛勤指导下,我们慢慢的进入状态,我们做的是一个进程调用的设计,容包括很多。 函数设计也是非常的复杂,所以设计程序一定要仔细,不容一点的马虎。 当然也有大问题,关于文件的操作,是我们最大的问题。 要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大防止重复性的开发工作。 这次课程设计,确实加深了我们对操作系统这门课程的理解,尤其是进程的管理。 不过因为我们自身的根底比拟差,进程通讯机构和pcb进程控制块没有很好的实现。 虽然我们的这个进程管理系统功能很少,模拟的真实性不高,但毕竟是这几天的劳动成果,心里挺充实的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理 系统 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)