共享内存 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值