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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
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, створювали віртуальну систему, якої обмежувався користувач і все захисні програми (антивіруси та інші).
  • Моделювання інформаційних систем з клієнт-серверною архітектурою на одній ЕОМ (емуляція комп'ютерної мережі за допомогою декількох віртуальних машин).
  • Спрощення управління кластерами — віртуальні машини можуть просто мігрувати з однієї фізичної машини на іншу під час роботи.
  • Тестування і налагодження системного програмного забезпечення;

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

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]