mincore如何处理共享的tmpfs文件

qlckcl4x  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(86)

根据man page
mincore()返回一个向量,该向量指示调用进程的虚拟内存的页面是否驻留在核心(RAM)中,因此如果被引用,将不会导致磁盘访问(页面错误)。
但是,我不清楚它的确切含义--具体来说,RAM是指目标进程的虚拟内存,还是指任何进程Map的内存?
假设您有一个tmpfs文件(tmpfs.file),它在两个进程之间共享--进程A和进程B。进程AMaptmpfs.file,但只访问页面0。现在进程B访问页面2。也没人看第一页。进程A运行时mincore的预期输出是什么--是[1,0,0]还是[1,0,1]?从技术上讲,page 2存在于进程B的RAM中,或者系统的RAM中,但是进程A可能没有虚拟内存Map到它,所以我不确定这是否算.(测试显示它确实出现,但我想确保这是正确的)。

5kgi1eie

5kgi1eie1#

RAM是指物理内存。RAM属于ayarwm,没有进程A的RAM和进程B的RAM。
当进程Map文件时,每个进程都有3页虚拟内存分配给Map(我假设文件大小为3页)。
当A访问页0时,该页被取入RAM。此时,mincore()在由任何一个进程运行时都应该返回[1, 0, 0]
当B访问页2时,该页被取入RAM。假设没有任何事情导致页面0被弹出,那么mincore()将在任一进程中返回[1, 0, 1]
调用mincore()的进程是否访问了特定的页面并不重要。如果其他进程访问了该页面,它将被加载到RAM中,并且该进程在尝试访问它时不会出现页面错误。
当使用像tmpfs这样的虚拟文件系统时,事情可能会变得很奇怪,因为文件系统本身可以存储在RAM中--没有什么可以从磁盘读取的。

相关问题