Memory 运行时,tmpfs中唯一存储的可执行代码是否复制到RAM的另一部分?

Memory 运行时,tmpfs中唯一存储的可执行代码是否复制到RAM的另一部分?,memory,linux-kernel,tmpfs,Memory,Linux Kernel,Tmpfs,磁盘上的可执行文件需要先将其代码和数据部分加载到RAM中,然后才能执行。当一个可执行文件存储在tmpfs中时,它已经在RAM中了,那么内核是否通过将tmpfs页面映射到进程地址空间而绕过将可执行文件加载到RAM中的步骤呢?答案是否同时适用于可执行文件和加载的库?您的问题似乎在2007年的一份报告中得到了回答 (由于tmps是一种存储在文件系统缓存代码中的方案,没有后备存储,所以我认为提到的缓冲缓存应该是“原始的”) 菲利普·苏西问道: 问题是,当您在tmpfs上执行二进制代码时,它的代码段是否会

磁盘上的可执行文件需要先将其代码和数据部分加载到RAM中,然后才能执行。当一个可执行文件存储在tmpfs中时,它已经在RAM中了,那么内核是否通过将tmpfs页面映射到进程地址空间而绕过将可执行文件加载到RAM中的步骤呢?答案是否同时适用于可执行文件和加载的库?

您的问题似乎在2007年的一份报告中得到了回答

(由于tmps是一种存储在文件系统缓存代码中的方案,没有后备存储,所以我认为提到的缓冲缓存应该是“原始的”)

菲利普·苏西问道:

问题是,当您在tmpfs上执行二进制代码时,它的代码段是否会 直接映射到它在缓冲区缓存中的位置,还是将其复制到 执行过程的另一页?至少,假设这是可能的 由于要对齐的段的vma和文件偏移

休·狄更斯回答

它的页面直接映射到正在执行的进程中,无需复制

您可能需要阅读完整的线程—需要注意的是,这取决于是否有一个带有MMU的系统,然后讨论转向tmpfs的非持久性

我相信Linux的“写时拷贝”行为意味着您写入的任何数据页都会在第一次写入时为您的进程创建一个唯一的拷贝