System V 进程通信详解:消息队列与信号量
消息队列
通信的本质是让不同进程看到同一份资源。这份资源可以是基于文件的管道,在内存级申请一块资源,或者是一个被特殊处理的文件。它也可以是真真实实地在物理内存申请资源的共享内存,那么在内核里是否可以存在一串公共的队列结构呢?这完全可以。
- 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
- 每个数据块都被认为是有个类型,接收者进程接收的数据块可以有不同的类型值
- 特性方面:IPC 资源必须删除,否则不会自动清除,除非重启,所以 System V IPC 资源的生命周期随内核

既然可以在内核中申请消息队列,那么如果有多个进程创建多个消息队列,势必会有许多消息队列,哪些队列是刚创建的,哪些被销毁了,哪些是属于谁创建的。OS 是否需要管理呢?要管理:先描述,再组织。
了解消息队列
实际上消息队列与共享内存是非常类似的,只是接口需要熟悉下。为什么会这样呢?因为它们都是遵守 System V 标准的。

但是消息队列不能像共享内存一样直接访问物理内存,而是需要通过系统调用。

信号量
- 多个执行流 (进程),能看到的同一份公共资源:共享资源
- 被保护起来的资源叫做临界资源
- 保护的方式常见:互斥与同步
- 任何时刻,只允许一个执行流访问资源,叫做互斥
- 多个执行流,访问临界资源的时候,具有一定的顺序性,叫做同步
- 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。
- 在进程中涉及到互斥资源的程序段叫临界区 (简单来说就是访问资源的那部分代码)。

所谓的对共享资源进行保护,本质是对访问共享资源的代码进行保护 (如何保护呢?--> 写代码啊 --> 同步和互斥、加锁和解锁)。











