根据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到它,所以我不确定这是否算.(测试显示它确实出现,但我想确保这是正确的)。
1条答案
按热度按时间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中--没有什么可以从磁盘读取的。