当前位置:首页 > 操作系统实验实验
广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室2015年11月11日实验课程名称 实验项目名称 陈康民 操作系统 成绩 指导老师 进程管理与进程通信 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***) 进程管理
(一) 进程的创建实验
一、实验目的
1、掌握进程的概念,明确进程的含义 2、认识并了解并发执行的实质
二、实验内容
1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示 'parent ……',观察结果,分析原因。
三、实验步骤
1、编写一段程序,使用系统调用fork()创建两个子进程。 代码:
#include
int p1,p2;
while((p1=fork())== -1); /*创建子进程p1*/ if (p1==0)putchar('b'); else
{
while((p2=fork( ))== -1); /*创建子进程p2*/ if(p2==0)putchar('c'); else putchar('a'); }
}
运行结果:
1 / 23
bca,bac, abc ,……都有可能。
2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示 'parent ……',观察结果,分析原因。
代码:#include
int p1,p2,i;
while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0)
for(i=0;i<10;i++)
printf(\ %d\\n\
else
{
while((p2=fork( ))= = -1); /*创建子进程p2*/
if(p2= =0)
for(i=0;i<10;i++)
printf(\ %d\\n\
else
for(i=0;i<10;i++)
printf(\ %d\\n\
}
}
结果:
2 / 23
3 / 23
parent…
son… daughter.. daughter.. 或 parent…
son… parent… daughter…等
四、分析原因
除strace 外,也可用ltrace -f -i -S ./executable-查看以上程序执行过程。
1、从进程并发执行来看,各种情况都有可能。上面的三个进程没有同步措施,所以父进程与子进程的输出内容会叠加在一起。输出次序带有随机性。
2、由于函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。但由于进程并发执行的调度顺序和父子进程抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。
4 / 23
共分享92篇相关文档