视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
操作系统实验报告 进程通信
2025-09-26 21:59:12 责编:小OO
文档
西北师范大学计算机科学与工程学院学生实验报告

学  号

专业计算机科学与技术姓名
课程名称操作系统实验班级2011级计师(1)班

实验名称实验五   进程通信

课程类型必修类
一.实验目的:

(1)了解Linux系统中进程通信的基本原理;

(2)了解和掌握管道通信机制;

(3)了解和熟悉消息通信机制、共享存储区机制以及信号通信机制。

二.实验内容

1. 编写一段程序,实现进程的管道通信。

   使用系统调用pipe( )建立一条管道,创建两个子进程P1和P2。 让P1和P2分别向管道各写一句话:

     Child 1 is  sending   a  message!

     Child 2 is  sending   a  message!

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

 要求父进程先接受子进程P1发来的消息,然后再接受子进程P2发来的消息。

2. 消息的创建、发送和接受。

使用系统调用msgget( )、msgsnd( )、msgrev( )及msgctl()编制一长度为1K的消息的发送和接受程序。

3. 共享存储区的创建、附接和断接。(选做)

     使用系统调用shmget( )、shmat( )、shmdt( )及shmctl()编制一个与上述功能相同的程序。

4. 编制一段程序,使其实现进程的软中断通信。(选做)

创建两个子进程,让父进程捕捉键盘上来的中断信号(即“ctrl+C”),当捕捉到信号后,父进程使用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止

       

Child process 1 is killed!

      Child process 2 is killed!

   父进程等待两个子进程终止后,输出如下的信息后终止:

      Parent process is killed!

三.程序示例

管道通信源代码:

#include

#include

#include

Int pid1,pid2;

Main()

{

    Int fd[2];

    Char outpipe[100],inpipe[100];

    Pipe(fd);

While ((pid1=fork())==-1;

If (pid1==0)

{

    Printf(“child 1 will going on!\\n”);

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

    Sprintf(outpipe,”child 1 process is sending message!”);

    Write(fd[1],outpipe,50);

    Sleep(5);

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

    Exit(0);

}

Else

{

    While ((pid2=fork())==-1;

If (pid2==0)

{

        Printf(“child 2 will going on!\\n”);

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

        Sprintf(outpipe,”child 2 process is sending message!”);

        Write(fd[1],outpipe,50);

        Sleep(5);

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

        Exit(0);

}

    Else

    {

        Wait(0);

        Read(fd[0],inpipe,50);

        Printf(“%s\\n”,inpipe);

        Wait(0);

        Read(fd[0],inpipe,50);

        Printf(“%s\\n”,inpipe);

        Exit(0);

    }

}

}

四.  分析分析实验结果

功能:使用系统调用pipe()建立一条管道线,两个子进程p1和p2分别向管道各写一句话,而父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。

说明:Lockf(files,function,size)

用作锁定文件的某些段或整个文件。其中:files是文件描述符,function是锁定和解锁(1表示锁定;0表示解锁),size是锁定和解锁的字节数,若为0,则表示从文件的当前位置到文件尾。

实验结果:

Child 1 will going on!

     Child 2 will going on!

     Child 1 process is sending message!

     Child 2 process is sending message!

五、实验总结

通过本次试验,充分了解了Linux系统中进程通信的基本原理,掌握管道通信机制原理和方法,熟悉运用消息通信机制、共享存储区机制以及信号通信机制。

实验评语:
实验成绩                  教师签名

下载本文
显示全文
专题