5分钟学会两年经验Linux运维都不懂的内核问题
|
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 等等。 说到这,可以小结下,进程空间中代码段,数据段,动态链接库(共享文件映射),mmap 共享匿名映射都存在于 cache 中,但是这些内存页都有被进程引用,所以是不能释放的,基于 tmpfs 的 ipc 进程间通信机制的生命周期是随内核,因此也是不能通过 drop_caches 释放。 虽然上述提及的cache不能释放,但是后面有提到,当内存不足时,这些内存是可以 swap out 的。 因此 drop_caches 能释放的就是当从磁盘读取文件时的缓存页以及某个进程将某个文件映射到内存之后,进程退出,这时映射文件的的缓存页如果没有被引用,也是可以被释放的。 4.4 内存自动释放方式 当系统内存不够时,操作系统有一套自我整理内存,并尽可能的释放内存机制,如果这套机制不能释放足够多的内存,那么只能 OOM 了。 (编辑:武陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows终端将成为Windows 11默认的命令行工具
- Mozilla发布了Firefox Reality虚拟现实网络浏览器
- 如何在Linux中安装、配置和使用Fish Shell?
- 如何拥有一个Windows 10和Debian 10的双系统
- 微软发布Windows 10 2019五月更新:有多项改进、支持轻量级
- windows-server-2012-r2 – Server 2012无法找到C:Boot to
- 分享win10免费激活方法
- 电脑不能复制粘贴
- windows-server-2008 – Windows 2008:WinSXS目录不受控制
- 好消息,Windows 10自带的免费视频编辑器,功能强大,使用简

