两种共享内存的实现区别,shm和mmap

linux会有两种方式可以使用共享内存.
分别是shm_XX函数和mmap,这两种共享内存的是内核实现方式大同小异,但是还是有区别的.

二者的区别如下:

  • POSIX标准的是mmap,具有简单易用的特点.
  • system V标准的是shm_xx函数组(shm_get,shm_at,shm_dt,shm_ctl).
  • shm_xx函数的共享内存需要自己释放,即进程的结束不会导致共享内存的释放,他会一直保存直到手动释放或者关机.而mmap则相反,如果是非映射到文件,那么会在进程结束就结束了.
  • 当调用shm_get时,会创建一个文件并返回这个文件描述符,这个文件是内核创建的特殊的文件,它属于shm文件系统中,也就是说它的实现方式和mmap的大同小异,只是映射的文件是内核中特殊的文件系统中的文件,任何进程都可以共享.这个特殊的文件,会对应开辟的共享内存.当调用shm_at时会将该空间映射进进程的地址空间中.
  • shm_xx的特殊文件系统挂在点在/dev/shm中,也就是内存/交换分区中,所以会在系统重启后消失,里面的东西也就没了,而mmap可以映射到文件中.
    盗图
    参考资料:
    -两种linux共享内存参考资料链接
    -linux进程间通讯共享内存
    -要查看task_struct 和 mm_struct以及图片中的struct vm_area_struct 结构体间的关系,点这里

你可能感兴趣的:(饮水思源,练习过的数据结构与算法)