Технологii вiртуалiзацii: вчора, сьогоднi, завтра
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
?о звикло працювати. Але, на жаль, для користувача, подiбнi хитрощi, що вимагають активноi пiдтримки з боку операцiйноi системи, реалiзувати на практицi далеко не так просто, як розповiсти про них. РЖ забезпечити, скажiмо, рiдну пiдтримку Windows-додаткiв в Linux, так само як i зворотний пiдтримку Linux-додаткiв в Windows, з причини активноi протидii Microsoft, неможливо. А тому користувач змушений обходитися без деяких цiкавих функцiй i задовольнятися Windows-додатками на Windows-системах i Linux-додатками на Linux-системах.
Як вих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ться: наш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ми надзвичайними повноваженнями операцiйноi системи iншiй системi. Подiбний пiдхiд вельми широко практикуСФться в * nix-подiбних операцiйних системах i називаСФться паравiртуалiзацiей. Однак оскiльки даний спосiб вимагаСФ серйозноi модифiкацii ядра ОС, на яке, примiром, усе та ж Microsoft, яка домiнуСФ на ринку операцiйних систем, природно, не погоджуСФться, то особливоi популярностi серед звичайних користувачiв вiн отримати не зумiв.
Схема 5. Паравиртуализация
Другий спосiб дуже добре знаком просунутим користувачам згiдно з додатками типу VMWare Workstation, що забезпечуСФ успiшний запуск на одному компютерi з-пiд базовоi операцiйноi системи кiлькох гостьових операцiйних систем без спецiальноi iх модифiкацii. Гостьова операцiйна система разом з усiма ii додатками фактично стаСФ одним звичайним додатком батькiвського операцiйноi системи, з-пiд якоi вона запущена. РЖдея тут дуже проста: використовуючи вiртуальну память, ми можемо зiмiтувати вiртуальний компютер практично будь-якоi складностi: так що гостьовий операцiйнiй системi просто пiдсовуСФться вiртуальна машина, яка дуже схожа на фiзичну" x86-машину. Гiсть приймаСФ обманку за справжнiй компютер - i цiлком успiшно починаСФ на цiй вiртуальнiй машинi, iмiтованоi батькiвського ОС, працювати. Звернiть увагу, на те, що це не пiдхiд, аналогiчний вiртуальнiй машинi Java або емуляторам стародавнього Sinclair, коли програма-емулятор вiртуальноi машини вручну розбираСФ код додатку i вручну ж виконуСФ кожну його iнструкцiю. Гостьова операцiйна система i всi запущенi в ii рамках програми працюють на фiзичних ресурсах компютера практично так само, як це робить звичайне запущене на ньому додаток, а вiртуалiзуСФться додаток тiльки забезпечуСФ контроль над ним - тонюсiнька прошарок коду, пiдтримана стандартними апаратними ресурсами компютера. Давайте розберемо трошки детальнiше, як таке виявляСФться можливим.
У нас СФ якiсь апаратнi ресурси, якi треба iмiтувати. В архiтектурi x86 iх, загалом-то, всього три:
- Регiстри процесора (включаючи регiстри службового призначення).
- Порти введення-виведення (що використовуються для обмiну iнформацiСФю з периферiСФю).
- Оперативна память.
З пункту 3 все зрозум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ни регiстрiв неможливо, але, на щастя, зазвичай цього й не потрiбно.
Але СФ кiлька неприСФмних виняткiв. Ось, примiром, уже згадуваний регiстр CR3, керуючий таблицею трансляцii оперативноi памятi. "асне, знаючи вiртуальне значення CR3, базовою операцiйнiй системi неважко зiмiтувати власне таблицю трансляцii: достатньо повязанi з цiСФi таблицi областi вiртуальноi памятi помiтити за допомогою P-прапора, отримати таким чином перехоплення всiх звернень до цiСФi таблицi, та синхронiзувати реальну таблицю трансляцii з вiртуальною, яку гостьова операцiйна система приймаСФ за реальну (технiка тiньових таблиць трансляцii, Shadow Page Table). Але при цьому, на жаль, потрiбно якось обманювати гостьову операцiйну систему, пiдсовуючи iй вiртуальний CR3 замiсть реального, а коштiв вiдповiдного