操作系统实验报告2进程的创建和控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二
进程的创建与控制
姓名:梁斌
学号:20121060186
专业:计算机科学与技术(国防)
一、实验目的
1.加深对进程概念的理解,认识并发执行的本质。
2.分析进程竞争资源的现象,学习解决互斥的方法。
二、实验主要内容及设计
1.使用fork( )创建两个子进程。
2.使用lockf( )给进程加锁。
三、实验内容及完成结果
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。
〈程序〉
# include
main()
{
int p1,p2;
while((p1=fork())= = -1);/*创建子进程p1*/ if(p1= =0) /*子进程创建成功*/
putchar(…b‟);
else
{
while((p2= fork())= = -1);/*创建另一个子进程*/
if(p2= =0)/*子进程创建成功*/
putchar(…c‟);
else putchar(…a‟);/*父进程执行*/
}
}
<运行结果>
四、结果及分析
1.给出fork ( )的流程图
fork( )流程图
2.对进程创建中的程序进行分析
为了进一步了解和进程如何创建,以及子进程和父进程的调用顺序和执行的代码,对上述程序做了如下修改
# include
main()
{
int p1,p2;
while((p1=fork())= = -1);
printf(“p1=%d\n”,p1); /*p1为任意整数,调用父进程;p1为0,
调用子进程*/
if(p1= =0)
printf(“b\n”);
else
{
while((p2= fork())= = -1);
printf(“p2=%d\n”,p2);/* p2为任意整数,调用父进程;p2
为0,调用子进程*/
if(p2= =0)
printf(“c\n”);
else printf(“a\n”);;
}
}
执行结果
分析:
1.父进程和子进程的代码段都是上面的所有代码,不过子进程的代码只
从创建此子进程那里开始执行
2.程序在创建子进程的时候返回两个值:一个任意正整数(子进程的
ID),返回给父进程;一个0,返回给子进程
3.执行结果是bca,也就是系统在创建玩b,c两个子进程后,先调用执
行b进程,输出‟b‟,接着调用执行c进程,输出‟c‟,最后执行父进
程,输出‟a‟
4.之所以有其他不同的字母输出顺序,是因为三个进程抢占cpu不同,
从而导致三个进程被cpu调用执行的顺序不同,从而有不同的输出