在我看来,MAP_POPULATE
不仅仅是私有映射,与手册页所说的相反:
MAP_POPULATE(自Linux 2.5.46起)填充(prefault)页表 映射。对于文件映射,这会导致对文件进行预读。 以后访问映射不会被页面错误阻止。 自Linux以来,MAP_POPULATE仅支持私有映射 2.6.23。
根据我对mmap.c的Linux内核源代码的粗略检查,看起来MAP_POPULATE
与versions going back as far as 2.6.34中的MAP_PRIVATE
完全没有任何关系。
以下是3.14内核实现中来自mmap.c的最新代码的摘录:
...
1364 addr = mmap_region(file, addr, len, vm_flags, pgoff);
1365 if (!IS_ERR_VALUE(addr) &&
1366 ((vm_flags & VM_LOCKED) ||
1367 (flags & (MAP_POPULATE | MAP_NONBLOCK)) == MAP_POPULATE))
1368 *populate = len;
1369 return addr;
...
我的观察错了吗?
答案 0 :(得分:6)
自您提出问题后,措辞已更新:
Before: MAP_POPULATE is only supported for private mappings since Linux 2.6.23.
After: MAP_POPULATE is supported for private mappings only since Linux 2.6.23.
换句话说,您可以将MAP_POPULATE用于私有映射,但至少需要Linux 2.6.23。
希望这能澄清它!