Віртуальна машина

Fedora запущена в VirtualBox

Віртуальна машина — модель обчислювальної машини, створеної шляхом віртуалізації обчислювальних ресурсів: процесора, оперативної пам'яті, пристроїв зберігання та вводу і виводу інформації.

Віртуальна машина, на відміну від програми емуляції конкретного пристрою, забезпечує повну емуляцію фізичної машини чи середовища виконання (для програми).

Визначення

Раніше віртуальну машину визначали як «ефективну ізольовану копію реальної машини». Проте сучасні віртуальні машини можуть не мати прямого апаратного аналогу. Наприклад, в залежності від способу моделювання набору інструкцій віртуального центрального процесора, віртуальна машина може моделювати реальну або абстрактну обчислювальні машини. При моделюванні реальної обчислювальної машини набір інструкцій процесора віртуальної машини збігається з набором інструкцій обраного для моделювання центрального процесора.

Віртуальні машини поділяються на 2 головні категорії, в залежності від їх використання та відповідності до реальної апаратури:

  • системні (апаратні) віртуальні машини, що забезпечують повноцінну емуляцію всієї апаратної платформи і відповідно підтримують виконання операційної системи.
  • прикладні віртуальні машини, які розробленні для виконання лише застосунків (прикладних програм), наприклад, Віртуальна машина Java.

Системні віртуальні машини

Системні віртуальні машини дозволяють розподіл апаратних ресурсів фізичної машини між різними копіями віртуальних машин, на кожній з яких може бути встановлена своя операційна система. Пласт програмного забезпечення, що виконує віртуалізацію, називається гіпервізором. Гіпервізори поділяються на 2 типи: ті, що можуть виконуватися на «голій[en]» апаратурі (1-й тип, або рідні (англ. native)), та ті, що виконуються в певній операційній системі (2-й тип, або хостові).

Основні переваги системних ВМ:

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

Основний недолік:

  • віртуальна машина не така ефективна як реальна, тому що доступ до апаратури в ній відбувається опосередковано.

Різні ВМ, на кожній з яких може бути встановлена своя власна ОС (які також називається гостьовими ОС), часто використовуються для серверного об'єднання: різні сервіси (що повинні виконуватися на окремих машинах, щоб запобігти взаємовтручанню) запускаються в різних ВМ, проте на одній фізичній машині, що дозволяє економити апаратні ресурси.

Прикладні віртуальні машини

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

Прикладна ВМ забезпечує високорівневу абстракцію (наприклад, інтерпретатори високорівневих мов програмування — Lisp, Java, Python, Perl), в той час як системні ВМ зазвичай обмежуються низькорівневою абстракцією (машинним набором кодів). Сучасні прикладні ВМ, що реалізуються за допомогою інтерпретаторів, для підвищення швидкості виконання використовують компіляцію «на льоту» (англ. JIT — just-in-time).

Технології

Рідна емуляція

Цей підхід полягає в простому розподіленні тих апаратних ресурсів, на яких запущена ВМ. Кожна копія ВМ обмежена реальною апаратурою. Відповідно, ми зможемо використовувати лише ті ОС, які підтримують нашу апаратуру.

Нерідна емуляція

В цьому випадку ВМ емулює апаратуру, яка може відрізнятися від тієї, на якій вона запущена. Це розширює круг ОС, які ми можемо на неї встановити.

Віртуалізація рівня ОС

Ядро ОС дозволяє створювати багато ізольованих один від одного просторів користувачів. В цьому випадку крах програми в одному просторі ніяк не вплине на програми в інших просторах.

Приклади та підтримка

Першою (і досьогодні — однією з найкращих операційних систем, які підтримували концепцію віртуальної машини) є операційна система VM (в межах колишнього СРСР також відома як СВМ — Система Віртуальних Машин) фірми IBM.

На окремих апаратних платформах можлива апаратна підтримка віртуальних машин. Вперше технологія апаратної підтримки віртуальних машин була реалізована в машині серії IBM-370 (початок 1970 рр.) як можливість завантаження мікропрограмного коду, який забезпечував додаткову функціональність центрального процесора IBM-370 для обслуговування віртуальних машин.

Однією з найпопулярніших насьгодні віртуальних машин є віртуальна машина Java.

Застосування

Віртуальні машини можуть використовуватися для:

  • захисту інформації і обмеження можливостей програм;
  • Дослідження продуктивності ПЗ або нової комп'ютерної архітектури;
  • емуляції різних архітектур (наприклад, емулятор ігрової приставки);
  • Оптимізації використання ресурсів мейнфреймів та інших потужних комп'ютерів;
  • шкідливого коду для управління інфікованої системою: вірус PMBS, виявлений в 1993 році, а також руткит SubVirt, створений в 2006 рік у в Microsoft Research, створювали віртуальну систему, якої обмежувався користувач і все захисні програми (антивіруси та інші).
  • Моделювання інформаційних систем з клієнт-серверною архітектурою на одній ЕОМ (емуляція комп'ютерної мережі за допомогою декількох віртуальних машин).
  • Спрощення управління кластерами — віртуальні машини можуть просто мігрувати з однієї фізичної машини на іншу під час роботи.
  • Тестування і налагодження системного програмного забезпечення;

Приклади віртуальних машин:

Див. також

Посилання