1、进程的控制系统说明书*实践教学* 兰州理工大学计算机与通信学院2010年秋季学期操作系统原理课程设计题 目: 进程的控制系统 专业班级: 计算机科学与技术n班 姓 名: 桌面小箭头 学 号: 0123456789 指导教师: 李 明 成 绩: 目 录前 言 3摘 要 4正 文 51设计思想 52算法用到的主要数据结构(采用类c语言定义) 53相关的各模块的伪码算法 54调试分析 95测试结果 9总 结 10参考文献 11致 谢 12附件 部分源程序代码 13前 言了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc
2、、gdb编译、调试C程序。用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容,利用wait( )来控制进程执行顺序。摘 要课程设计是为了让我们能对操作系统有更进一步的了解所开设的实践课程。所以这就要求我们在对课本主要内容熟练掌握的前提下,运用这些内容来解决实际问题。进程的控制问题是一个有关对进程的运用问题。对进程的控制包括:创建进程、唤醒进程、挂起进程、终止进程等等。这些控制和管理功能是由操作系统中的原语来实现的。原语是在管态下执行、完成系统特定功能的过程。系统对进程 的控制如不使用原语,就会造成其状态的不确定性,从而达不到进程控制目的。 课程设计可以提高我们的实践
3、动手能力,能让我们把课本上的知识真正在实际应用中得到实现,进而把它变成自己的东西,达到学以致用的效果。同时,还可以加深对理论知识的印象。这也可以为我们以后的工作奠定良好的基础 关键词:进程 ;控制;同步正 文1设计思想程序在调用fork()建立一个子进程后,马上调用wait(),使父进程控制在子进程结束之前,一直处于睡眠状态。子进程用exec()装入命令ls,exec()后,子进程的代码被ls的代码取代,这时子进程的PC 指向ls的第一条语句,开始执行ls的命令代码。其中wait()用来实现进程同步。2算法用到的主要数据结构(采用类c语言定义)struct PCB 创建进程控制块char na
4、me; int ko; int cha;void creat() 创建进程void destroy() 撤销进程void block() 阻塞进程void wakeup() 唤醒进程void suspend() 挂起进程void active() 运行进程3相关的各模块的伪码算法1创建进程模块void creat() char a; int b; coutPlease input the name of the process:a; coutPlease input the ko of the process:b; i+; pcbi.name=a; pcbi.ko=b; pcbi.cha=1;
5、 coutMendl; 2撤销进程模块void destroy() char a; int j; coutSelect a process you want to destroy:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) pcbj.name=0; pcbj.ko=0; pcbj.cha=0; coutProcessa has been destroiedendl; else coutThere isnt processa existed!endl; coutendl; coutMendl; 3阻塞进程模块void block() char a;
6、 int j; coutPlease tell me which process you want to block:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj.cha=1) pcbj.cha=4; pcbj.ko+; coutOperation block has been finished!endl; else if(pcbj.cha=2) pcbj.cha=3; pcbj.ko+; coutOperation block has been finished!endl; else coutThere is no process
7、 can be blocked!endl; coutendl; coutMendl; 4唤醒进程模块void wakeup() char a; int j; coutPlease tell me which process you want to wakeup:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj.cha=3) pcbj.cha=2; pcbj.ko-; coutYou have wakeup processaendl; else if( pcbj.cha=4) pcbj.cha=1; pcbj.ko-; coutYou h
8、ave wakeup process aendl; else coutThere is no process can be wakedup!endl; coutendl; coutMendl; 4调试分析调试中遇到的问题及对问题的解决方法 在使用VC+6.0编写程序,由于本次开发都是边学边用的过程中完成的,所以在开发中遇到了很多的问题,并且是在数据类型上需要相互转换,例如:CString类型的数据要转换成int类型,需要使用atoi()方法,这些方法在我们的学习的过程中少见,所以需要查询大量的资料才对整个项目使用到的编程难点有了认识。其次,虽然掌握了基础知识,但是在实际编程中,并不是想象中的那
9、么简单。 5测试结果总 结历时两周的课程设计结束了,沉甸甸的设计成果已经交出了,但其中的体会与感受并未随之而去。这期间有喜有忧,有欢呼声,有叹息声,有烦闷,有惊喜,在这样一次又一次的砺炼中,我得到的不仅仅是知识,更多的是自身能力的提高。经过这次课设我学到了很多。通过此次课程设计加深理解了什么是进程,熟悉了UNIX/LINUX支持的进程的控制方式。了解了LINUX的命令及使用格式,熟悉了UNIX/LINUX的常用基本命令,练习并掌握了LINUX提供的vi编辑器来编译C程序,学会了利用gcc编译、调试C程序。更重要的是通过此次课程设计使我懂得了三思而后行,学到了严谨的学习态度、永不放弃的精神,也增
10、加了去面对更大挑战的信心和勇气,同时也培养了把学到的知识用于解决实际问题,培养了我的独立动手能力。参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3. 孙钟秀等. 操作系统教程. 高等教育出版社4. 曾明. Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静,操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社.
11、致 谢从确定设计方案到最后算法的实现,历时2个星期。首先,我谨向刘嘉老师致以最诚挚的谢意。在这段时间内老师不辞辛苦一直奔波忙碌于指导我们与完成自己的工作之间。感谢我的操作系统老师刘嘉老师,一个学期以来刘老师的严肃的教学态度使我从对该课程的一无所知到收获颇丰,也为我今后的求学生涯树立了榜样。刘老师一直以来默默无闻的扮演着传道、授业、解惑的角色,您就是那将我们送到对岸的摆渡人。最后还要感谢我的同学们,感谢他们给与我必要的帮助和讲解,也感谢他们给我提出那么多的解决方案和指导性意见,帮我顺利完成我的课程设计和论文! 附件 部分源程序代码#define null 0#define M Menunn1.C
12、reat a processn2.Destroy a processn3.Blockaprocessn4.Wakeup a processn5.Suspend a processn6.Active a processn7.Observe the processesnnPlease select the item you want to realize:#includestruct PCBchar name; int ko; int cha;struct PCB pcb10;int i=0;void creat()char a; int b; coutPlease input the name
13、of the process:a; coutPlease input the ko of the process:b; i+; pcbi.name=a; pcbi.ko=b; pcbi.cha=1; coutMendl;void destroy() char a; int j; coutSelect a process you want to destroy:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) pcbj.name=0; pcbj.ko=0; pcbj.cha=0; coutProcessa has been destroiedendl;
14、else coutThere isnt processa existed!endl; coutendl; coutMendl;void block() char a; int j; coutPlease tell me which process you want to block:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj.cha=1) pcbj.cha=4; pcbj.ko+; coutOperation block has been finished!endl; else if(pcbj.cha=2) pcbj.cha=3;
15、 pcbj.ko+; coutOperation block has been finished!endl; else coutThere is no process can be blocked!endl; coutendl; coutMendl;void wakeup()char a; int j; coutPlease tell me which process you want to wakeup:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj.cha=3) pcbj.cha=2; pcbj.ko-; coutYou have
16、 wakeup processaendl; else if(pcbj.cha=4) pcbj.cha=1; pcbj.ko-; coutYou have wakeup process aendl; else coutThere is no process can be wakedup!endl; coutendl; coutMendl;void suspend() char a; int j; coutWhich process do you want to suspend?Select:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj
17、.cha=2) pcbj.cha=1; pcbj.ko+; coutYou have suspend process aendl; else if(pcbj.cha=3) pcbj.cha=4; pcbj.ko+; coutYou have suspend process aendl; else if(pcbj.cha=5) pcbj.cha=1; pcbj.ko+; coutYou have suspend process aendl; else coutYou could suspend none!endl; coutendl; coutMendl;void active() char a
18、; int j; coutPlease tell me which process you want to active:a; coutendl; for(j=1;j=10;j+) if(pcbj.name=a) if(pcbj.cha=1)pcbj.cha=2; pcbj.ko-; coutYou have active process aendl; else if(pcbj.cha=4) pcbj.cha=3; pcbj.ko-; coutYou have active process aendl; else coutThere is no process can be actived!e
19、ndl; coutendl; coutMendl;void run() struct PCB *p; char t; int j,m,k; coutThe processes will run in the order of ko(lower earlier,higher later):npj+1.ko) t=pj.name; pj.name=pj+1.name; pj+1.name=t; m=pj.cha; pj.cha=pj+1.cha; pj+1.cha=m; k=pj.ko; pj.ko=pj+1.ko; pj+1.ko=k; for(p=pcb,j=1;p!=null;p+) cou
20、tProcess :pj.nameendl; couttko:pj.kotcha:pj.chaendl; coutendl; coutendl; coutMendl; void observe()int j; for(j=1;j!=null;j+) coutProcess :pcbj.nameendl; couttko:pcbj.kotcha:pcbj.chaendl; coutendl; void exit()exit();void main()int a,k; for(k=1;k=10;k+) pcbi.name=0; pcbi.ko=0; pcbi.cha=0; while(1) cou
21、t Menunnendl; cout1.Creat a processnendl; cout2.Destroy a processnendl; cout3.Block a processnendl; cout4.Wakeup a processnendl; cout5.Suspend a processnendl; cout6.Active a processnendl; cout7.Observe the processesnendl; cout8.Exitnendl; coutendl; coutnnPlease select the item you want to realize:a; coutnnendl; if(a!=null) switch(a) case 1:creat();break; case 2:destroy();break; case 3:block();break; case 4:wakeup();break; case 5:suspend();break; case 6:active();break; case 7:observe();break; case 8:exit();break; /getch();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1