Якщо віртуальний адресний простір може бути більшим, ніж фізичний адресний простір, як відображення адрес зберігаються в пам'яті?


15

Скажімо, ми працюємо з системою, яка має 40 бітів фізичної адреси. Загальний фізичний адресний простір (якщо припустити байт-адресовану пам'ять) становить байт, або 1 TiB. А якщо віртуальні адреси мають довжину 48 біт, це означає, що у віртуальній пам'яті доступно більше адрес, ніж у фізичній пам'яті.240

Це має сенс для мене, тому що "зайві" адреси можуть стосуватися і місць на жорсткому диску. Однак я не розумію, як відбувається переклад між віртуальними та фізичними адресами. Я припускаю, що десь зберігається відображення, яке пов'язує розташування VAS з фізичними місцями. Якщо існує більше віртуальних адрес, ніж фізичних, як усі ці відображення, можливо, зберігаються в пам'яті? Як мінімум, вам знадобиться 48 біт для зберігання кожної віртуальної адреси, а потім ще 40 для зберігання фізичного місця, на яке вона відображається. Тож очевидно, що ви не можете просто зберігати 1: 1 відображення кожної віртуальної адреси до її фізичного аналога, оскільки для картографування кожного місця потрібно більше пам'яті, ніж сама фізична пам'ять.

Що саме мені тут не вистачає?


Ви не можете цього зробити навіть при невеликій кількості пам'яті та адресного простору. Якби у вас були 16-бітні фізичні адреси та 16-бітні віртуальні адреси, ви все одно не змогли б зберегти всі відображення 1: 1!
користувач253751

2
Проблема складніша навіть, ніж ви думаєте. Комп'ютери рідко мають ТБ пам’яті, тому фізична пам’ять на ВАС менше, ніж віртуальний адресний простір. Ще гірше: кожен процес має абсолютно окремий віртуальний адресний простір!
Mooing Duck

Окрім місця на жорсткому диску, у вас просто є біт / простір, щоб витратити на сміття. Наприклад, ви можете мати велику область нижче стека без мапи, щоб уникнути невиявлених переливів. Ви можете рандомізувати те, що ви завантажуєте, коли запобігаєте іншим класам атак . Хочете позначити одним бітом, якщо адреса належить ядру або користувачеві - продовжуйте, навіть якщо ви витрачаєте половину місця. Хоча більшість підручників зосереджені на вичерпності аспекту віртуальної пам'яті, є набагато більше.
Мацей П'єхотка

(Також зауважте, що адреси можуть бути псевдонімами, що іноді корисно, тому VA A і адреса B посилаються на той самий PA P, навіть якщо A! = B.)
Мацей П'єхотка

Відповіді:


26

Трюк, щоб зробити цю роботу, - це "пейджінг". Заносячи дані з жорсткого диска у фізичну пам'ять, ви не просто наближаєте кілька байтів. Ви приносите цілу сторінку. 4 к байт - дуже поширений розмір сторінки.

Якщо вам потрібно лише відслідковувати сторінки, а не кожен окремий байт, відображення стає значно дешевшим. Якщо у вас є 48-бітовий адресний простір та 4096 байт-сторінок, вам потрібно лише відстежити, яка з 2 ^ 36 сторінок (приблизно 69 мільярдів сторінок). Це набагато простіше! Запис, де знаходяться всі сторінки, відомий як "таблиця сторінок".

Якщо вам дійсно потрібно 1-256 тиб оперативної пам’яті, то відмова від кількох гігабайт для зберігання цієї таблиці сторінок не велика справа. На практиці ж ми зробимо такі речі, як використання багаторівневих таблиць сторінок , що дозволяє нам бути ефективнішими, зберігаючи сторінки лише для регіонів адресного простору, якими ми насправді користуємося.


6
Файл сторінки - це термін Windows для фізичного файлу на диску, що містить вміст фізичних фреймів сторінок, які були відновлені через брак пам'яті, вміст яких потрібно зберігати. Якщо я не помиляюся, структуру даних, що відображає адреси віртуальних сторінок на фізичні адреси сторінок, слід називати таблицею сторінок .
Відновіть Моніку - ζ--

@hexafraction Я думаю, ти маєш рацію. Я змінив.
Корт Аммон

2
Якщо фактична пам'ять є великою, ще одним способом зменшення пам'яті, необхідної для таблиць сторінок, є створення великих сторінок. x86 має можливість змішати 4 сторінки KiB з 2/4 сторінками MiB.
Нейт Елдредж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.