【Linux操作系统】--System V的共享内存进程通信
目录
V起源
共享内存应用原理
共享内存接口
创建共享内存
测试
创建和删除代码
挂载接口shmat
去关联调用接口shmdt
第二个进程与共享内存挂载
两个进程进行通信
共享内存的特性
补充知识
【的第二个参数size】
shmid每次运行的数量会增加问题
V信号量(非重点)
V起源
进程间通信除了通过管道,都是基于文件的通信方式,还有一种方式是:标准的进程间通信方式。是一个在OS层面专门为进程通信设计的一个方案。这些都是由计算机科学家和程序员设计的,并且需要给用户使用。
如果要给用户用,是以什么方式给用户使用的呢?在操作系统层面上,是OS内核的一部分,是为OS中多进程提供的一种通信方案。但是OS不相信任何用户,给用户提供功能的时候,采用系统调用。所以 V进程间通信,一定会存在专门用来通信的接口: call。
因为在早期由很多的方案,但是我们需要统一使用一个方案,所以现在诞生了在统一主机内的进程间通信方案: V方案。
进程间通信的本质就是:让不同的进程看到同一份资源。
共享内存原理
A和B两个进程互相独立,物理内存当中代码和数据也互相独立,所以两个进程不会互相干扰,这就是两个进程具有独立性。
现在我们要进行进程间通信,我们要在物理内存当中要创建一个内存块。但是实际可能并不是这么操作,要根据当前内存使用情况来具体操作,我们现在这么理解。
第二部就是要通过某种调用,让进程”挂接“到这份内存空间上。什么是挂接到内存?我们已经有了一块内存空间,并且地址空间中有很大一批没有使用的物理地址空间,页表也有很多没有被填写的映射关系,所以通过某种系统调用,把刚刚这个内存空间通过页表映射到地址空间中。所以我们在地址空间中就能拿到这个内存空间的起始地址。那么A和B进程都一样,第一步创建的内存块通过页表映射,都挂接到了各自地址空间中。让参与通信的多个进程挂接到同一份内存上,此时达到了让不同进程看到了同一份资源,这种通信方案叫做共享内存
1.通过某种调用,在内存中创建一份内存空间。
2.通过某种调用,让进程”挂接“到这份内存空间上。
在后面可能不会共享内存了。所以在不用共享内存的时候
3.去关联(去挂接)
4.释放共享内存
综上共享内存的接口有4个,当然这四个是核心接口。