IPC-System V-进程间通信概念
基础概念
IPC函数接口
IPC对象删除和可持久性
信号量
-
System V的信号量集表示的是一个或多个信号量的集合。内核为每个信号量集维护一个semid_ds数据结构,而信号量集中的每个信号量使用一个无名结构体表示。
-
信号量比较特殊,首先它是个计数器,主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。 工作流程是检查控制该资源的信号量,如果信号量值大于0,则资源可用,并且将其减1,表示当前已被使用。如果信号量值为0,则进程休眠直至信号量值大于0。
消息队列
- 消息队列可以理解成是消息链表,存储在内核中,进程可以从中读写数据。与管道相比消息队列的优势在于可以独立于发送和接收进程而存在:进程可以在没有另外一个进程等待读的情况下进行写。还有通过发送消息还可以避免命名管道的同步和阻塞问题:一个进程往消息队列中写入数据后退出,另外一个进程仍然可以打开并读取消息
共享内存
- 共享内存允许两个或多个进程共享一定的存储区,因为不需要拷贝数据,所以这是最快的一种IPC。
- 共享内存就是映射一段能被其他进程所访问的内存,允许多个进程共享一个给定的存储区并直接访问,它是针对其它进程间通信方式运行效率低而专门设计的.它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信。
套接字
- 套接字(Socket)是由Berkeley在BSD系统中引入的一种基于连接的IPC,是对网络接口(硬件)和网络协议(软件)的抽象。它既解决了无名管道只能在相关进程间单向通信的问题,又解决了网络上不同主机之间无法通信的问题。