共享内存 Shared Memory

共享内存 Shared Memory

  • 共享内存允许两个不相关的进程,访问同一个逻辑内存。
  • 共享内存,没有提供同步机制。需要使用其他机制(互斥锁,信号量),对共享内存进行同步操作。

原理

  • 每个进程通过PCB标识,并拥有属于自身的地址空间(Address Space)。与之相应的,存在一个页表,将进程的虚拟地址与物理地址进行映射,并通过内存管理单元(MMU)进行管理。
  • 多个不同的虚拟地址,通过页表映射到相同的物理空间,这块物理空间即为共享内存
  • 特点:直接在内存上操作,速度快。一次读写,两次拷贝。

共享内存接口

  • ftok
# pathname 路径
# projectid 0~255
# 创建key表示,标识系统的唯一IPC资源
key_t ftok(pathname, projectid)
  • shmget 创建共享内存
# key ftok生成
# size 申请共享内存的大小
# flag 标识
# 新创建的共享内存,使用IPC_CREAT | IPC_EXCL | 066
# 已经存在的使用, IPC_CREATE 或 0
# 失败返回-1
int shmget(key_t key, size_t size, int shmflg)
  • shmat 挂接共享内存
# shmid 共享存储段标识符
# shmaddr 一般设置为0(具体含义百度)
# 读取方式,默认为读写,SHM_RDONLY只读
# 返回值,共享存储段的指针
void* shmat(int shmid, const void* shmaddr, int shmflg)
  • shmdt 去关联共享内存
# shmaddr 挂接后的返回的地址
# 返回值:成功返回0
int shmdt(const void* shmaddr)
  • shmctl 销毁共享内存
# shmid 工程存储段标识符
# 指定执行操作 ,设置 IPC_RMID表示可以删除共享内存

# 成功返回0
int shmctl(int shmid, int cmd, struct shmid_ds,buffer)

你可能感兴趣的:(C++)