操作系统实验三_第1页
操作系统实验三_第2页
操作系统实验三_第3页
操作系统实验三_第4页
操作系统实验三_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、青 岛 理 工 大 学课程实验报告课程名称操作系统班级软件114实验日期2013/10/24姓名李晓菲学号201107286实验成绩实验名称实验3 进程并发与同步实验目的及要求1、加深对进程概念的理解,区分进程并发执行与串行执行;2、掌握进程并发执行的原理,理解进程并发执行的特点;3、了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用;4、能利用相应的系统调用实现进程树与进程间的同步实验环境Windows;Virtual Box;Ubuntu 11.10;Vi编辑器;GCC编译器;Geany IDE;实验内容1、编写一C语言程序,实现在程序运

2、行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析2、连续4个fork()的进程家族树,family1-1.c程序清单如下:#include <stdio.h>main() fork(); fork(); fork(); fork(); printf(“An”);请根据程序运行结果,画出进程家族树,并分析原因。

3、3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。算法描述及实验步骤1、创建子进程系统调用:fork()格式int fork( );返回值=0创建成功,从子进程返回>0创建成功,从父进程返回,其值为子进程的PID号=-1创建失败int p1,p2;while(p1

4、=fork()=-1);利用它来判断2、进程家族树:12345678910111213141516父进程创建了4个子进程,子进程复制父进程的数据段和代码段,共输出4次,所以有16个A。3.在父进程执行前,加上wait()函数。用wait()等待子进程结束后,父进程才开始结束。 wait(0); printf("I am fathern"); exit(0);4.首先创建文件夹:实验三,再创建child2程序,然后在/bin/ls程序中对child2程序加载。然后创建numf.c文件,调用child2,输出,接着创建num4.c文件,输出文件夹里含有多少文件调试过程及实验结果

5、1、创建num1.c文件代码:运行后:(只弄出4中)不确定是否有六种2、创建num2.c运行代码:运行后:3、创建num3.c文件代码:运行后两种结果4、创建child2.c numf.c num4.c先建文件夹接着建3个文件将三个文件复制到文件夹实验三()里:添加代码:(注意文件夹的位置)将这三个程序移到桌面实验三文件夹,才能运行。运行后:总结(对实验结果进行分析,问题回答,实验心得体会及改进意见)1、该程序多次运行后,输出的结果可能会是:父儿女、父女儿、儿父女、儿女父、女父儿、女儿父随机结果中的6种任意一种,但只运行出4中,不知道原因。每次运行后都会产生父子3个进程,所以会有3条语句输出。

6、其中系统提示符显示会跟随在父进程输出语句之后。2、进程家族树:父进程创建了4个子进程,子进程复制父进程的数据段和代码段,共输出4次,所以有16个A。3.在父进程执行前,加上wait()函数。用wait()等待子进程结束后,父进程才开始结束。 wait(0); printf("I am fathern"); exit(0);4.不知道为什么,文件夹在桌面才能运行,并且文件路径不能简写,要写全numf.c里的execl("/home/lixiaofei/桌面/实验三/child2","child2",(char *)0);num4.c里的

7、execl("/bin/ls","ls",(char*)0);还有三个文件夹必须在一个文件夹里,运行时要用cd语句进入其文件夹,再进行编译。附录附录附录(源程序清单)num1.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>main() int p1,p2; while(p1=fork()=-1); if (p1 = 0 ) printf("I am sonn"); else w

8、hile(p2=fork()=-1); if ( p2= 0 ) printf("I am daughtern"); else printf("I am fathern"); num2.c#include <stdio.h>main() fork(); fork(); fork(); fork(); printf("An");num3.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unis

9、td.h>#include<sys/wait.h>int main() int p1,p2; while(p1=fork()=-1); if ( p1 = 0 ) printf("I am sonn"); exit(0); else while(p2=fork()=-1); wait(0); if (p2 = 0 ) printf("I am daughtern"); exit(0); wait(0); printf("I am fathern"); exit(0); return 0;child2.c#includ

10、e <stdio.h>#include <unistd.h>#include <stdlib.h>main() printf("I'm a child.n"); exit(0);Numf.c#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h>main() int p; while (p=fork()=-1); if (p=0) execl("/home/lixiaofei/桌面/实验三/child2","child2",(char *)0); else wait(0); exit(0); num4.c#include <stdio.h>#include <unistd.h>#include <stdlib.h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论