操作系统实验报告进程通信管理

  • 格式:doc
  • 大小:227.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

漳州师范学院

实验报告

班级 13网络1班学号1308990337 姓名成绩

printf("child process 2 is killed by parent!\n");

lockf(1,0,0);

exit(0);

}

}

else

{//子进程1

printf("p1\n");

wait_mark=1;

signal(16,stop);

waiting();

lockf(1,1,0);

printf("child process 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(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 process 1 is killed by parent!和child process 2 is killed by parent!

read(fd[0],InPipe,50);//从管道读取端读取数据存入InPipe

printf("%s\n",InPipe);//输出InPipe的内容

wait(0);//暂停当前进程的执行

read(fd[0],InPipe,50);//从上一次读取位置继续读取数据存入InPipe

printf("%s\n",InPipe);//输出InPipe的内容

exit(0);

}

}

}

请理解以上程序,多次运行并分析结果,并回答以下问题。

理解分析:在该管道通信中,有时是子进程p1,p2往管道中传送数据完后父进程再从管道中读取数据,有时是子进程p1往管道中传送数据后父进程从管道中读取数据,然后子进程p2再往管道中传送数据,父进程再从管道中读取数据。

1)管道通信的概念是什么

管道通信即发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。2)同步和互斥的概念是什么,在程序中如何实现的

同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。

互斥:是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。

程序中实现:1.(子进程和父进程).父进程读出之前确定管道中有数据,否则阻塞自己,这一点通过系统调用wait()函数既可以实现,当子进程结束时父进程才执行,那么此时管道中肯定有子进程写入的数据了(这可以通过进程见的同步来办到)

2.(子进程之间)子进程在写入之前要确定管道中的数据已被父进程读出,否则不能写入或者阻塞自己。(这可以通过进程见的互斥来间接办到,因为子进程间的互斥,所以每个子进程在执行开始都对管道pipe加锁,并且子进程在向管道中写入数据后还有调用sleep()系统用调用睡眠若干时间,那么就可保证父进程能够从管道中读出数据,然后下一子进程才能写入)

注:如果填写内容超出表格,自行添加附页。