这节我们开始学习System V IPC方案。
分别是共享内存,消息队列与信号量
会着重讲解共享内存,但是消息队列与信号量只会说明一下原理。
原因:System V是新设计的一套标准
- 与文件的整合度不高
- 只能进行本地通信
更何况,我们现在有了网络,可以进行更强大的通信。
目录
- 共享内存:
- 原理:
- 理解:
- 代码 + 理论:
共享内存:
原理:
首先我们要明确一点,进程间具有独立性,那我们通信必须要申请一块公共内存。下图就是一个简略的简述两个独立的A与B进程
我们回想一下动态库的加载,我们将加载到内存中的动态库可以分别通过页表映射到A与B的共享区,故动态库也叫做共享库(被多个进程同时拥有)。
那么共享内存当然也可以被加载到共享区,这样两个进程就可以有一块公共的内存空间了!
所以,通过地址空间的映射,让A和B看到同一份内存就叫做共享内存
理解:
-
所有的操作都是OS来完成的。–>因为OS是软硬件的管理者,
-
OS可以做,但是OS不知道什么时候做,所以OS需要提供系统调用接口,这样就可以由进程发起
-
不仅仅只有A与B进程可以通过共享内存进行通信,同理D和C,E和F也都可以!
-
OS注定要对共享内存进行管理。因为有的共享内存刚创建,有的要删除,有的要通信,这就需要管理起来,而管理就需要先描述在组织。
-
共享内存 = 内存空间(数据)+ 共享内存属性
代码 + 理论:
先来看看如何申请共享内存
我们先来分别理解一下
size:这个代表你想要多大字节的内存
shmflg:这是最主要的两个标志
与文件系统调用的传参是很相似的,都是本质都是位图的应用!
储蓄更新