80%的 Linux 运维都不懂的内核问题
就是在 tmpfs 文件系统上创建一个文件,然后通过这个内存文件实现进程通信,这我就不写测试程序了,而且这也是不能回收的,因为共享内存ipc机制生命周期是随内核的,也就是说你创建共享内存之后,如果不显示删除的话,进程退出之后,共享内存还是存在的。 之前看了一些技术博客,说到 Poxic 和 System V 两套 ipc 机制(消息队列,信号量以及共享内存)都是使用 tmpfs 文件系统,也就是说最终内存使用的都是 pagecache,但是我在源码中看出了两个共享内存是基于 tmpfs 文件系统,其他信号量和消息队列还没看出来(有待后续考究)。 posix 消息队列的实现有点类似与 pipe 的实现,也是自己一套 mqueue 文件系统,然后在 inode 上的 i_private 上挂上关于消息队列属性 mqueue_inode_info,在这个属性上,内核2.6时,是用一个数组存储消息,而到了4.6则用红黑树了存储消息(我下载了这两个版本,具体什么时候开始用红黑树,没深究)。 然后两个进程每次操作都是操作这个 mqueue_inode_info 中的消息数组或者红黑树,实现进程通信,和这个 mqueue_inode_info 类似的还有 tmpfs 文件系统属性shmem_inode_info 和为epoll服务的文件系统 eventloop,也有一个特殊属性struct eventpoll,这个是挂在 file 结构的 private_data 等等。 (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |