本质原理:共享内存单元和存储单元本质来说就是一块物理内存单元和存储单元,多个进程通將同一块物理内存单元和存储单元都映射到自己的虚拟地址空间上通过自己的虚拟地址空间进行访问,数据共享
共享内存单元和存储單元创建以后,在内核中是由标识符的其他进程可以用过同一个标识符打开相同的共享内存单元和存储单元,进行映射
为什么共享内存單元和存储单元是最快的进程间通信方式:共享内存单元和存储单元直接通过虚拟空间访问共享内存单元和存储单元的数据不像管道以忣其他方式那样需要先将数据拷贝到内核态,获取数据时需要将数据从内核态中拷贝出少了两次数据的拷贝,因此时最快的进程间的通方式
1.创建共享内存单元和存储单元(开辟一块物理内存单元和存储单元,并在内核中进行描述)
2.进程将共享内存单元和存储单元映射到洎己的虚拟地址空间上并且获取映射后的首地址
4.不使用共享内存单元和存储单元,则解除映射(不会删除共享内存单元和存储单元只是解除了共享内存单元和存储单元与当前进程间的关系)
5.删除共享内存单元和存储单元(共享内存单元和存储单元有映射计数,只有为0时才会嫃的删除否则不会被删除)
key: 共享内存单元和存储单元的标识符,是一个整数可以自己设置,可以以通过系统提供的接口设置
size:共享内存单元和存储单元的大小
shmflag:共享内存单元和存储单元的标志位 IPC_CREAT--若共享内存单元和存储单元不存在则创建存在则打开。IPC_EXCL与IPC_CREAT同时使用若共享內存单元和存储单元不存在则创建,存在则报错
返回值:返回的共享内存单元和存储单元在代码中的操作句柄,是一个数字通过这个數字可以在内核中找到共享内存单元和存储单元的描述
addr: 映射到虚拟地址空间的首地址,推荐NULL由操作系统进行映射地址选择
shmflag: SHM_RDNOLY-只读/ 0 可读可写(前提时对共享内存单元和存储单元具有相对的操作权限)
返回值:映射到虚拟地址空间的首地址,通过这个首地址可以访问这块共享内存单元和存储单元
shm_start:映射首地址传入进来进行解除映射关系
shmid: 共享内存单元和存储单元的操作句柄
buf: 同于设置/获取共享内存单元和存储单元信息,用不到置NULL
ipcs 查看进程间通信资源
共享内存单元和存储单元生命周期随内核
共享內存单元和存储单元时最快的进程间通信方式
共享内存单元和存储单元不自带同步与互斥它的操作需要程序员的额外保护
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。