居民记忆过程增加,但没有重大页面故障



我已经创建了Bellow小C程序,该程序使用malloc()()分配了50MB的内存,然后使用循环"触摸"每个页面以使其成为居住。

int main ()
{
  // Map 50M to RAM
  unsigned char *p = malloc(52428800);
  sleep(5);
  // Touch every page 
  for (int i = 0; i< 52428800; i+=4096)
    p[i] = 1;    
  sleep(100000);
}

的确,该程序似乎可以工作,这意味着在第一个5秒睡眠之后," Top Command"输出上的居民内存开始填充,并最终将所有虚拟内存分配给RAM。

PID   %MEM    VIRT    RES   CODE    DATA   SHR                                             
32486  0.6   55396   52360     4   51528   1104   

我注意到该程序的页面故障,只有较小的故障:

ps -ef -o min_flt,maj_flt 32486 
MINFL  MAJFL
12879      0

不应该有重大页面故障吗?据我了解,当我使用malloc()时,创建了一个虚拟地址空间。在每个虚拟页面上编写事先,实际的驻留大小很小,但是之后等于所请求的虚拟内存。

当我"触摸"页面(为了使它们居住)时,每个页面都会从磁盘转移到DRAM,对吗?为什么没有任何重大页面错误?

另外,当您使用50m的malloc(),并且您注意到居住尺寸时,只有几个kbytes,其余页面在哪里?他们在磁盘上吗?

操作系统可以创建需求零页面以支持您的malloc呼叫。您在这里做了一些事情,以强迫磁盘阅读。

修改页面后,您可能想尝试第二个循环以查看是否导致页面故障。

相关内容

  • 没有找到相关文章

最新更新