共享内存实现原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共享内存实现原理相关的知识,希望对你有一定的参考价值。

参考技术A

在磁盘上建立一个文件,每个进程存储器中,单独开辟一个空间来映射保存到实际硬盘,实际并没有反映到主存上。
使得进程之间通过映射同一个普通文件实现共享内存,普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

每个进程的共享内存都直接映射到实际物理存储器上shm保存到物理存储器(主存),实际的存储量直接反映到主存上。
进程间需要共享的数据被放在一个叫做 IPC共享内存区域 的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。

通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。
每一个共享内存区都有一个控制结构struct shmid_kernel。

主要API :shmget()、shmat()、shmdt()及shmctl()。

ps:Python开启多进程使用的是multiprocessing,进程传递了一个multiprocessing.Queue,使用的是shm共享内存机制。multiprocessing模块Value Array是基于mmap实现

Android Binder机制,共享内存实现原理

参考技术A Binder机制,共享内存实现原理

Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。

以上是关于共享内存实现原理的主要内容,如果未能解决你的问题,请参考以下文章

共享内存原理

JMM和底层实现原理

Java并发编程系列- JMM和底层实现原理

如何在unix环境下实现共享内存

MemoryFile 共享内存原理分析

进程间通信(共享内存)