Ánh xạ thư viện dùng chung trong / Proc / pid / maps


8

Tại sao có /proc/pid/mapschứa một vài bản ghi cho cùng một thư viện? Đây là một ví dụ:

7fae7db9f000-7fae7dc8f000 r-xp 00000000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7dc8f000-7fae7de8f000 ---p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de8f000-7fae7de97000 r--p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de97000-7fae7de99000 rw-p 000f8000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20

Điều đó có nghĩa là gì ?

Câu trả lời:


12

Bốn bản ghi có các quyền khác nhau, vì vậy chúng không thể được hợp nhất.

  • Các r-xpentry mô tả một khối bộ nhớ thực thi ( xphép cờ). Đó là mã.
  • Các r--pentry mô tả một khối bộ nhớ mà chỉ có thể đọc được ( rphép cờ). Đó là dữ liệu tĩnh (hằng số).
  • Các rw-pentry mô tả một khối bộ nhớ đó là ghi ( wcho phép cờ). Điều này là cho các biến toàn cầu của thư viện.
  • Các ---pentry mô tả một đoạn không gian địa chỉ đó không có bất kỳ điều khoản (hoặc bất kỳ bộ nhớ ánh xạ tới nó).

Tất cả đều là riêng tư ( pcờ), nghĩa là nếu một quy trình sửa đổi một trang (chỉ có thể áp dụng cho phần có thể ghi), thì trang đó sẽ được sao chép (sao chép trên ghi) và các quy trình khác sẽ không thấy bất kỳ thay đổi nào.

Mục nhập cuối cùng đó là một khoảng cách giữa phân đoạn mã và phân đoạn dữ liệu được trình liên kết GNU chèn rõ ràng trong các trường hợp nhất định. Mục đích của khoảng cách này là để đảm bảo rằng mã (có thể chia sẻ giữa các quy trình sử dụng cùng một thư viện) và dữ liệu có thể ghi (không thể chia sẻ) không bao giờ trong cùng một trang. Kích thước của khoảng cách là 2MB vì ​​đó là kích thước trang lớn nhất mà Linux sử dụng trên kiến ​​trúc của bạn (amd64). Xem mục đích của ánh xạ bộ nhớ dường như không thể sử dụng trong linux là gì? để biết thêm chi tiết.

¹ Hầu hết các trang là 4KB, đó là “bình thường” kích thước trang. Nhưng có thể có những trang sử dụng ít chỉ dẫn MMU hơn, nhanh hơn một chút nhưng lãng phí rất nhiều dung lượng trừ khi ứng dụng thực sự sử dụng các khối bộ nhớ rất lớn. Linux gọi những trang lớn này .

Nguồn và nhiều thông tin hơn cho khoảng trống chưa được khai thác: Tại sao bảng gnome sử dụng 290MB? bởi RJK. Xem thêm mục nhập /proc/PID/mapstrong tài liệu nhân Linux , Hiểu Linux / Proc / id / maps/ Proc / $ pid / maps hiển thị các trang không có quyền rwx trên x86_64 linux trên Stack Overflow.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.