You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式Linux中tmpfs占用共享内存的原因及共享进程分析

环境信息

root@mcu-v1:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               160.0M    116.7M     43.3M  73% /
devtmpfs                 61.0M         0     61.0M   0% /dev
tmpfs                    61.0M     80.0K     61.0M   0% /run
tmpfs                    61.0M      9.1M     52.0M  15% /var/volatile
/dev/mtdblock2           96.0M      3.0M     93.0M   3% /mnt/app
tmpfs占用共享内存的原因及内存共享范围

1. 为何tmpfs会被统计到共享内存中?

tmpfs是完全基于系统RAM(或交换分区)实现的文件系统,所有数据(文件内容、元数据)都存储在内存的页缓存中。

free命令的"shared"字段统计的是可被多个进程共享的内存页,而tmpfs的页缓存恰好符合这个特性:这些页不属于某个进程的私有内存,而是由内核管理的公共缓存,任何有权限访问tmpfs文件的进程都可以复用这些页。当你往/var/volatile(tmpfs挂载点)写入文件时,内核会分配内存页存储文件内容,并将这些页归类到共享内存统计范畴,导致free的shared数值增长。

嵌入式系统的free工具通常会直接将tmpfs使用的内存计入shared,这是因为tmpfs本质就是内核提供的共享内存型文件系统,和桌面Linux的统计逻辑一致。

2. 这些内存会在哪些进程间共享?

  • 访问同一tmpfs文件的进程:如果多个进程读写/var/volatile下的同一个日志文件,它们会共享该文件对应的页缓存,无需各自复制内存页。
  • 所有进程与内核:tmpfs的元数据(目录项、inode结构等)由内核维护,这些内核空间的内存对所有用户进程可见,属于全局共享范畴。
  • 通过mmap映射同一tmpfs文件的进程:若进程用mmap()系统调用将tmpfs文件映射到自身地址空间,映射后的内存页会在所有做了相同映射的进程间共享,减少内存冗余。

即便暂时只有单个进程操作tmpfs文件,内核仍会将这些页标记为可共享,所以free的shared数值依然会增长——这是内核为后续可能的共享访问提前做的优化。


内容的提问来源于stack exchange,提问作者Moh3N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:35:17