共享内存的简单了解

共享内存

共享内存就是不同进程之间共享的内存区域简单地说共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,它是在多个进程之间对内存段进行映射的方式实现内存共享的。这是IPC最快的方式。

工作机制

 

共享内存的简单了解_第1张图片

共享内存的简单了解_第2张图片

共享内存的效率

采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝,采用共享内存的通信方式效率是非常高的。

共享内存的特点

  1. 共享内存允许两个不相关的进程访问同一个内存
  2. 共享内存是两个正在运行的进程之间和传递数据的最有效方式
  3. 不同进程之间共享的内存通常安排为同一段物理内存
  4. 共享内存不提供任何互斥和同步机制,一般用信号量对临界资源进行保护。
  5. 接口简单
共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()
ftok():获得一个ID号
shmget():用来创建共享内存
shmat():用来将内存段连接到进程地址空间
shmdt():将共享内存段与当前进程脱离
shmctl():用于控制共享内存

查看共享内存
-------------------------------------------------------
ipcs -m
------ Shared Memory Segments --------
key        shmid               owner             perms           bytes        nattch        status
0x0122f9df 12419074    app_usr      666     70604918     0            
0x0001b3ef 14450693    app_usr      666     70604278     0             
0x0003d09a 14385158    app_usr      666     67732        1 
#各字段含义:
第一列就是共享内存的key;
第二列是共享内存的编号shmid;
第三列就是创建的用户owner;
第四列就是权限perms;
第五列为创建的大小bytes;
第六列为连接到共享内存的进程数nattach;
第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销毁这段共享内存,否则设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。

#删除共享内存
直接使用#ipcrm -m shmid可能不能直接删除掉还存在进程使用的共享内存。
这时候可以用ps -ef对进程进行查看,kill掉多余的进程后,再使用ipcs查看。
共享内存的删除
---------------------------------------------------------------------1、通过命令删除
ipcrm      -M          共享内存的键值

你可能感兴趣的:(linux)