合肥师范学院操作系统 实验项目二

合肥师范学院操作系统 实验项目二

ID:46399929

大小:51.50 KB

页数:5页

时间:2019-11-23

合肥师范学院操作系统 实验项目二_第1页
合肥师范学院操作系统 实验项目二_第2页
合肥师范学院操作系统 实验项目二_第3页
合肥师范学院操作系统 实验项目二_第4页
合肥师范学院操作系统 实验项目二_第5页
资源描述:

《合肥师范学院操作系统 实验项目二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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时,以为就只能一次输出。开阔的视野。对操作系统课程有了兴趣。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。