Спочатку ви не могли дозволити гостьовій ОС використовувати реальне обладнання, оскільки ви не мали можливості керувати нею. Якщо ви спробували запустити його на реальному процесорі, ви не мали гарантії, що він поверне управління назад до хост-ОС.
Віртуалізація, яку ви описуєте, реалізована в апаратному забезпеченні, дозволяючи застосовувати певні правила і обмеження на апаратному рівні, яким може керувати хост-ОС. Це дозволяє ОС встановлювати правила про те, що може і не може виконати гість, а потім фактично запустити гостя на реальному апаратному забезпеченні. Якщо гість намагається зробити щось з реальним обладнанням, яке порушує правила (наприклад, намагається отримати доступ до дискового пристрою), апаратне забезпечення призупинить роботу гостя і надішле хост переривання, що дозволяє хосту надати відповідь (наприклад, повернення даних з емуляційного дискового пристрою), а потім відновлення гостя.
Ось спрощений приклад процесу:
Хост-ОС: Ей процесор, мені потрібно, щоб ви запустили цей код віртуалізовано. Зателефонуйте мені, якщо він хоче зробити те, що не просто виконує інструкції.
ЦП хосту: Ти маєш це!
CPU хосту зберігає всі регістри хостів і стан, а потім починає виконувати гостьову коду ОС
Гостьова ОС: Я живий! Ей процесор, ви можете отримати мені цей файл?
ЦП хосту: Безумовно. Хвилинку.
CPU хосту зберігає всі регістри і стан гостя, а потім відновлює всі регістри хостів і стан
ЦП хосту: Гей Хост ОС, Гість хотів цей файл!
Хост-ОС: Ну, дайте їм це: Файл з віртуального жорсткого диска
ЦП хосту: Ти маєш це!
CPU хосту зберігає всі регістри хостів і стан, відновлює регістри і стан гостя, а потім починає виконувати гостьову коду ОС
ЦП хосту: Ось цей файл!
Гостьова ОС: Солодке, спасибі!
Ключова різниця тут полягає в емуляторі, гостьова ОС ніколи не працює на апаратному забезпеченні. З віртуалізацією хост-ОС налаштовує обмеження на процесор, а потім фактично запускає гостьовий код на фізичному процесорі. Наведений вище приклад надзвичайно спрощений, але пам'ять, диск i / o і навіть мережа можуть контролюватися на останніх сучасних процесорах, що дозволяє безпечно взаємодіяти без необхідності турбувати ОС кожного разу. До тих пір, поки гість не намагається вийти за межі віртуалізованих кордонів, хост-ОС може не мати жодного коду, якщо він не має нічого спільного в певний момент часу.
Щоб додати трохи перспективи, це всього лише один крок у довгій історії віртуалізації та керування. (Ніяких гарантій, що це у правильному порядку або є вичерпним.
Спочатку віртуалізації не було. Процеси, які поділяли один і той же простір пам'яті, мали повний доступ до апаратних засобів, а здатність до багатозадачності повністю залежала від одного процесу, який зупиняв себе і давав контроль наступному процесу. Якщо ОС хоче мати будь-який контроль над процесом, то вона мав для запуску процесу в емуляторі (ніхто не зробив, тому що це було занадто болісно повільно).
Перший був Привілейована пам'ять : певні дії, які можуть виконуватися тільки спеціальними областями пам'яті. Ці регіони зайняті ОС, що дозволяє їй діяти як ворота до цих привілейованих дій. Прикладом є можливість читання / запису даних на апаратне забезпечення. Це запобігає читанню чи запису процесів безпосередньо до жорсткого диска, і замість цього змушує їх попросити ОС читати / писати для них. Це означає, що операційна система може перевірити, чи має процес дозвіл перед виконанням дії.
Далі з'явився віртуалізований "час", як це було. Операційна система могла налаштувати процесор на переривання активного процесу через задані інтервали, що дозволило їй взяти під контроль планування та перемикання між процесами. ОС тепер може запускати процеси безпосередньо на апаратних засобах і досі запобігти їх зловживанню процесорним часом. Це було надано a апаратний таймер .
Далі прийшли віртуалізованої пам'яті : Проблема спільної пам'яті полягає в тому, що будь-який процес може читати пам'ять будь-якого іншого процесу. Що відбувається, коли програма Мері читає пароль Боба зі свого веб-браузера? Віртуальна пам'ять дозволяє операційній системі відображати пам'ять, яку процес бачить в різних частинах фізичної пам'яті, або навіть повністю переміщати їх з фізичної пам'яті (до файлу сторінки). У будь-який час, коли процес намагається прочитати або записати в пам'ять, VMMU (модуль керування віртуальною пам'яттю) процесора шукає місце, де воно відображається у фізичну пам'ять, і виконує там дію. Якщо вона відображена в пам'яті, процесор викликає операційну систему для вибірки сторінки в пам'ять з файлу сторінки.
Добре, отже, на цьому етапі ми досягли початку процесорів X86, де ми можемо безпечно запускати процеси і можемо активно заважати їм брати на себе систему, якщо ОС спеціально не дозволяє їм це зробити. На цьому етапі процеси ефективно "віртуалізовані". Ця підтримка існує для довго час, так що ви дійсно не чуєте людей, які говорять про віртуалізовані процеси, оскільки припускають, що зараз всі процеси віртуалізовані.
Чому особливість віртуалізованої ОС? Чому ми не можемо просто розпочати це як процес і дозволити йому зробити власну справу? Проблема полягає в тому, що в якості ОС гостьова система очікує на доступ і використання тих самих елементів керування, які хост використовує для керування процесами - в основному, ОС очікує бути верховним правителем комп'ютера, і вони просто не хочуть. t працювати, якщо це не так. "Віртуалізація обладнання" розширення (AMD-V для AMD і VT-x для Intel) дозволяють хост-ОС забезпечити віртуалізований набір віртуальних елементів керування процесами (віртуальна привілейована пам'ять, віртуальні апаратні таймери, віртуальна віртуальна пам'ять).