Як віртуалізація відрізняється від емуляції, з точки зору структури?


19

Хтось сказав мені, що програма віртуалізації, як VirtualBox, не працює, як емулятор, в тому сенсі, що вона не емулює регістри і використовує фактичні для віртуалізованих даних, які знаходяться на процесорі. Емулятори повинні емулювати регістри, оскільки вони в основному виконують програмне забезпечення, що залежить від зовнішнього середовища (наприклад, емулятор Genesis потребує регістрів Motorola 68000 і адреси пам'яті, тому розробник повинен зробити ці ресурси доступними як емуляційні регістри).

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

PS: Я не запитую виключно, в чому різниця, але відмінності в тому, як вони запускають програмне забезпечення.

Відповіді:


31

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

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

Ось спрощений приклад процесу:

Хост-ОС: Ей процесор, мені потрібно, щоб ви запустили цей код віртуалізовано. Зателефонуйте мені, якщо він хоче зробити те, що не просто виконує інструкції.

ЦП хосту: Ти маєш це!
CPU хосту зберігає всі регістри хостів і стан, а потім починає виконувати гостьову коду ОС

Гостьова ОС: Я живий! Ей процесор, ви можете отримати мені цей файл?

ЦП хосту: Безумовно. Хвилинку.
CPU хосту зберігає всі регістри і стан гостя, а потім відновлює всі регістри хостів і стан
ЦП хосту: Гей Хост ОС, Гість хотів цей файл!

Хост-ОС: Ну, дайте їм це: Файл з віртуального жорсткого диска

ЦП хосту: Ти маєш це!
CPU хосту зберігає всі регістри хостів і стан, відновлює регістри і стан гостя, а потім починає виконувати гостьову коду ОС
ЦП хосту: Ось цей файл!

Гостьова ОС: Солодке, спасибі!

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


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

Спочатку віртуалізації не було. Процеси, які поділяли один і той же простір пам'яті, мали повний доступ до апаратних засобів, а здатність до багатозадачності повністю залежала від одного процесу, який зупиняв себе і давав контроль наступному процесу. Якщо ОС хоче мати будь-який контроль над процесом, то вона мав для запуску процесу в емуляторі (ніхто не зробив, тому що це було занадто болісно повільно).

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

Далі з'явився віртуалізований "час", як це було. Операційна система могла налаштувати процесор на переривання активного процесу через задані інтервали, що дозволило їй взяти під контроль планування та перемикання між процесами. ОС тепер може запускати процеси безпосередньо на апаратних засобах і досі запобігти їх зловживанню процесорним часом. Це було надано a апаратний таймер .

Далі прийшли віртуалізованої пам'яті : Проблема спільної пам'яті полягає в тому, що будь-який процес може читати пам'ять будь-якого іншого процесу. Що відбувається, коли програма Мері читає пароль Боба зі свого веб-браузера? Віртуальна пам'ять дозволяє операційній системі відображати пам'ять, яку процес бачить в різних частинах фізичної пам'яті, або навіть повністю переміщати їх з фізичної пам'яті (до файлу сторінки). У будь-який час, коли процес намагається прочитати або записати в пам'ять, VMMU (модуль керування віртуальною пам'яттю) процесора шукає місце, де воно відображається у фізичну пам'ять, і виконує там дію. Якщо вона відображена в пам'яті, процесор викликає операційну систему для вибірки сторінки в пам'ять з файлу сторінки.

Добре, отже, на цьому етапі ми досягли початку процесорів X86, де ми можемо безпечно запускати процеси і можемо активно заважати їм брати на себе систему, якщо ОС спеціально не дозволяє їм це зробити. На цьому етапі процеси ефективно "віртуалізовані". Ця підтримка існує для довго час, так що ви дійсно не чуєте людей, які говорять про віртуалізовані процеси, оскільки припускають, що зараз всі процеси віртуалізовані.

Чому особливість віртуалізованої ОС? Чому ми не можемо просто розпочати це як процес і дозволити йому зробити власну справу? Проблема полягає в тому, що в якості ОС гостьова система очікує на доступ і використання тих самих елементів керування, які хост використовує для керування процесами - в основному, ОС очікує бути верховним правителем комп'ютера, і вони просто не хочуть. t працювати, якщо це не так. "Віртуалізація обладнання" розширення (AMD-V для AMD і VT-x для Intel) дозволяють хост-ОС забезпечити віртуалізований набір віртуальних елементів керування процесами (віртуальна привілейована пам'ять, віртуальні апаратні таймери, віртуальна віртуальна пам'ять).


Нагадує мені про один акт гри IRC Я бачив один раз (Можливо, NSFW: містить мову PG-13)
Scott Chamberlain

Мій комп'ютер не має апаратної віртуалізації (AMD-V і VT-x). Але я можу запустити віртуальну машину на VirtualBox ... VirtualBox встановлює драйвер на ОС, щоб мати можливість це робити. Як це робиться?
NothingsImpossible

1
@NothingsImpossible: якщо у вас немає дуже старого комп'ютера, більшість основних процесорів, що продаються сьогодні, підтримують віртуалізацію апаратних засобів. Базова віртуалізація завжди можлива, тому що ЦП посилає переривання на контролер (ядро), якщо будь-яка програма (наприклад, гостьова ОС) намагається виконати інструкції, які не допускаються на поточному рівні безпеки. Все, що хост-операційна система повинна зробити, це уловлювати ці переривання, з'ясовувати потрібну операцію і продовжувати виконання дочірнього процесу. AMD-V / VT-x дозволяє лише більш ефективну віртуалізацію, оскільки зараз сам процесор може виконувати "заборонені" інструкції.
Lie Ryan

@LieRyan Спасибі за пояснення. Але це не старе, це процесор Atom. Цей, якщо бути точним: ark.intel.com/products/70105
NothingsImpossible

1

Як ми можемо дозволити цілій операційній системі працювати як процес у віртуальній машині, але змусити її працювати самостійно, використовуючи фактичний процесор?

(Далі спрощено багато.)

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

Процеси режиму користувача спричиняють виключення процесора, коли вони намагаються зробити те, що їм не дозволено робити.

Отже, якщо ядро ​​ОС запускається в режимі користувача, будь-коли він намагається зробити щось подібне безпосередньо до обладнання, це викличе виняток. Гіпервізор може підібрати цей виняток і відповісти емумуляцією або віртуалізованою поведінкою, замість того, щоб викликати збій системи, як звичайне ядро.

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

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


0

Віртуалізація передбачає моделювання частин апаратного забезпечення комп'ютера - достатньо, щоб гостьова операційна система працювала незміненою - але більшість операцій все ще відбувається на реальному апаратному забезпеченні з метою підвищення ефективності. Тому віртуалізація зазвичай швидше, ніж емуляція, але реальна система повинна мати архітектуру, ідентичну гостьовій системі. Наприклад, VMWare може забезпечити віртуальне середовище для роботи віртуальної машини Windows XP "всередині" реального. Однак VMWare не може працювати на будь-якому реальному апаратному забезпеченні, окрім реального x86 ПК.

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


Добре ... але як ви маєте на увазі "моделювання" частин обладнання? Емулятор робить точну річ ... як віртуалізація отримує гостьову ОС для того, щоб скористатися реальними ресурсами ЦП?
tons bons

@Tonsbons: За визначенням. : P Емулятор ні виконайте ту ж саму річ - він емулює все від процесора до. Bochs, наприклад, є емулятором. Віртуалізація тонша; Гіпервізор запускає гостьову ОС на фізичному процесорі (в основному обманює гостя, думаючи, що він володіє процесором). Оскільки гість не має привілеїв, які він вважає, він спрацьовує "помилки", коли він намагається виконати роботу з ядром. Гіпервізор спостерігає за цими помилками, і зачіпає віртуальні апаратні засоби, щоб він виглядав як гість, подібні операції.
cHao

0

Тільки для повноти, є також моделювання , де дії машини дублюються, але з використанням коду, внутрішні елементи якого можуть кардинально відрізнятися від "реальної" машини. Часто тренажери збиратимуть «справжній» вихідний код машини, але націлюються на зовсім іншу архітектуру процесора, з абсолютно різними засобами ОС та I / O.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.