操作系统进程管理论文Word格式文档下载.docx
《操作系统进程管理论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统进程管理论文Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
4)学习通过进程执行新的目标程序的方法。
5)了解系统中进程信号处理的基本原理。
1.3设计的意义
进行进程管理设计能增强自己对系统进程的了解,能够使自己综合运用以前所学的知识的能力,同时也使自己了解当前软件编程的一些新技术,锻炼自己的实际动手能力,对自己以后工作能力的培养具有重要的意义。
2设计思想及详细设计过程
2.1设计的思想
进程管理(处理机管理)是操作系统中的非常重要的部分,为深入理解进程管理部分的功能,进程管理模拟系统的设计的目的是加深对进程概念及进程管理各部分内容的理解;
熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通信机构实施。
在多道程序或多任务系统中,系统同时处于就绪状态的进程又若干个。
也就是说能运行的进程数目要远远大于处理机的个数,为了使系统中的各个进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用处理机,故要设计一个允许n个进程并发运行的进程管理模拟系统。
该系统包括有简单的进程控制、同步与通信机构,其进程调度算法可任意选择。
每个进程用一个PCB表示,其内容根据具体情况设置。
各进程之间有一定的同步关系(可选)。
系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
在我的实际设计开发中并没有达到以上全部要去,只是在控制台下了模拟了一部分功能,在操作系统中,最核心的概念就是并发,而进程是并发执行的实体。
考虑到时间比较紧,以及我对这门语言的熟悉程度,我仅仅打算实现模拟进程调度的功能,允许用户输入一系列进程,并自动按照先后顺序排队,放入就绪队列,可以模拟多种进程调度算法的实现,打印输出进程调度完毕的状态及各种参数,有的算法可以动态的显示调度过程。
2.2设计的详细过程
2.2.1算法设计
1)进程定义:
用每个进程是一个结构体,结构体中定义进程名,进程状态,进程id号,进程优先级,进程需运行的时间,进程已运行的时间,指向下一个进程的指针。
2)功能:
程序中设有内联函数,打印就绪进程函数,打印阻塞进程函数,判断进程是否结束函数,排序进程函数,唤醒进程函数,运行进程函数。
2.2.2具体各功能模块设计
●进程创建(用来存储进程信息):
进程号,进程名,进程优先级,需要运行时间。
typedefstructpcb
{
charname[10];
//进程名
charstate;
//状态
intid;
//id号
intsuper;
//优先级
intntime;
//需运行的时间
intrtime;
//已运行的时间
structpcb*next;
}*pcb1;
●打印就绪进程队列:
voidprint();
●打印阻塞进程队列:
voidprint1();
●判断进程是否结束:
intcheck();
●对进程进行优先排列:
voidsort(pcb1&
r,pcb1p);
●判断就绪队列是否为空:
voidblock();
●唤醒进程函数:
voidwake();
●运行进程:
voidruning();
●输入进程:
voidinput();
2.2.3关键代码
运行代码:
voidruning()
if(empty(s))
pcb1p;
p=s;
if(check())
{
s=s->
next;
p->
rtime++;
super--;
next=NULL;
sort(s,p);
}
else
cout<
<
"
就绪队列已经为空!
endl;
}
阻塞程序:
voidblock()
if(s->
next==NULL)
sort(w,s);
pcb1p1;
p1=s;
p1->
sort(w,p1);
现在就绪队列已经为空,再没有进程需要阻塞!
}
唤醒程序:
voidwake()
if(empty(w))
p1=w;
w=w->
sort(s,p1);
阻塞队列已经为空,没有进程再需要唤醒!
排列进程程序:
r,pcb1p)
pcb1p1,p2;
intin=0;
if(r==NULL)
r=p;
if(p->
super>
=r->
super)
next=r;
p1=r;
p2=r->
if(p2==NULL)
r->
next=p;
while(in==0&
&
p2!
=NULL)
=p2->
super)
next=p2;
in=1;
p1=p1->
p2=p2->
if(in==0)
3作品测试结果
3.1测试数据
测试数据:
●创建进程:
输入“C”,并输入进程号,进程名,进程优先级,需要运行时间,创建4个进程,数据如下:
1,test1,1,10
2,test2,2,20
3,test3,3,30
4,test4,4,40
●s(查看就绪状态)à
w(唤醒进程)à
z(阻塞进程)à
l(查看阻塞状态)à
r(运行进程)à
s(查看就绪状态)à
l(查看阻塞状态)à
q(退出程序)
3.2测试结果
运行程序,界面显示,并输入进程信息,包括进程号,进程名,进程优先级,需要运行时间:
选择功能,查看就绪队列的信息:
选择唤醒程序功能:
阻塞进程,并查看就绪对列:
运行进程:
唤醒进程:
退出程序:
3.3结果分析
首先创建进程,并按优先级高低排列到队列中,优先级高的排到队列的队头;
通过查看就绪函数查看就绪进程的信息,这时,所有的进程都是属于就绪状态;
再通过唤醒函数进行唤醒进程,这时所有进程都属于就绪状态,没有需要唤醒的进程;
通过阻塞函数阻塞当前进程,这是阻塞队列中有1个被阻塞的进程,就绪状态就有3个就绪函数;
再通过运行进程,这时有2个进程被阻塞,2个进程位于就绪队列;
再通过唤醒进程将被阻塞的进程唤醒。
4问题与总结
4.1设计中所遇到的问题及其解决
●想借鉴之前我们做过的实验,但是因为自己的电脑没有安装LINUX系统,只有安装了虚拟机,而虚拟机运行的程序又保存不到自己的系统中,所以只好写了一个在Windows中能够运行的模拟进程管理的C++程序。
●在设计之初,没有想好要用什么来存储进程信息,之后在网上看见一个用C++写的进程管理的程序,它里面用的是结构体来储存,所以就借鉴了他的写法。
●至于在设计进程运行的等待状态的时候没有想到要用什么来反映进程的等待状态,在翻阅了孙钟秀主编的《操作系统教程》后,发现可以用队列来表示。
4.2尚存在的问题
●界面不算美观,需加强界面的整理。
●功能太少,不能充分体现进程的睡眠、同步、撤消等进程控制方法。
4.3设计过程的总结与体会
在这几天设计这个进程管理的时候,我有这么以下几点体会:
1.一开始要先把总体设计搞好,把思路都理清,但不要一开始就固执于细节的实现,否则可能最后发现设计非常混乱,程序难于调试,以至于不得不重头开始设计。
2.在做的过程中要及时总结,随时记录开发过程。
总之,在编写代码的过程中遇到问题是不可避免的,尤其是使用的像C++这种具有指针的语言,在写出问题代码之前,我们应该谨小慎微,在得到语言的灵活性的同时也降低编译器排查错误的精确度,在出了问题后的解决只有靠自己的经验和技巧了。
3.还有,我很庆幸自己能坚持下来,在设计得过程中确实遇到了很多很多的问题,有些真的很难解决,但是不能被面前的困难吓倒,要敢于去坚持,去拼搏,编写程序有时候通宵达旦是很正常的,要勇于付出。
4.而且我还发现,很多情况下能否成功完成某项任务并不依赖于会多少,而是要看是否具有快速学习以及触类旁通的能力,很短的时间内学会综合运用多方面的知识来解决问题。
5.总之通过本次设计我又巩固了操作系统和C语言中的很多知识,而且发现了自身在编程技巧和思维上的不足,我会加倍努力得学习。
5系统说明
5.1所需的运行环境
WindowsXP,VisualC++6.0
5.2参考资料
[1]孙钟秀.操作系统教程.[M].北京:
高等教育出版社,2008:
1~103.
5.3自我评价
难度评价90分
创新程度90分
自我评分90分