分享

ipcs的dest

 mrjbydd 2011-06-06
关于linux下ipcs的dest(共享内存)


我们解开util-linux-2.12a-16.EL4.6.src.rpm的源码,在文件sys-utils/ipcs.c中的do_shm函数可以看到,程序通过调用shmctl的SHM_INFO命令获取共享内存的整体信息,然后逐段调用shmctl的STAT命令,获取该段内存的信息(就是每一个shmid对应的信息)。当该段内存的mode字段设置了SHM_DEST位时就会显示"dest"字样。

SHM_DEST是内核设置的,接着再看看内核关于实现ipc的源码,在ipc/shm.c中可以看到,当用户调用shmctl的IPC_RMID 时,内核首先看有多少个进程还和这段内存关联着,如果关联数为0,就会销毁(释放)这段内存,否则就设置这段内存的mode位SHM_DEST,并设置它的key为IPC_PRIVATE,这意味着关联着的进程仍可合法存取这端内存,但是它不能再被新的进程关联了。

打个比方,有3个进程关联着同一段共享内存,其中一个进程调用了IPC_RMID,试图删除该段内存,但是由于还有两个进程在使用这段内存,所以结果显示为dest,等其他两个进程退出了这段内存就释放了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多