在我看来,MAP_POPULATE不仅仅适用于私有映射,与手册页所说的相反:
MAP_POPULATE (since Linux 2.5.46) Populate (prefault) page tables for
a mapping. For a file mapping,this causes read-ahead on the file.
Later accesses to the mapping will not be blocked by page faults.
MAP_POPULATE is only supported for private mappings since Linux
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;
...
我的观察错了吗?