6.6: Віртуальні адреси
- Page ID
- 34553
Коли програма звертається до пам'яті, вона не знає або піклується про те, де зберігається фізична пам'ять, яка підтримує адресу. Він знає, що операційна система та обладнання повинні працювати разом, щоб зіставити потрібну фізичну адресу і таким чином забезпечити доступ до потрібних даних. Таким чином, ми називаємо адресу, яку програма використовує для доступу до пам'яті віртуальної адреси. Віртуальна адреса складається з двох частин: сторінки та зсуву на цій сторінці.
Оскільки весь можливий адресний простір розділений на сторінки звичайного розміру, кожна можлива адреса знаходиться на сторінці. Компонент сторінки віртуальної адреси виступає в якості індексу в таблицю сторінок. Оскільки сторінка є найменшою одиницею розподілу пам'яті всередині системи, існує компроміс між тим, щоб зробити сторінки дуже маленькими, і, таким чином, мати дуже багато сторінок для управління операційною системою, і зробити сторінки більшими, але потенційно витрачати пам'ять
Останні біти віртуальної адреси називаються зміщенням, яке є різницею розташування між потрібною адресою байта та початком сторінки. Вам потрібно достатньо бітів у зсуві, щоб мати можливість дістатися до будь-якого байту на сторінці. Для сторінки 4K потрібно (4K == (4* 1024) == 4096 == 2 12 =) 12 біт зсуву. Пам'ятайте, що найменший обсяг пам'яті, з яким займається операційна система або апаратне забезпечення, - це сторінка, тому кожен з цих 4096 байт знаходиться в межах однієї сторінки і розглядаються як «один».
Переклад віртуальної адреси відноситься до процесу з'ясування того, яка фізична сторінка відображає, на яку віртуальну сторінку.
При перекладі віртуальної адреси на фізичну адресу ми маємо справу тільки з номером сторінки. Суть процедури полягає в тому, щоб взяти номер сторінки заданої адреси і шукати його в таблиці сторінок, щоб знайти покажчик на фізичну адресу, до якого додається зсув від віртуальної адреси, що дає фактичне місце розташування в системній пам'яті.
Оскільки таблиці сторінок знаходяться під контролем операційної системи, якщо віртуальної адреси в таблиці сторінок немає, то операційна система знає, що процес намагається отримати доступ до пам'яті, яка їй не виділена, і доступ не буде дозволений.
Ми можемо простежити це через наш попередній приклад простої лінійної таблиці сторінок. Ми підрахували, що 32-бітний адресний простір потребує таблиці з 1048576 записів при використанні сторінок 4KiB. Таким чином, щоб відобразити теоретичну адресу 0x80001234, першим кроком буде видалення бітів зміщення. У цьому випадку, з 4KiB сторінок, ми знаємо, що у нас є 12-біти (2 12 = 4096) зміщення. Таким чином, ми б праворуч зрушення з 12-біт віртуальної адреси, залишаючи нас з 0x80001. Таким чином (в десятковій) значення в рядку 524289 лінійної таблиці сторінок буде фізичним кадром, відповідним цій сторінці.
Ви можете побачити проблему з лінійною таблицею сторінок: оскільки кожна сторінка повинна бути врахована, незалежно від того, використовується чи ні, фізично лінійна таблиця сторінок абсолютно недоцільна з 64-розрядним адресним простором. Розглянемо 64-бітний адресний простір, розділений на (щедро великі) сторінки 64 KiB, створює 2 64 /2 /2 16 = 2 52 сторінки для керування; якщо припустити, що кожна сторінка вимагає 8-байтового покажчика на фізичне місце, загалом 2 52 /2 /2 3 = 2 49 або 512 ГіБ Суміжна пам'ять потрібна саме для таблиці сторінок!