操作系统实验报告进程通信管理_第1页
操作系统实验报告进程通信管理_第2页
操作系统实验报告进程通信管理_第3页
操作系统实验报告进程通信管理_第4页
操作系统实验报告进程通信管理_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、漳 州 师 范 学 院实 验 报 告班 级 13网络1班学号1308990337 姓名 成绩 同组人 实验日期 课程名称:操作系统实验题目:进程通信管理实验目的与要求1. 加深理解进程并发执行的概念,认识多进程并发执行的实质;2. 观察进程争夺资源的现象,分析其进程和原因,学习解决进程互斥的方法;3. 了解Linux系统中多进程之间通过软中断通信以及管道通信基本原理和应用方法;实验环境的配置第 1 页PC 兼容机。Window xp 以上操作系统实验内容与具体步骤闽 南 师 范 大 学1.软中断通信 编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉

2、键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: child process 1 is killed by parent! child process 2 is killed by parent!父进程等待两个子进程终止后,输出一下信息后终止: parent process is killed!程序:#include <unistd.h>#include <stdio.h>#include <signal.h>void waiting();void s

3、top();int wait_mark;int main()int p1,p2;while(p1=fork()=-1);if(p1>0) /父进程产生子进程1while(p2=fork()=-1);if(p2>0)/父进程产生了一个子进程2/父进程printf("parentn");wait_mark=1;/将等待标志设置为1signal(SIGINT,stop);waiting();kill(p1,16);/kill(p2,17);wait(0);wait(0);printf("parent process is killed!n");/

4、父进程等待两个子进程终止后,输出一下信息后终止exit(0);else/子进程2printf("p2n");wait_mark=1;signal(17,stop);waiting();lockf(1,1,0);printf("child process 2 is killed by parent!n");lockf(1,0,0);exit(0);else/子进程1printf("p1n");wait_mark=1;signal(16,stop);waiting();lockf(1,1,0);printf("child pro

5、cess 1 is killed by parent!n");lockf(1,0,0);exit(0);void waiting()while(wait_mark!=0);void stop()wait_mark=0;1 分析结果并理解以上程序。理解分析:1.先创建父进程,由父进程分别产生子进程1和子进程2,依次输出p1,p2,parent。2.给父进程中断信号,父进程终止子进程,运行stop函数wait_mark=0;跳出waiting函数,输出parent process is killed!2修改程序,查看修改前结果跟修改后结果的区别,分析原因。. . else signal(

6、SIGINT, SIG_IGN); /* add this line */ signal(17,stop); . . . .else signal(SIGINT, SIG_IGN); /* add this line */ signal(16,stop); . . . .理解分析:1.先创建父进程,由父进程分别产生子进程1和子进程2,依次输出p1,p2,parent。2. 给父进程中断信号,父进程开始终止子进程,但是由于添加了signal(SIGINT, SIG_IGN);语句, 相当于使子进程忽略键入信号,此时按ctrl+c不会将子进程终止,程序可以正常运行。于是输出child proces

7、s 1 is killed by parent!和child process 2 is killed by parent!实验内容与具体步骤2.进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程p1和p2分别向管道各写一句话:Child 1 is sending a message!Child 2 is sending a message!而父进程则从管道中读出来自两个子进程的信息,显示在屏幕上。程序:#include<unistd.h>#include<stdio.h>#include<signal.h>in

8、t pid1,pid2;main()int fd3;char OutPipe100,InPipe100;pipe(fd);/fd0存管道的读入端,fd1是管道的写入端 while(pid1=fork()=-1);if(pid1=0)/对子进程1的操作printf("p1n");lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,"Child 1 is sending a message!");/Outipe数组存放"Child."write(fd1,OutPipe,50);/把OutPipe的内容写入管

9、道sleep(1);lockf(fd1,0,0);/释放对管道写入端的锁定exit(0);else/父进程产生的了子进程p1while(pid2=fork()=-1);if(pid2=0)/由p1产生子进程p2printf("p2n");lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,"Child 2 is sending a message!");/Outipe数组存放"Child."write(fd1,OutPipe,50);/把OutPipe的内容写入管道sleep(1);lockf(fd1,

10、0,0);/释放对管道写入端的锁定exit(0);elseprintf("parentn");wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从管道读取端读取数据存入 InPipeprintf("%sn",InPipe);/输出 InPipe的内容wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从上一次读取位置继续读取数据存入InPipeprintf("%sn",InPipe);/输出 InPipe的内容exit(0);请理解以上程序,多次运行并分析结果,并回答以下问题。理解

11、分析:在该管道通信中,有时是子进程p1,p2往管道中传送数据完后父进程再从管道中读取数据,有时是子进程p1往管道中传送数据后父进程从管道中读取数据,然后子进程p2再往管道中传送数据,父进程再从管道中读取数据。1) 管道通信的概念是什么管道通信即发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。2) 同步和互斥的概念是什么,在程序中如何实现的同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。互斥:是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就

12、不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。程序中实现:1.(子进程和父进程).父进程读出之前确定管道中有数据,否则阻塞自己,这一点通过系统调用wait()函数既可以实现,当子进程结束时父进程才执行,那么此时管道中肯定有子进程写入的数据了(这可以通过进程见的同步来办到)2.(子进程之间)子进程在写入之前要确定管道中的数据已被父进程读出,否则不能写入或者阻塞自己。(这可以通过进程见的互斥来间接办到,因为子进程间的互斥,所以每个子进程在执行开始都对管道pipe加锁,并且子进程在向管道中写入数据后还有调用sleep()系统用调用睡眠若干时间,那么就可保证父进程能够从管道中读出数据,然后下一子进程才能写入)3) 为什么要用两个wait(0)刚开始等待信号的到来,然后从管道中读出p1写进去的数据(第一个wait(0)),然后在等待信号的到来,从管道中读出p2写进去的数据(第二个wait(0))

温馨提示

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

评论

0/150

提交评论