操作系统实验指导书(4)

2018-12-20 23:02

操作系统实验指导书

5.拓展训练

在进程控制的实验中,结果往往一闪而过,这是为什么?需要如何改进?

13

操作系统实验指导书

实验6进程间的通信实验

1.实验目的

了解Linux系统中进程通信的基本原理。

2.实验设备

计算机、安装了Linux的虚拟机。

3. 实验内容及要求

(1)软中断通信:编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程与子进程之间传递消息。

(2)进程的管道通信:编制一段程序,实现进程的管道通信。

4.实验步骤

4.1软中断通信

〈任务1〉

编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:

child process1 is killed by parent! child process2 is killed by parent!

父进程等待两个子进程终止后,输出以下信息后终止: parent process is killed! 〈程序〉

#include #include #include

void waiting(),stop(); int wait_mark;

main() {

14

操作系统实验指导书

int p1,p2; if(p1=fork()) /*创建子进程p1*/ { if(p2=fork()) /*创建子进程p2*/ { wait_mark=1; signal(SIGINT,stop); /*接收到^c信号,转stop*/ waiting(); kill(p1,16); /*向p1发软中断信号16*/ kill(p2,17); /*向p2发软中断信号17*/

wait(0); /*同步*/ wait(0); printf(\ exit(0); } else { wait_mark=1; signal(SIGINT,stop); waiting(); lockf(1,0,0); printf(\ is killed by parent!\\n\ lockf(1,0,0); exit(0); } } else { wait_mark=1; signal(SIGINT,stop); waiting(); lockf(1,0,0); printf(\ lockf(1,0,0); exit(0); } }

void waiting() { while (wait_mark!=0); }

15

操作系统实验指导书

void stop() { wait_mark=0; }

4.2进程的管道通信

〈任务2〉

编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程p1和p2分别向通道个写一句话:

child1 process is sending message! child2 process is sending message!

而父进程则从管道中读出来自两个进程的信息,显示在屏幕上。

〈程序〉

#include #include #include int pid1,pid2;

main( ) { int fd[2];

char outpipe[100],inpipe[100];

pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) {

lockf(fd[1],1,0);

sprintf(outpipe,\ /*把串放入数组outpipe中*/

write(fd[1],outpipe,50); /*向管道写长为50字节的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else

{

while((pid2=fork( ))==-1); if(pid2==0)

{ lockf(fd[1],1,0); /*互斥*/

sprintf(outpipe,\ write(fd[1],outpipe,50); sleep(5);

16

操作系统实验指导书

lockf(fd[1],0,0); exit(0); }

else

{ wait(0); /*同步*/

read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/ printf(\ wait(0);

read(fd[0],inpipe,50); printf(\ exit(0); } } }

5.拓展训练

〈任务3〉//可选作 在上面的任务1中,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。这里,signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分别为忽略键信号以及忽略中断信号。

<程序>

#include #include #include int pid1,pid2; int EndFlag=0; int pf1=0; int pf2=0;

void IntDelete() { kill(pid1,16); kill(pid2,17); EndFlag=1; }

void Int1() { printf(\ exit(0); }

17


操作系统实验指导书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《伯牙绝弦》 教案反思

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: