Технологii вiртуалiзацii: вчора, сьогоднi, завтра

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

СФi програми здавалося занадто великою цифрою (а, враховуючи, що на компютерi можуть бути одночасно запущенi сотнi програм, i для кожноi потрiбно мiнiмум по 4 Мбайт фiзичноi памятi - це i для сучасних систем надто багато), i тому вибiр був зроблений на користь дворiвневоi трансляцii, при якiй трансляцiю можна зупинити ще на верхньому рiвнi, вказавши для деяких записiв у таблицi директорiй, що вони не вiдповiдають жодним реальним фiзичним адресами i прибравши, таким чином, необхiднiсть у вказiвцi для цiлого дiапазону адрес записiв у таблицi трансляцii.

До речi, сегментацiя (в 32-бiтних процесорах) навiть з вiртуальною памяттю все одно зберiгаСФться. Тобто реальнi адреси, що згадуються в програмi, спочатку перетворюються з урахуванням сегментiв у лiнiйнi, а вже вони за допомогою таблицi трансляцii - в реальнi фiзичнi адреси.

Важко повiрити, але, здавалося б нiчим глибоко принципово не вiдрiзняються вiд звичайноi сегментованоi моделi памятi, память вiртуальна даСФ системному програмiсту практично все, чого тiльки його душа забажаСФ. Справа в тому, що власне вдосконаленою трансляцiСФю адрес (яка сама по собi знiмаСФ всi проблеми сегментованоi оперативноi памятi) вiртуальна память не обмежуСФться. Вся сiль технологii - в тому, що для кожного запису в таблицi трансляцii адрес (фактично - для кожного дiапазону адрес вiртуальноi памятi) визначено набiр спецiальних прапорiв, якi реалiзують:

Захист важливих дiлянок оперативноi памятi вiд перезапису.

Один з найпростiших прапорцiв, який вказуСФться для адрес вiртуальноi памятi - це прапорець тiльки для читання, що дозволяСФ захистити певнi областi вiртуальноi оперативноi памятi вiд запису. Примiром, зазвичай read-only оголошуються сторiнки, що мiстять машинний код програми.

Захист програм вiд вiрусiв.

Основа новомодних антивiрусних технологiй на кшталт Microsoft Data Execution Prevention, що забезпечують надiйний захист компютера вiд експлойтiв, що використовують атаки типу переповнювання буфера, - крихiтний Битик в таблицi трансляцii (No eXecute - NX в AMD, i eXecute Disable, XD - у Intel), що забороняСФ виконання машинного коду з певних дiлянок памятi.

Захист операцiйноi системи.

Спецiальний бiт дозволяСФ визначити деякi дiлянки оперативноi памятi як системнi i принципово недоступнi звичайному додатком як для читання, так i для запису.

Ефективний менеджмент оперативноi памятi.

Цiлий ряд спецiальних бiтiв дозволяСФ операцiйнiй системi вiдслiдковувати, з яких адресами програма читала або записувала данi, i визначити глобальнi сторiнки памятi, загальнi для всiх програм у процесорi.

Але найголовнiший бiт в таблицi трансляцii - це нульовий бiт P - Present, що забезпечуСФ власне

По-справжньому вiртуальну память.

Насправдi, призначення цього бiта досить просте - якщо вiн скинутий (встановлено в 0), то будь-яке звернення до оперативноi памятi за цiСФю адресою викликаСФ системну помилку (виключення), що називаСФться Page Fault (# PF). Але скiльки ж на основi цiСФi простоти вдаСФться побудувати! Адже, по сутi справи, P-морський прапор - це зазначення процесору, що для обробки звернення програми до даного адресою памятi потрiбно звернутися за допомогою до операцiйноi системи.

Судiть самi: найпростiше застосування P-прапора - це реалiзацiя своп-файлу, що дозволяСФ використовувати жорсткий диск замiсть фiзичноi оперативноi памятi. РЖдея в тому, що ми можемо для деяких сторiнок вiртуальноi памятi не ставити iм у вiдповiднiсть нiякого фiзичноi адреси оперативноi памятi, а скинути для вiдповiдних записiв у таблицi трансляцii P-прапор i зберегти сторiнку у файл на жорсткому диску. Якщо звернень до даноi сторiнки не вiдбуваСФться - то все добре. Якщо вiдбуваСФться - то генеруСФться виключення # PF. По сутi своiй процесор просто припиняСФ виконання поточноi програми, i заглядаСФ у свiй довiдник щодо дiй у нештатних ситуацiях - спецiальна дiлянка памятi, в якому прописано, яку пiдпрограму операцiйноi системи викликати в тому чи iншому випадку. У повнiй вiдповiдностi зi стандартом, процесор викликаСФ обробник виключення # PF - один з ключових фрагментiв будь-якоi операцiйноi системи. Обробник (фактично - операцiйна система) - дивиться на виниклу ситуацiю (програма така-то полiзла в память за адресою такому-то i була зупинена тому що прапор Present був скинутий), визначаСФ, що цiСФю адресою вiдповiдаСФ сторiнка памятi, якоi немаСФ в оперативнiй памятi, але яка СФ на жорсткому диску - i починаСФ дiяти:

  1. Вiн вибираСФ з фiзичноi памятi ще нiким не зайняту сторiнку, або навiть звiльняСФ одну зi сторiнок, зберiгаючи ii данi на диск, i скидаючи вiдповiдний P-прапор в таблицi трансляцii.
  2. ЧитаСФ потрiбне мiiе своп-файлу, копiюючи данi з неi в цю сторiнку.
  3. МодернiзуСФ таблицю трансляцii, прописуючи в нiй новий фiзичну адресу для сторiнки, через яку стався збiй.
  4. ОновлюСФ при необхiдностi данi в буферi TLB.

Пiсля цих манiпуляцiй проблемний адреса вiртуальноi памятi, який посилаСФться на неiснуючу у фiзичнiй памятi сторiнку стаСФ вже не таким вже й проблемним - потрiбнi данi вже завантаженi в память, i таблиця трансляцii потрiбним чином оновлена. Так що оброблювачевi сигналу # PF залишаСФться тiльки повернути управлiння спочатку працювала програмi - i остання продовжить свою роботу, як нi в чому не бувало, навiть не здогадуючись про те, що в