进程的控制系统说明书Word下载.docx
- 文档编号:19180764
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:14
- 大小:44.17KB
进程的控制系统说明书Word下载.docx
《进程的控制系统说明书Word下载.docx》由会员分享,可在线阅读,更多相关《进程的控制系统说明书Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
参考文献11
致谢12
附件Ⅰ部分源程序代码13
前言
了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。
用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容,利用wait()来控制进程执行顺序。
摘要
课程设计是为了让我们能对操作系统有更进一步的了解所开设的实践课程。
所以这就要求我们在对课本主要内容熟练掌握的前提下,运用这些内容来解决实际问题。
。
进程的控制问题是一个有关对进程的运用问题。
对进程的控制包括:
创建进程、唤醒进程、挂起进程、终止进程等等。
这些控制和管理功能是由操作系统中的原语来实现的。
原语是在管态下执行、完成系统特定功能的过程。
系统对进程的控制如不使用原语,就会造成其状态的不确定性,从而达不到进程控制目的。
课程设计可以提高我们的实践动手能力,能让我们把课本上的知识真正在实际应用中得到实现,进而把它变成自己的东西,达到学以致用的效果。
同时,还可以加深对理论知识的印象。
这也可以为我们以后的工作奠定良好的基础
关键词:
进程;
控制;
同步
正文
1设计思想
程序在调用fork()建立一个子进程后,马上调用wait(),使父进程控制在子进程结束之前,一直处于睡眠状态。
子进程用exec()装入命令ls,exec()后,子进程的代码被ls的代码取代,这时子进程的PC指向ls的第一条语句,开始执行ls的命令代码。
其中wait()用来实现进程同步。
2算法用到的主要数据结构(采用类c语言定义)
structPCB\\创建进程控制块
{charname;
intko;
intcha;
};
voidcreat()\\创建进程
voiddestroy()\\撤销进程
voidblock()\\阻塞进程
voidwakeup()\\唤醒进程
voidsuspend()\\挂起进程
voidactive()\\运行进程
3相关的各模块的伪码算法
1.创建进程模块
voidcreat()
{chara;
intb;
cout<
<
"
Pleaseinputthenameoftheprocess:
endl;
cin>
>
a;
Pleaseinputthekooftheprocess:
b;
i++;
pcb[i].name=a;
pcb[i].ko=b;
pcb[i].cha=1;
cout<
M<
}
2.撤销进程模块
voiddestroy()
intj;
Selectaprocessyouwanttodestroy:
cout<
for(j=1;
j<
=10;
j++)
{if(pcb[j].name==a)
{pcb[j].name=0;
pcb[j].ko=0;
pcb[j].cha=0;
Process"
a<
hasbeendestroied"
elsecout<
Thereisn'
tprocess"
existed!
}
;
3.阻塞进程模块
voidblock()
intj;
Pleasetellmewhichprocessyouwanttoblock:
for(j=1;
{if(pcb[j].cha==1)
{pcb[j].cha=4;
pcb[j].ko++;
Operationblockhasbeenfinished!
elseif(pcb[j].cha==2)
{pcb[j].cha=3;
pcb[j].ko++;
elsecout<
Thereisnoprocesscanbeblocked!
4.唤醒进程模块
voidwakeup()
Pleasetellmewhichprocessyouwanttowakeup:
{if(pcb[j].name==a)
{if(pcb[j].cha==3)
{pcb[j].cha=2;
pcb[j].ko--;
Youhavewakeupprocess"
}
elseif(pcb[j].cha==4)
{pcb[j].cha=1;
pcb[j].ko--;
Youhavewakeupprocess"
elsecout<
Thereisnoprocesscanbewakedup!
4调试分析
调试中遇到的问题及对问题的解决方法
在使用VC++6.0编写程序,由于本次开发都是边学边用的过程中完成的,所以在开发中遇到了很多的问题,并且是在数据类型上需要相互转换,例如:
CString类型的数据要转换成int类型,需要使用atoi()方法,这些方法在我们的学习的过程中少见,所以需要查询大量的资料才对整个项目使用到的编程难点有了认识。
其次,虽然掌握了基础知识,但是在实际编程中,并不是想象中的那么简单。
5测试结果
总结
历时两周的课程设计结束了,沉甸甸的设计成果已经交出了,但其中的体会与感受并未随之而去。
这期间有喜有忧,有欢呼声,有叹息声,有烦闷,有惊喜,在这样一次又一次的砺炼中,我得到的不仅仅是知识,更多的是自身能力的提高。
经过这次课设我学到了很多。
通过此次课程设计加深理解了什么是进程,熟悉了UNIX/LINUX支持的进程的控制方式。
了解了LINUX的命令及使用格式,熟悉了UNIX/LINUX的常用基本命令,练习并掌握了LINUX提供的vi编辑器来编译C程序,学会了利用gcc编译、调试C程序。
更重要的是通过此次课程设计使我懂得了三思而后行,学到了严谨的学习态度、永不放弃的精神,也增加了去面对更大挑战的信心和勇气,同时也培养了把学到的知识用于解决实际问题,培养了我的独立动手能力。
参考文献
1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.
2.王清,李光明.《计算机操作系统》.冶金工业出版社.
3.孙钟秀等.操作系统教程.高等教育出版社
4.曾明.
Linux操作系统应用教程.陕西科学技术出版社.
5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.
6.孟静,
操作系统教程--原理和实例分析.高等教育出版社
7.周长林,计算机操作系统教程.高等教育出版社
8.张尧学,计算机操作系统教程,清华大学出版社
9.任满杰,操作系统原理实用教程,电子工业出版社.
致谢
从确定设计方案到最后算法的实现,历时2个星期。
首先,我谨向刘嘉老师致以最诚挚的谢意。
在这段时间内老师不辞辛苦一直奔波忙碌于指导我们与完成自己的工作之间。
感谢我的《操作系统》老师刘嘉老师,一个学期以来刘老师的严肃的教学态度使我从对该课程的一无所知到收获颇丰,也为我今后的求学生涯树立了榜样。
刘老师一直以来默默无闻的扮演着传道、授业、解惑的角色,您就是那将我们送到对岸的摆渡人。
最后还要感谢我的同学们,感谢他们给与我必要的帮助和讲解,也感谢他们给我提出那么多的解决方案和指导性意见,帮我顺利完成我的课程设计和论文!
附件Ⅰ部分源程序代码
#definenull0
#defineM"
Menu\n\n1.Creataprocess\n2.Destroyaprocess\n3.Blockaprocess\n4.Wakeupaprocess\n5.Suspendaprocess\n6.Activeaprocess\n7.Observetheprocesses\n\nPleaseselecttheitemyouwanttorealize:
#include<
iostream.h>
structPCB
structPCBpcb[10];
inti=0;
{chara;
cin>
i++;
pcb[i].ko=b;
pcb[i].cha=1;
{if(pcb[j].name==a)
{pcb[j].name=0;
pcb[j].ko=0;
pcb[j].cha=0;
{if(pcb[j].cha==1)
{pcb[j].cha=4;
pcb[j].ko++;
elseif(pcb[j].cha==2)
{pcb[j].cha=3;
{if(pcb[j].cha==3)
{pcb[j].cha=2;
pcb[j].ko--;
elseif(pcb[j].cha==4)
{pcb[j].cha=1;
voidsuspend()
Whichprocessdoyouwanttosuspend?
Select:
{if(pcb[j].cha==2)
{pcb[j].cha=1;
Youhavesuspendprocess"
elseif(pcb[j].cha==3)
{pcb[j].cha=4;
elseif(pcb[j].cha==5)
Youcouldsuspendnone!
voidactive()
Pleasetellmewhichprocessyouwanttoactive:
{pcb[j].cha=2;
Youhaveactiveprocess"
Thereisnoprocesscanbeactived!
voidrun()
{structPCB*p;
chart;
intj,m,k;
Theprocesseswillrunintheorderofko(lowerearlier,higherlater):
\n"
for(j=1,p=pcb;
p!
=null;
j++,p++)
{if(p[j].ko>
p[j+1].ko)
{t=p[j].name;
p[j].name=p[j+1].name;
p[j+1].name=t;
m=p[j].cha;
p[j].cha=p[j+1].cha;
p[j+1].cha=m;
k=p[j].ko;
p[j].ko=p[j+1].ko;
p[j+1].ko=k;
for(p=pcb,j=1;
p++)
{cout<
Process:
p[j].name<
\tko:
p[j].ko<
\tcha:
p[j].cha<
}
}
voidobserve()
{intj;
j!
pcb[j].name<
pcb[j].ko<
pcb[j].cha<
voidexit()
{exit();
voidmain()
{inta,k;
for(k=1;
k<
k++)
{pcb[i].name=0;
pcb[i].ko=0;
pcb[i].cha=0;
while
(1){
Menu\n\n"
1.Creataprocess\n"
2.Destroyaprocess\n"
3.Blockaprocess\n"
4.Wakeupaprocess\n"
5.Suspendaprocess\n"
6.Activeaprocess\n"
7.Observetheprocesses\n"
8.Exit\n"
\n\nPleaseselecttheitemyouwanttorealize:
\n\n"
if(a!
=null)
switch(a)
{case1:
creat();
break;
case2:
destroy();
case3:
block();
case4:
wakeup();
case5:
suspend();
case6:
active();
case7:
observe();
case8:
exit();
}}
//getch();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 控制系统 说明书