2014-05-06 11 views
5

Có vẻ với tôi như MAP_POPULATE không chỉ dành cho các ánh xạ tư nhân, trong mâu thuẫn với những gì man page nói:Linux mmap() với MAP_POPULATE, trang người đàn ông dường như cung cấp thông tin sai

MAP_POPULATE (vì Linux 2.5 .46) Điền các bảng trang (prefault) cho một ánh xạ. Đối với một ánh xạ tệp, điều này gây ra đọc trước trên tệp. Quyền truy cập sau vào bản đồ sẽ không bị chặn bởi lỗi trang. MAP_POPULATE chỉ được hỗ trợ cho ánh xạ riêng tư kể từ Linux 2.6.23.

Dựa trên kiểm tra lướt qua của tôi về nguồn hạt nhân Linux cho mmap.c, nó trông giống như MAP_POPULATE hoàn toàn không có mối quan hệ với MAP_PRIVATE nào trong versions going back as far as 2.6.34.

Dưới đây là một đoạn trích của mã mới nhất từ ​​mmap.c như việc thực hiện 3.14 kernel:

... 
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; 
... 

Tôi có sai lầm trong quan sát của tôi?

+0

Tôi đọc nhận xét đó là "trước 2.6.23, MAP_POPULATE không được hỗ trợ cho ánh xạ riêng" (không có thông tin về MAP_POPULATE cho ánh xạ không phải riêng tư). –

+0

Tôi đoán nó có thể được diễn giải theo cách đó. Có lẽ "họ" cần phải thay đổi ngôn ngữ để nó ít mơ hồ hơn. –

Trả lời

5

Các từ ngữ đã được cập nhật từ khi bạn hỏi những câu hỏi:

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. 

Nói cách khác, bạn có thể sử dụng MAP_POPULATE cho ánh xạ tư nhân, nhưng bạn cần ít nhất Linux 2.6.23 trở lên.

Hy vọng điều này sẽ làm rõ!

+0

Tôi không nghĩ rằng từ ngữ giúp với sự mơ hồ chút nào. Khi một đồng nghiệp và tôi đọc điều này vào ngày hôm sau, chúng tôi đã giải thích nó là 'MAP_POPULATE được hỗ trợ (chỉ dành cho ánh xạ riêng) kể từ Linux 2.6.23.' Có nghĩa là, nó chỉ hỗ trợ ánh xạ riêng trong các phiên bản sau của hạt nhân. Tôi muốn giới thiệu một cái gì đó như 'Kể từ khi Linux 2.6.23 MAP_POPULATE hoạt động cho cả ánh xạ riêng và chia sẻ. Trước phiên bản 2.6.23, chỉ các bản đồ được chia sẻ mới được hỗ trợ.' –

Các vấn đề liên quan