进程创建系统说明书.docx
《进程创建系统说明书.docx》由会员分享,可在线阅读,更多相关《进程创建系统说明书.docx(9页珍藏版)》请在冰点文库上搜索。
![进程创建系统说明书.docx](https://file1.bingdoc.com/fileroot1/2023-6/28/2bb1ca9b-20c3-44af-a2e9-d20e4af3164c/2bb1ca9b-20c3-44af-a2e9-d20e4af3164c1.gif)
进程创建系统说明书
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年秋季学期
操作系统原理课程设计
题目:
进程创建系统
专业班级:
计算机科学与技术10级4班
姓名:
杜思远
学号:
10240401
指导教师:
王燕
成绩:
目录
摘要1
正文2
1.问题描述2
2.设计目的3
3.设计要求4
4.详细设计5
5.结果分析6
设计总结8
参考文献9
致谢10
附录:
源程序代码11
摘要
在UNIX系统中,用户创建一个新进程的唯一方法就是调用系统调用fork。
调用fork的进程称为父进程,而新创建的进程叫做子进程。
在从系统调用fork中返回时,两个进程除了返回值pi不同外,具有完全一样的用户级上下文。
在子进程中,pi的值为零。
在系统启动时由核心内部地创建的进程0是唯一不通过系统调用fork而创建的进程。
关键字:
进程,创建,进程管理,c语言。
正文
1.问题描述
1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。
2、编写程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符,如父进程显示'a',子进程分别显示字符'b'和字符'c'。
试观察记录屏幕上的显示结果,并分析原因;修改程序,每一个进程循环显示一句话,如子进程显示'daughter…'及'son……',父进程显示'parent……',观察结果,分析原因。
2.设计目的
(1)加深对操作系统系统调用功能和进程概念的理解,明确进程和程序的区别。
(2)掌握Linux中进程的创建方法,进一步理解进程的并发执行。
(3)学生通过该题目的设计过程,可以初步掌握进程创建系统的原理、软件开发方法并提高解决实际问题的能力。
3.设计要求
1、分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。
2、设计合适的测试用例,对得到的运行结果要有分析。
3、设计中遇到的问题,设计的心得体会。
4、文档:
课程设计打印文档每个学生一份,并装在统一的资料袋中,资料袋前面要贴有学校统一的资料袋封面。
5、光盘:
每个学生文档和程序资料分别建在一个以自己学号和姓名命名的文件夹下,并要求每班负责人汇总每个学生的文件放在以班级姓名命名的文件夹下,刻录成5寸光盘,并复制四份(共五张内容相同的光盘),放在一个专门的资料袋中,不必再装软盘
4.详细设计
对于概要设计中的使用系统调用fork()创建两个子进程,创建的过程
函数如下:
#include
Usingnamespacestd;
Intmain()
{
Intp1,p2;
P1=fork();
If(p1==0)cout<<”b”<Elseif(p1>0)
{
P2=fork();
If(p2==0)cout<<”c”<Elseif(p2>0)cout<<”a”<}
Return0;
}
图一
5.结果分析
1.使用系统调用fork()创建两个子进程的程序的调试结果如下图:
由上面的三个图可以看出来由于程序的并发执行,同一个程序运行的结果会有所区别。
2.修改程序之后,每一个进程循环显示一句话的调试结果如下图:
由上面的图可以看出来由于程序的并发执行,同一个程序运行的结果会有所区别。
设计总结
通过这次实验,让我明白了怎样创建一个进程,以及如何使用系统调用来调用fork()函数,当fork()的返回值为0的时候表示当前进程是子进程,当fork()函数的返回值是大于0的时候表示当前进程是父进程,当fork()返回值是-1的时候表示创建进程失败。
通过实验使我见到了由于程序的并发执行,同一个程序运行的结果会有所区别。
更重要的是通过这次实验使我学会了如何在linux的环境下使用kdevelop来编辑和编译程序。
总之通过这次上机实验让我学到了许多书本上面学不到的知识,锻炼了自己的动手能力和编程的能力。
参考文献
1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.
2.王清,李光明.《计算机操作系统》.冶金工业出版社.
3.孙钟秀等.操作系统教程.高等教育出版社
4.曾明. Linux操作系统应用教程.陕西科学技术出版社.
5.张丽芬,刘利雄.《操作系统实验教程》.清华大学出版社.
6.孟静, 操作系统教程--原理和实例分析.高等教育出版社
7.周长林,计算机操作系统教程.高等教育出版社
8.张尧学,计算机操作系统教程,清华大学出版社
9.任满杰,操作系统原理实用教程,电子工业出版社
致谢
这次课程设计,我从“纸上谈兵”到可以自己动脑动手分析调试程序,收获不少。
首先要感谢有了这次实践的机会,给了自己一个舞台,同时也是对自身的检验。
还有多亏了老师们从理论到上机亲自指导的辛苦教授,给予了我们最大帮助和全面指导,在这里,尤其感谢我的指导老师以及授课老师王燕老师,不辞辛苦,在给很多学生指导的情况下还不厌其烦的给我耐心指导,在这里,我衷心向您致谢!
最后还要感谢热心的同学们,在我陷入误区时,是他们热忱的帮助使我摆脱困境。
最后衷心感谢所有给予我帮助和指导的老师和同学,是你们让我收获多多,取得了很大进步。
谢谢你们!
附录:
源程序代码
1.使用系统调用fork()创建两个子进程的程序清单:
#include
Usingnamespacestd;
Intmain()
{
Intp1,p2;
P1=fork();//获得fork函数的返回值赋给p1
If(p1==0)cout<<”b”<Elseif(p1>0)
{
P2=fork();
If(p2==0)cout<<”c”<Elseif(p2>0)cout<<”a”<}
Return0;
}
2.修改程序之后,每一个进程循环显示一句话的程序清单:
#include
Usingnamespacestd;
Intmain()
{
Intp1,p2;
P1=fork();//获得fork函数的返回值赋给p1
If(p1==0){
For(inti=0;i<3;i++)
{cout<<”daughter”<
cout<<”b”<Elseif(p1>0)
{
P2=fork();
If(p2==0){
For(inti=0;i<3;i++)
{cout<<”son”<
cout<<”c”<}
Elseif(p2>0){
For(inti=0;i<3;i++)
{cout<<”parent”<
cout<<”a”<}
Return0;
}