【发布时间】:2014-10-05 20:46:09
【问题描述】:
磁盘上的可执行文件首先需要将其代码和数据部分加载到 RAM 中,然后才能执行。当可执行文件存储在 tmpfs 中时,它已经在 RAM 中,那么内核是否通过将 tmpfs 页面映射到进程地址空间来绕过将可执行文件加载到 RAM 的步骤?答案是否适用于可执行文件和加载的库?
【问题讨论】:
标签: memory linux-kernel tmpfs
磁盘上的可执行文件首先需要将其代码和数据部分加载到 RAM 中,然后才能执行。当可执行文件存储在 tmpfs 中时,它已经在 RAM 中,那么内核是否通过将 tmpfs 页面映射到进程地址空间来绕过将可执行文件加载到 RAM 的步骤?答案是否适用于可执行文件和加载的库?
【问题讨论】:
标签: memory linux-kernel tmpfs
您的问题似乎已在 2007 年的 post on the Linux Kernel Mailing List 中得到解答
(由于 tmps 是一种存储在文件系统缓存代码中的方案,没有后备存储,所以我认为提到的缓冲区缓存应该是“原始”)
菲利普·苏西问道:
问题是,当你在 tmpfs 上执行一个二进制文件时,它的代码段是否得到 直接映射到缓冲区缓存中的位置,还是被复制到 执行过程的另一个页面?至少,假设这是可能的 由于要对齐的段的 vma 和文件偏移量。
休·狄更斯回复了
其页面直接映射到执行进程中,无需复制。
您可能想阅读完整的主题 - 需要注意的是,这取决于具有 MMU 的系统,然后讨论转向 tmpfs 的非持久性。
我相信 Linux 的写时复制行为意味着您写入的任何数据页都会在第一次写入时为您的进程创建一个唯一的副本。
【讨论】: