欢迎来到天天文库
浏览记录
ID:46399929
大小:51.50 KB
页数:5页
时间:2019-11-23
《合肥师范学院操作系统 实验项目二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验项目二进程管理一、实验目的1.理解进程的概念,掌握父、子进程创建的方法。2.认识和了解并发执行的实质,掌握进程的并发及同步操作。二、实验内容1.编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“Iamfather”,儿子进程执行时屏幕显示“Iamson”,女儿进程执行时屏幕显示“Iamdaughter”。2.多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。3.修改程序,在父、子进程中分别使用wait()、exit()等系统调用“实现”其同步推进,
2、并获取子进程的ID号及结束状态值。多次反复运行改进后的程序,观察并记录运行结果。三、源程序及运行结果源程序1:#include#include#includeintmain(intargc,char**argv){char*message;intn;intpid=fork();if(pid<0)printf("error!");elseif(pid==0){message="Thisisdaughter!";pid=getpid();n=3;}else{intpid=fork();if(pid<0)printf("e
3、rror!");elseif(pid==0){message="Thisisson!";pid=getpid();n=3;}else{message="Thisisfather";n=3;}}for(;n>0;n--){puts(message);sleep(1);}return0;}运行结果:(截图)源程序2:#include#include#include#includeintmain(intargc,char**argv){char*msg;intn;pid_tpid=fork();i
4、ntstatus,i;intcode;if(pid<0){printf("Error!");exit(1);}elseif(pid==0){msg="Iamson!";n=3;code=50;}else{msg="Iamfather!Waitforson.";n=2;code=0;}for(n=3;n>0;n--){puts(msg);sleep(1);}if(pid!=0){pid=wait(&status);i=WEXITSTATUS(status);printf("child’spid=%d.exitstatus=%d",pid,i);}exit(code);}运行结果
5、:一、实验分析与总结1.实验内容1运行结果为什么无固定顺序,fork()函数创建进程是如何并发执行的。答:fork函数创建的进程抢占CPU不同,从而导致被CPU调度执行的顺序不同,所以运行结果是无固定顺序的。fork函数调用成功后,子进程与父进程并发执行相同的代码,但由于子进程继承父进程的顺序指针,从fork后的语句开始执行的,fork函数在子进程和父进程的返回值不同,它们执行不同的分类,所以可以并发执行。2.实验内容3是如何实现父子进程的同步执行的。答:运用了wait和exit函数,父进程必须在这两个子进程终止后终止,父进程调用wait函数,被阻塞,调入等待队列,子进程结束时,
6、执行exit函数,函数向父进程发终止信号,父进程提取子进程结束状态值,从wait返回,继续执行源程序,完成同步。总结:了解函数返回值一次原来还可以有多个输出,学习c时,以为就只能一次输出。开阔的视野。对操作系统课程有了兴趣。
此文档下载收益归作者所有