shmget物理内存_shmget共享内存

本文详细介绍了Linux系统中使用shmget创建和管理共享内存的过程,包括创建、映射、分离和控制等步骤。通过示例代码展示了如何在进程中创建、连接、使用和释放共享内存,强调了在没有内置同步机制的情况下,使用共享内存需要注意的并发问题。
摘要由CSDN通过智能技术生成

Linux为共享内存提供了四种操作。

1. 共享内存对象的创建或获得。与其它两种IPC机制一样,进程在使用共享内存区域以前,必须通过系统调用sys_ipc (call值为SHMGET)创建一个键值为key的共享内存对象,或获得已经存在的键值为key的某共享内存对象的引用标识符。以后对共享内存对象的访问都通过该引用标识符进行。对共享内存对象的创建或获得由函数sys_shmget完成,其定义如下:

int sys_shmget (key_t key, int size, int shmflg)

这里key是表示该共享内存对象的键值,size是该共享内存区域的大小(以字节为单位),shmflg是标志(对该共享内存对象的特殊要求)。

它所做的工作如下:

1) 如果key == IPC_PRIVATE,则总是会创建一个新的共享内存对象。

但是  (The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more clearly show its function)

* 算出size要占用的页数,检查其合法性。

* 申请一块内存用于建立shmid_kernel数据结构,注意这里申请的内存区域大小不包括真正的共享内存区,实际上,要等到第一个进程试图访问它的时候才真正创建共享内存区。

* 根据该共享内存区所占用的页数,为其申请一块空间用于建立页表(每页4个字节),将页表清0。

* 搜索向量表shm_segs,为新创建的共享内存对象找一个空位置。

* 填写shmid_kernel数据结构,将其加入到向量表shm_segs中为其找到的空位置。

* 返回该共享内存对象的引用标识符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值