进程的控制系统说明书.docx

上传人:b****6 文档编号:6177931 上传时间:2023-01-04 格式:DOCX 页数:14 大小:44.17KB
下载 相关 举报
进程的控制系统说明书.docx_第1页
第1页 / 共14页
进程的控制系统说明书.docx_第2页
第2页 / 共14页
进程的控制系统说明书.docx_第3页
第3页 / 共14页
进程的控制系统说明书.docx_第4页
第4页 / 共14页
进程的控制系统说明书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

进程的控制系统说明书.docx

《进程的控制系统说明书.docx》由会员分享,可在线阅读,更多相关《进程的控制系统说明书.docx(14页珍藏版)》请在冰豆网上搜索。

进程的控制系统说明书.docx

进程的控制系统说明书

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2010年秋季学期

 

操作系统原理课程设计

 

题目:

进程的控制系统

专业班级:

计算机科学与技术n班

姓名:

桌面小箭头

学号:

0123456789

指导教师:

李明 

成绩:

          

目录

前言3

摘要4

正文5

1设计思想5

2算法用到的主要数据结构(采用类c语言定义)5

3相关的各模块的伪码算法5

4调试分析9

5测试结果9

总结10

参考文献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:

"<

cin>>a;

cout<<"Pleaseinputthekooftheprocess:

"<

cin>>b;

i++;

pcb[i].name=a;

pcb[i].ko=b;

pcb[i].cha=1;

cout<

}

2.撤销进程模块

voiddestroy()

{chara;

intj;

cout<<"Selectaprocessyouwanttodestroy:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{pcb[j].name=0;

pcb[j].ko=0;

pcb[j].cha=0;

cout<<"Process"<

}

elsecout<<"Thereisn'tprocess"<

"<

}

cout<

cout<

}

3.阻塞进程模块

voidblock()

{chara;

intj;

cout<<"Pleasetellmewhichprocessyouwanttoblock:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==1)

{pcb[j].cha=4;

pcb[j].ko++;

cout<<"Operationblockhasbeenfinished!

"<

}

elseif(pcb[j].cha==2)

{pcb[j].cha=3;

pcb[j].ko++;

cout<<"Operationblockhasbeenfinished!

"<

elsecout<<"Thereisnoprocesscanbeblocked!

"<

}

cout<

cout<

}

4.唤醒进程模块

voidwakeup()

{chara;

intj;

cout<<"Pleasetellmewhichprocessyouwanttowakeup:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==3)

{pcb[j].cha=2;

pcb[j].ko--;

cout<<"Youhavewakeupprocess"<

}

elseif(pcb[j].cha==4)

{pcb[j].cha=1;

pcb[j].ko--;

cout<<"Youhavewakeupprocess"<

}

elsecout<<"Thereisnoprocesscanbewakedup!

"<

}

}

cout<

cout<

}

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

structPCB

{charname;

intko;

intcha;

};

structPCBpcb[10];

inti=0;

voidcreat()

{chara;

intb;

cout<<"Pleaseinputthenameoftheprocess:

"<

cin>>a;

cout<<"Pleaseinputthekooftheprocess:

"<

cin>>b;

i++;

pcb[i].name=a;

pcb[i].ko=b;

pcb[i].cha=1;

cout<

}

voiddestroy()

{chara;

intj;

cout<<"Selectaprocessyouwanttodestroy:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{pcb[j].name=0;

pcb[j].ko=0;

pcb[j].cha=0;

cout<<"Process"<

}

elsecout<<"Thereisn'tprocess"<

"<

}

cout<

cout<

}

voidblock()

{chara;

intj;

cout<<"Pleasetellmewhichprocessyouwanttoblock:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==1)

{pcb[j].cha=4;

pcb[j].ko++;

cout<<"Operationblockhasbeenfinished!

"<

}

elseif(pcb[j].cha==2)

{pcb[j].cha=3;

pcb[j].ko++;

cout<<"Operationblockhasbeenfinished!

"<

}

elsecout<<"Thereisnoprocesscanbeblocked!

"<

}

}

cout<

cout<

}

voidwakeup()

{chara;

intj;

cout<<"Pleasetellmewhichprocessyouwanttowakeup:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==3)

{pcb[j].cha=2;

pcb[j].ko--;

cout<<"Youhavewakeupprocess"<

}

elseif(pcb[j].cha==4)

{pcb[j].cha=1;

pcb[j].ko--;

cout<<"Youhavewakeupprocess"<

}

elsecout<<"Thereisnoprocesscanbewakedup!

"<

}

}

cout<

cout<

}

voidsuspend()

{chara;

intj;

cout<<"Whichprocessdoyouwanttosuspend?

Select:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==2)

{pcb[j].cha=1;

pcb[j].ko++;

cout<<"Youhavesuspendprocess"<

}

elseif(pcb[j].cha==3)

{pcb[j].cha=4;

pcb[j].ko++;

cout<<"Youhavesuspendprocess"<

}

elseif(pcb[j].cha==5)

{pcb[j].cha=1;

pcb[j].ko++;

cout<<"Youhavesuspendprocess"<

}

elsecout<<"Youcouldsuspendnone!

"<

}

}

cout<

cout<

}

voidactive()

{chara;

intj;

cout<<"Pleasetellmewhichprocessyouwanttoactive:

"<

cin>>a;

cout<

for(j=1;j<=10;j++)

{if(pcb[j].name==a)

{if(pcb[j].cha==1)

{pcb[j].cha=2;

pcb[j].ko--;

cout<<"Youhaveactiveprocess"<

}

elseif(pcb[j].cha==4)

{pcb[j].cha=3;

pcb[j].ko--;

cout<<"Youhaveactiveprocess"<

}

elsecout<<"Thereisnoprocesscanbeactived!

"<

}

}

cout<

cout<

}

voidrun()

{structPCB*p;

chart;

intj,m,k;

cout<<"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!

=null;p++)

{cout<<"Process:

"<

cout<<"\tko:

"<

"<

cout<

}

cout<

cout<

}

voidobserve()

{intj;

for(j=1;j!

=null;j++)

{cout<<"Process:

"<

cout<<"\tko:

"<

"<

cout<

}

}

voidexit()

{exit();

}

voidmain()

{inta,k;

for(k=1;k<=10;k++)

{pcb[i].name=0;

pcb[i].ko=0;

pcb[i].cha=0;

}

while

(1){

cout<<"Menu\n\n"<

cout<<"1.Creataprocess\n"<

cout<<"2.Destroyaprocess\n"<

cout<<"3.Blockaprocess\n"<

cout<<"4.Wakeupaprocess\n"<

cout<<"5.Suspendaprocess\n"<

cout<<"6.Activeaprocess\n"<

cout<<"7.Observetheprocesses\n"<

cout<<"8.Exit\n"<

cout<

cout<<"\n\nPleaseselecttheitemyouwanttorealize:

"<

cin>>a;

cout<<"\n\n"<

if(a!

=null)

switch(a)

{case1:

creat();break;

case2:

destroy();break;

case3:

block();break;

case4:

wakeup();break;

case5:

suspend();break;

case6:

active();break;

case7:

observe();break;

case8:

exit();break;

}}

//getch();

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1