Skip to main content
LibreTexts - Ukrayinska

6.2: Що таке віртуальна пам'ять

  • Page ID
    34544
    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    Віртуальна пам'ять - це все про використання адресного простору. Адресний простір процесора позначає діапазон можливих адрес, які він може використовувати при завантаженні та зберіганні в пам'ять. Адресний простір обмежений шириною регістрів, оскільки, як ми знаємо, для завантаження адреси нам потрібно видати інструкцію навантаження з адресою для завантаження з збереженого в реєстрі. Наприклад, регістри шириною 32 біти можуть містити адреси в діапазоні регістрів від 0x00000000 до 0xFFFFFFF. 2^ 32 дорівнює 4 Гб, тому 32-бітний процесор може завантажувати або зберігати до 4 Гб пам'яті.

    Нові процесори, як правило, всі 64-бітні процесори, які, як випливає з назви, має регістри шириною 64 бі В якості вправи слід опрацювати доступне цим процесорам адресний простір (підказка: воно велике!).

    64-розрядні обчислення мають деякі компроміси проти використання процесорів меншої бітової ширини. Кожна програма, зібрана в 64-бітному режимі, вимагає 8-байтових покажчиків, які можуть збільшити розмір коду та даних, а отже, вплинути як на продуктивність кеша команд, так і даних. Однак 64-бітові процесори, як правило, мають більше регістрів, що означає меншу потребу в збереженні тимчасових змінних в пам'яті, коли компілятор знаходиться під тиском регістра.

    У той час як 64-бітні процесори мають 64-бітні широкі регістри, системи, як правило, не реалізують всі 64-біти для адресації — насправді неможливо зробити завантаження або зберігати всі 16 ексабайт теоретичної фізичної пам'яті!

    Таким чином, більшість архітектур визначають нереалізовану область адресного простору, яку процесор буде вважати недійсним для використання. x86-64 та Itanium обидва визначають найбільш значущий дійсний біт адреси, який потім повинен бути розширений (див. Розділ під назвою «Sign-Extension»), щоб створити дійсний адреса. Результатом цього є те, що загальний адресний простір фактично ділиться на дві частини, верхню та нижню частину, а адреси між ними вважаються недійсними. Це проілюстровано на малюнку 6.1, «Ілюстрація канонічних адрес». Допустимі адреси називаються канонічними адресами (некоректні адреси не -канонічні).

    Визначаючи найбільш значущий біт, який повинен бути розширений для створення повної адреси, адресний простір ефективно розділяється на верхню і нижню частини, причому проміжні адреси вважаються недійсними процесором.
    Малюнок 6.1. Ілюстрація канонічних адрес

    Точне найбільш значуще значення розрядів для процесора зазвичай можна дізнатися, запитуючи сам процесор, використовуючи його інформаційні інструкції. Хоча точне значення залежить від реалізації, типовим значенням буде 48; надання 2 48 = 256 TiB корисного адресного простору.

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

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

    Таким чином, з цією метою, ми говоримо, що всі адреси, які використовує програма, є віртуальними. Операційна система відстежує віртуальні адреси і те, як вони розподіляються за фізичними адресами. Коли програма робить завантаження або зберігання з адреси, процесор і операційна система працюють разом, щоб перетворити цю віртуальну адресу на фактичну адресу в мікросхемах системної пам'яті.