Là kích thước trang luôn luôn bằng kích thước khung hình?


9

Tôi đang học về phân trang. Cuốn sách của tôi nói rằng các địa chỉ logic do CPU tạo ra ở dạng |p|d|(số trang, bù trang) và các địa chỉ vật lý ở dạng |f|d|(số khung, bù khung). Nó cũng được đề cập cụ thể rằng dtức là phần bù được sao chép trực tiếp để tạo địa chỉ vật lý từ các địa chỉ logic.

Bây giờ, commonsense nói rằng nếu phần bù được sao chép trực tiếp, kích thước trang ĐÃ bằng với kích thước khung (nếu không, độ lệch sẽ không tương ứng). Nhưng thật không may, cuốn sách của tôi không nói gì về điều đó.

Vì vậy, kích thước trang luôn luôn bằng kích thước khung?

Vui lòng kích hoạt hình ảnh;)

Câu trả lời:


8

Một trang là một vùng của không gian địa chỉ ảo và khung trang là một vùng của bộ nhớ vật lý. Một trang ánh xạ một vùng của bộ nhớ vật lý phải có cùng kích thước với mảnh bộ nhớ vật lý đó, nếu không thì không có điểm nào.

Họ cũng thường phải được căn chỉnh chính xác. Nếu bạn cố gắng ánh xạ, giả sử, khung trang 2Mb vào bộ nhớ ảo, cả địa chỉ ảo và địa chỉ vật lý đều phải được căn chỉnh 2Mb.

Nhiều CPU hiện đại hỗ trợ nhiều kích thước trang và một số có thể hỗ trợ các kích thước trang khác nhau trong cùng một không gian địa chỉ. Ví dụ, Intel x86-64 hiện tại hỗ trợ kích thước trang 4kb, 2Mb và 1Gb. Những con số này không phải là tùy ý; chúng đại diện cho không gian địa chỉ được bao phủ bởi các "cấp độ" khác nhau trong bảng trang đa cấp. Tương tự, ARM hiện đại hỗ trợ các trang 4kb, 64kb và 1Mb, mặc dù ARM không coi các trang 1Mb là "trang" (chúng là "các phần"). ARMv4 và ARMv5 hỗ trợ chia nhỏ các trang thành cái gọi là "trang con"; những thứ này không còn có sẵn trong ARMv7.

Thật thú vị, có một vài thứ khác thường có cùng kích thước với kích thước trang. Rõ ràng một mục TLB có cùng kích thước với một trang hoặc khung, vì về mặt khái niệm nó là bộ đệm cho các mục trong bảng trang. Tuy nhiên, kích thước bộ đệm L1 cũng thường được xác định bởi kích thước trang.

Giả sử bộ đệm L1 được liên kết theo bộ (bộ đệm được ánh xạ trực tiếp thực sự chỉ là bộ đệm kết hợp được đặt 1 chiều, do đó bạn có thể coi đây là trường hợp giới hạn), do đó, thường thuận tiện để tạo một "bộ" kích thước một trang vật lý. Vì vậy, giả sử rằng kích thước trang là 4kb và bộ đệm L1 là bộ đệm kết hợp bộ 4 chiều, thì kích thước "tốt nhất" cho bộ đệm L1 là 16kb (gấp 4 lần 4kb). Xem nếu bạn có thể làm việc cho chính mình đây có thể là trường hợp.


1

có kích thước trang phải bằng kích thước khung hình để giảm thiểu sự phân mảnh bên trong của bộ nhớ chính.


3
Lưu ý rằng một số kiến ​​trúc hỗ trợ một số kích thước trang cùng một lúc.
TEMLIB

Bạn có thể xây dựng? Chúng tôi thích câu trả lời chi tiết cung cấp giải thích, biện minh hoặc phân tích. Nếu kích thước trang không bằng kích thước khung hình, điều này sẽ gây ra sự phân mảnh bên trong của bộ nhớ chính như thế nào? Bạn có thể chỉnh sửa câu trả lời để thêm một lời giải thích về điều này?
DW

Câu trả lời trên với 1 upvote là hoàn toàn sai. Phân trang sử dụng các khối bộ nhớ có kích thước không đổi và do đó giảm thiểu sự phân mảnh bên ngoài với chi phí nội bộ, nếu bộ nhớ được phân bổ nhỏ hơn một trang. Vì vậy, tôi đã kết luận rằng hệ điều hành của bạn sẽ hạnh phúc hơn nếu bạn chọn pageSize = frameSize.
Jignesh Kumar

@JigneshKumar, vui lòng không sử dụng hộp 'Câu trả lời của bạn' để nhận xét về các câu trả lời hiện có. Thay vào đó, hãy tập trung vào các câu hỏi mà bạn có thể cung cấp câu trả lời hoàn chỉnh cho riêng mình hoặc hỏi những câu hỏi mới hữu ích. Cảm ơn bạn!
DW
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.