Bộ đệm trang được ánh xạ trong kernel trên các kiến ​​trúc x86 64 bit như thế nào?


7

Trên Linux 64 bit x86 hiện đại, cách ánh xạ giữa các trang ảo và vật lý được thiết lập, phía kernel? Về phía người dùng, bạn có thể mmaptrong các trang từ bộ đệm của trang và điều này sẽ ánh xạ các trang 4K trực tiếp vào không gian người dùng - nhưng tôi rất thú vị về cách các trang được ánh xạ ở phía kernel.

Liệu nó có sử dụng "toàn bộ bản đồ nhận dạng ram" hay cái gì khác không? Là toàn bộ ánh xạ nhận dạng ram nói chung sử dụng các trang 1GB?


Bạn đang nói về bộ đệm nào?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - bộ đệm trang , tức là bộ đệm chứa các trang đọc từ đĩa (bao gồm các khối bẩn không được ghi nhận).
BeeOnRope

Câu trả lời:


1

Trên Linux 64-bit x86 hiện đại?

Đúng. Nó gọi kmap()hoặc kmap_atomic(), nhưng trên x86-64, chúng sẽ luôn sử dụng ánh xạ định danh. x86-32 có một định nghĩa cụ thể về nó, nhưng tôi nghĩ x86-64 sử dụng một định nghĩa chung trong bao gồm / linux / highmem.h .

Và có, bản đồ nhận dạng sử dụng các gói 1GB.

Bài viết của LWN có đề cập đến kmap_atomic .

Tôi đã tìm thấy kmap_atomic () bằng cách xem mã PIO . [*]

Cuối cùng, khi đọc () / write () sao chép dữ liệu từ / vào bộ đệm của trang:

generic_file_buffered_read -> copy_page_to_iter -> kmap_atomic () một lần nữa.


[*] Tôi đã xem PIO, vì tôi nhận ra rằng khi thực hiện DMA đến / từ bộ đệm trang, kernel có thể tránh sử dụng bất kỳ ánh xạ nào. Hạt nhân chỉ có thể giải quyết địa chỉ vật lý và chuyển nó đến phần cứng :-). (Theo IOMMU). Mặc dù, kernel sẽ cần một ánh xạ nếu nó muốn kiểm tra hoặc mã hóa dữ liệu trước.

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.