操作系统实验报告2进程的创建和控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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调用执行的顺序不同,从而有不同的输出

相关文档
最新文档