加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

带有MAP_POPULATE的Linux mmap(),手册页似乎给出了错误的信息

发布时间:2020-12-14 01:01:34 所属栏目:Linux 来源:网络整理
导读:在我看来,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 b
在我看来,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;
...

我的观察错了吗?

解决方法

自您提出问题后,措辞已更新:

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.

希望这能澄清它!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读