青岛理工大学
课程实验报告
课程名称
操作系统
班级
软件114
实验日期
2013/10/24
姓名
李晓菲
学号
201107286
实验成绩
实验名称
实验3 进程并发与同步
实
验
目
的
及
要
求
1、加深对进程概念的理解,区分进程并发执行与串行执行;
2、掌握进程并发执行的原理,理解进程并发执行的特点;
3、了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用;
4、能利用相应的系统调用实现进程树与进程间的同步
实
验
环
境
Windows;
Virtual Box;
Ubuntu ;
Vi编辑器;
GCC编译器;
Geany IDE;
实
验
内
容
1、编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。
要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析
2、连续4个fork()的进程家族树,family1-:
#include <>
main()
{
fork();
fork();
fork();
fork();
printf(“A\n”);
}
请根据程序运行结果,画出进程家族树,并分析原因。
3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。
4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。
算
法
描
述
及
实
验
步
骤
1、
创建子进程系统调用:fork()
格式
int fork( );
返回值
=0
创建成功,从子进程返回
>0
创建成功,从父进程返回,其值为子进程的PID号
=-1
创建失败
int p1,p2;
while((p1=fork())==-1);
利用它来判断
2、进程家族树:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
父进程创建了4个子进程,子进程复制父进程的数据段和代码段,共输出4次,所以有16个A。
,加上wait()函数。
用wait()等待子进程结束后,父进程才开始结束。
wait(0);
printf("I am father\n");
exit(0);
:实验三,再创建child2程序,然后在/bin/ls程序中对child2程序加载。,调用child2,输出,,输出文件夹里含有多少文件
调
试
过
程
及
实
验
结
果
1、
文件代码:
运行后:(只弄出4中)
不确定是否有六种
2、
运行代码:
运行后:
3、
文件代码:
运行后两种结果
4、
先建文件夹
接着建3个文件
将三个文件复制到文件夹实验三()里:
添加代码:
(注意文件夹的位置)
将这三个程序移到桌面实验三文件夹,才能运行。
运行后:
总
结
(对实验结果进行分析,问题回答,实验心得体会及改进意见)
1、该程序多次运行后,输出的结果可能会是:父儿女、父女儿、儿父女、儿女父、女父儿、女儿父随机结果中的6种任意一种,但只运行出4中,不知道原因。每次运行后都会产生父子3个进程,所以会有3条语句输出。其中系统提示符显示会跟随在父进程输出语句之后。
2、进程家族树:
父进程创建了4个子进程,子进程复制父进程的数据段和代码段,共输出4次,所以有16个A。
,加上wait()函数。
用wait()等待子进程结束后,父进程才开始结束。
wait(0);
printf("I am father\n");
exit(0);
,文件夹在桌面才能运行,并且文件路径不能简写,要写全
execl("/home/lixiaofei/桌面/
操作系统实验三 来自淘豆网m.daumloan.com转载请标明出处.