Nếu không gian địa chỉ ảo có thể lớn hơn không gian địa chỉ vật lý, thì ánh xạ địa chỉ được lưu trong bộ nhớ như thế nào?


14

Giả sử chúng ta đang làm việc với một hệ thống có 40 bit địa chỉ vật lý. Tổng không gian địa chỉ vật lý (giả sử bộ nhớ có thể định địa chỉ byte) là byte hoặc 1 TiB. Và nếu địa chỉ ảo có độ dài 48 bit, điều đó có nghĩa là có nhiều địa chỉ có sẵn cho bộ nhớ ảo hơn là có vị trí trong bộ nhớ vật lý.240

Điều này có ý nghĩa với tôi, vì các địa chỉ "thừa" cũng có thể đề cập đến các vị trí đĩa cứng. Tuy nhiên, điều tôi không hiểu là cách dịch giữa các địa chỉ ảo và vật lý xảy ra. Tôi giả sử có một ánh xạ được lưu trữ ở đâu đó liên kết các vị trí VAS với các vị trí thực tế. Nếu có nhiều vị trí địa chỉ ảo hơn vị trí thực, làm thế nào tất cả các ánh xạ này có thể được lưu trữ trong bộ nhớ? Tối thiểu bạn sẽ cần 48 bit để lưu trữ từng địa chỉ ảo và sau đó 40 bit khác để lưu trữ vị trí thực mà nó ánh xạ tới. Vì vậy, rõ ràng bạn không thể chỉ lưu trữ ánh xạ 1: 1 của từng địa chỉ ảo vào đối tác vật lý của nó, vì ánh xạ mọi vị trí sẽ chiếm nhiều bộ nhớ hơn chính bộ nhớ vật lý.

Chính xác thì tôi đang thiếu gì ở đây?


Bạn không thể làm điều đó ngay cả với một lượng nhỏ bộ nhớ và không gian địa chỉ. Nếu bạn có địa chỉ vật lý 16 bit và địa chỉ ảo 16 bit, bạn vẫn không thể lưu trữ tất cả ánh xạ 1: 1!
dùng253751

2
Vấn đề phức tạp hơn nhiều so với bạn nghĩ. Máy tính hiếm khi có TB bộ nhớ, vì vậy bộ nhớ vật lý là CÁCH ít hơn không gian địa chỉ ảo. Tệ hơn nữa: Mỗi quy trình có không gian địa chỉ ảo hoàn toàn riêng biệt!
Vịt Mooing

Ngoài các vị trí đĩa cứng, bạn chỉ có bit / dung lượng dự phòng để lãng phí. Ví dụ, bạn có thể có vùng lớn bên dưới ngăn xếp không được ánh xạ để ngăn chặn tràn không bị phát hiện. Bạn có thể chọn ngẫu nhiên những gì bạn tải trong đó ngăn chặn một lớp tấn công khác . Muốn biểu thị bằng một bit nếu địa chỉ thuộc về kernel hoặc người dùng - hãy tiếp tục ngay cả khi bạn đang lãng phí một nửa dung lượng. Trong khi hầu hết các sách giáo khoa tập trung vào khía cạnh phân trang của bộ nhớ ảo, có rất nhiều thứ khác.
Maciej Piechotka

(Cũng lưu ý rằng các địa chỉ có thể bí danh, mà đôi khi hữu ích, vì vậy VA A và địa chỉ B đề cập đến cùng PA P mặc dù A = B.!)
Maciej Piechotka

Câu trả lời:


26

Bí quyết để thực hiện công việc này là "phân trang". Khi đưa dữ liệu từ đĩa cứng vào bộ nhớ vật lý, bạn không chỉ mang một vài byte. Bạn mang cả một trang. 4k byte là kích thước trang rất phổ biến.

Nếu bạn chỉ cần theo dõi các trang, không phải từng byte riêng lẻ, ánh xạ sẽ trở nên rẻ hơn nhiều. Nếu bạn có không gian địa chỉ 48 bit và 4096 trang byte, bạn chỉ cần theo dõi trang nào trong số 2 ^ 36 trang (khoảng 69 tỷ trang). Điều đó dễ dàng hơn nhiều! Bản ghi nơi tìm thấy tất cả các trang được gọi là "bảng trang".

Nếu bạn thực sự cần 1-256 TiB bộ nhớ, thì việc bỏ một vài gigabyte để lưu trữ bảng trang này không phải là vấn đề lớn. Tuy nhiên, trên thực tế, chúng tôi sẽ làm những việc như sử dụng bảng trang đa cấp , cho phép chúng tôi hiệu quả hơn một chút, chỉ giữ các trang cho các vùng của không gian địa chỉ mà chúng tôi thực sự đang sử dụng.


6
Tệp trang là một thuật ngữ Windows cho một tệp vật lý trên đĩa có chứa nội dung của các khung trang vật lý được thu hồi vì thiếu bộ nhớ, có nội dung cần được lưu giữ. Nếu tôi không nhầm, cấu trúc dữ liệu ánh xạ địa chỉ trang ảo thành địa chỉ trang vật lý sẽ được gọi là bảng trang .
Tái lập lại Monica - -

@hexafraction Tôi nghĩ bạn đúng. Tôi đã thực hiện thay đổi.
Cort Ammon - Phục hồi Monica

2
Khi bộ nhớ thực lớn, một cách khác để giảm bộ nhớ cần thiết cho các bảng trang là cho phép các trang lớn hơn. x86 có tùy chọn trộn 4 trang KiB với 2/4 trang MiB.
Nate Eldredge
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.