实验三 进程的同步.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:4 大小:125KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

实验三 进程的同步.doc

实验三进程的同步.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验三进程的同步实验目的1.了解进程同步的概念及实现方法.2.更深一步的了解fork()的系统调用方式。实验内容1.预习操作系统进程同步的概念及实现方法2.编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。3.阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。4.(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”,“c”编辑、编译、运行。记录程序运行结果。设计思想(1)fork(),父进程创建两个子进程的主要代码:Intmain(){Intp1,p2;While((p1=fork()==-1);If(p1==0)Printf(“b\n”);Else{While((p2=fork())==-1);If(p2==0)Printf(“c\n”);ElsePrintf(“a\n”);}Return0;}(2)调试过程1、测试数据设计fork(),父进程创建两个子进程的测试结果:测试结果分析(1)调用fork()创建一个子进程,当运行到第一个子进程输出了b,当父进程运行时创建另一个子进程。所以出现了a,b,c。还有可能是a,c,b等等。(2)两个线程相互切换,直到把票卖完停止。(3)由pipe(fp);创建了一个管道(信号缓冲区),创建个进程将信息写入buf;再将buf写入文件,再由父进程将信息读取出来输出。pipe()可以创建一个管道.intpipe(intfd[2]);pipe调用可以创建一个管道(通信缓冲区).当调用成功时,我们可以访问文件描述符fd[0],fildes[1].其中fd[0]是用来读的文件描述符,而fildes[1]是用来写的文件描述符.lockf()函数允许将文件区域用作信号量(监视锁),或用于控制对锁定进程的访问(强制模式记录锁定)。Wait(0);可以用来实现父子进程的同步.(4)在进程的输出语句前后加上lockf(df[1],1,0)和lockf(df[1],0,0);将进程锁住了。总结1、调试过程中遇到的主要问题及解决过程在修改fork()时,最开始使用了read(),schedual();但是编译出现错误。修改:使用lockf(df[1],1,0)和lockf(df[1],0,0);exit();缺少头文件。修改:加头文件#include<stdlib.h>体会和收获。通过这次学习我认为学习是一个循序渐进的过程,可能经过了本学期的学习后我们不会再去研究这方面的知识,但是不代表没有学习的必要,我认为学科之间存在着必然的联系,今天了解知道的更多,可能在今后理解问题上更轻松。