泰宁新闻网

共享内存(shm)学习笔记

泰宁新闻网 http://www.tainingxinwen.cn 2021-01-14 09:35 出处:网络
shm,共享内存(shm)学习笔记 共享内存     共享内存是系统创建的特殊地址空间,允许不相关的多个进程使用这个内存空间,即多个进程能够使用同一块内存中的数据。

shm,共享内存(shm)学习笔记

共享内存

    共享内存是系统创建的特殊地址空间,允许不相关的多个进程使用这个内存空间,即多个进程能够使用同一块内存中的数据。

    共享内存与其他进程通信方式相比较,不需要复制数据,直接读写内存,是一种效率非常高的进程通信方案。但它本身不提供同步访问机制,需要我们自己控制。在LINUX中,只要把共享内存段连接到进程的地址空间中,这个进程就可以访问共享内存中的地址了。

LINUX系统提供的共享内存操作函数与信号量、消息队列等类似,主要有以下几个:

  1. int shmget(key_t key,int shmsz,int shmflg);
  2. void *shmat(int shmid,const void *shmaddr, int shmflg);

    如果shmaddr为0 则此段连接到由内核选择的第一个可用地址上,这是推荐的使用方式;
    如果shmaddr非零,并且没有指定SHM_RND,则此段链接到addr所指的地址上;
    如果shmaddr非零且指定SHM_RND,则此段链接到shmaddr - (addr mod ulus SHMLBA)所表示的地址上。SHM_RND的意思是低边界地址倍数,它总是2的乘方。该算式是将地址向下取最近的一个SHMLBA的倍数;

  1. int shmdt (const void *shmaddr);
  2. int shmctl(int shmid, int cmd,struct shmid_ds *buf);

以上各函数含义如下:

  1. Shmget()函数分配一块新的共享内存。Shmsz指明共享内存的大小,以字节为单位,shmflg的设置与信号量的semget()函数中的参数semflg类似。

        如果shmget()函数调用成功则返回共享内存的ID;否则返回-1.

  1. Shmat()函数的作用是连接共享内存与某个进程的地址空间。Shmid是shmget()函数返回的共享内存ID。Shmaddr是共享内存连接到进程中的存放地址,一般设置为空指针,表示交由系统完成这个工作。Shmflg设置共享内存的控制选项,有两个可能取值:SHM_RND(与shmaddr参数相关)与SHM_RDONLY(只允许读)。如果shmat()函数调用成功则返回指向共享内存的指针;否则返回-1.
  2. Shmdt()函数用来解除进程与共享内存区域的关联,使当前进程不能继续访问共享内存。参数shmaddr是shmat()函数返回的指针。如果操作成功则返回0;失败则返回-1.
  3. Shmctl()函数实现对共享内存区域的控制操作。其用法与消息队列的msgctl()函数类似。

共享内存(shm)学习笔记的相关内容如下:

指令| 计算机病毒主要造成| 计算机指令由哪两部分组成| 计算机软件系统包括| 汇编语言是一种| mips是指计算机的什么| 共享gpu内存为什么几乎不用| 共享系统内存好还是显存好|

本文标题:共享内存(shm)学习笔记
http://www.tainingxinwen.cn/news/601777.html

0

精彩评论

暂无评论...
验证码 换一张
取 消