![](https://csdnimg.cn/release/download_crawler_static/87330008/bg1.jpg)
《操作系统》实验讲义
1
实验三 进程间通信
一.实验目的
1.掌握利用管道机制实现进程间的通信的方法
2.掌握利用消息缓冲队列机制实现进程间的通信的方法
3.掌握利用共享存储区机制实现进程间的通信的方法
4.加深对上述三种通信机制的理解。
二.实验工具与设备
已安装 Linux 操作系统的计算机。
三.实验预备内容
阅读 Linux 系统的 msg.c、sem.c 和 shm.c 等源代码文件,熟悉 Linux 的三种通信机制。
四.实验内容
1.掌握实现进程间通信的系统调用的功能和方法
进程通信,是指进程之间交换信息。从这个意义上讲,进程之间的同步、互斥也是一种信息交
换,也是一种通信。但是,这里所说的“通信”是指进程之间交换较多的信息这样一种情况,特别是
在由数据相关和有合作关系的进程之间,这种信息交换是十分必要和数量较大的。
进程间通信是协调解决多个进程之间的约束关系,实现进程共同进展的关键技术,是多道系统
中控制进程并发执行必不可少的机制。
(1)进程的通信方式:
a. 直接通信是指信息直接传递给接收方,如管道。在发送时,指定接收方的地址或标识,也可
以指定多个接收方或广播式地址, send(Receiver, message)。在接收时,允许接收来自任意发
送方的消息,并在读出消息的同时获取发送方的地址, receive(Sender,message)。
b. 间接通信:借助于收发双方进程之外的共享数据结构作为通信中转,如消息队列。这种数据
结构称为缓冲区或信箱。通常收方和发方的数目可以是任意的。
(2)进程间通信的类型:
a. 共享存储器系统:基于共享数据结构的通信方式:只能传递状态和整数值(控制信息),包括
进程互斥和同步所采用的信号量机制。速度快,但传送信息量小,编程复杂,属于低级通信;
基于共享存储区的通信方式:能够传送任意数量的数据,属于高级通信。
b. 消息传递系统:在消息传递系统中,进程间的数据交换以消息为单位,用户直接利用系统提
供的一组通信命令(原语)来实现通信。
c. 管道通信:管道是一条在进程间以字节流方式传送的通信通道。它由 OS 核心的缓冲区(通
常几十 KB)来实现,是单向的;在实质上,是一个有 OS 维护的特殊共享文件,常用于命
令行所指定的输入输出重定向和管道命令。在使用管道前要建立相应的管道,然后才可使用。
(3)Linux 管道
a. 通过 pipe 系统调用创建无名管道,得到两个文件描述符,分别用于写和读。
– int pipe(int fd[2]); //头文件 unistd.h,返回值:0(成功),-1(发生错误)
– 文件描述符 fd[0]为读端,fd[1]为写端
– 通过系统调用 write 和 read 进行管道的写和读
– 进程间双向通信,通常需要两个管道