本文主要是介绍SystemV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、共享内存
1、直接原理
进程间通信的本质是:先让不同的进程,看到同一份资源!!
我们要把这句话奉若圭臬一般
到了共享内存了支持双向通信能读也能写,但是一般都是一个读一个写
要想通信先看到同一个份资源,则
OS帮助申请内存,通过页表挂接到进程地址空间中,给应用层返回起始虚拟地址
如果要释放共享内存:先去关联,再释放共享内存
上面的操作都是进程直接做的吗?不是。直接由操作系统来做。
因为不能让进程直接malloc,你这样申请了那这块空间就是你的,会破坏了进程的独立性
所以必须利用系统调用,这样创建出来的共享内存就不属于进程私有的
操作系统要不要管理所有的共享内存呢??先描述,在组织
内核结构体描述共享内存,就得有结构体,这个共享内存多大,谁申请的,当前几个进程和我关联…
然后把所有的结构体用链表数组管理起来
所以在OS层面上,对共享内存的管理行为,变成对某种数据结构的增删查改
接下来要学习共享内存,要么就应用层面上学,系统调用接口搞懂
往底层学,就要找对应的先描述在组织是怎么做的!
在释放共享内存时,为什么先去关联,再释放共享内存?
因为共享内存的管理属性结构体中同样也维护了这块内存的引用计数,有多少个进程引用了它
万一别的进程还在引用着你难道直接释放吗?不可能
所以利用属性中引用计数,让引用计数–,等引用计数–到0在释放
共享内存的这块物理内存只是单纯保存数据,引用计数放在属性结构体中
2、直接代码
3、共享内存的特性,扩展代码
这篇关于SystemV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!