Смекни!
smekni.com

Технології віртуалізації: вчора, сьогодні, завтра (стр. 1 из 8)

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

КРАСНОДОНСЬКИЙ ПРОМИСЛОВО ЕКОНОМІЧНИЙ КОЛЕДЖ

Реферат з предмету: «Операційні системи»

На тему:

«Технології віртуалізації: вчора, сьогодні, завтра»

Студента групи 1ОКІСМ-06

Петренко Михайла

Перевірила: Дрокіна Т. М.

Краснодон

2009


Зміст

Вступ

1. Віртуалізація позавчора: віртуальна пам'ять і стандартні інтерфейси операційних систем

a) Паравіртуалізація і бінарна трансляція

b) VMWare Workstation і VMWare Server

c) Microsoft VirtualPC / Virtual Server

2. Віртуалізація сьогодні і завтра: Intel VT і AMD «Pacifica»

d) Віртуалізація завтра: AMD Secure Virtual Machine «Pacifica»

3. Інші підходи до віртуалізації. Віртуальна машина Xen

4. Емулятори віртуальних машин


Вступ

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

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

Підвищений інтерес до комп'ютерних технологій віртуалізації в даний час не випадковий. Обчислювальна потужність нинішніх процесорів швидко зростає, і питання навіть не в тому, на що цю потужність витрачати, а в тому, що сучасна «мода» на двоядерні і багатоядерні системи, що проникла, вже і в персональні комп'ютери (ноутбуки та десктопи), як не можна краще дозволяє реалізувати багатющий потенціал ідей віртуалізації операційних систем і додатків, виводячи зручність користування комп'ютером на новий якісний рівень. Технології віртуалізації стають одним з ключових компонентів (у тому числі, і маркетингових) в самих нових і майбутніх процесорах Intel і AMD, в операційних системах від Microsoft і ряду інших компаній. І найближчим часом ми можемо побачити на цьому полі не менш жаркі баталії, ніж ті, що недавно гриміли з приводу підтримки 64-бітних інструкцій чи двоядерними в процесорах Athlon і Pentium. Отже, тут ми зробимо спробу розібратися, в тому числі, з технічного боку (не вдаючись, однак, занадто глибоко в деталі), що являють собою апаратні технології віртуалізації в процесорах Intel і AMD, а також розглянемо програмні рішення по віртуалізації від різних виробників, без чого застосування віртуалізації в комп'ютерах також немислимо.

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


1. Віртуалізація позавчора: віртуальна пам'ять і стандартні інтерфейси операційних систем

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

Але що ж тоді ховається за модними в останні півроку словами «технології віртуалізації», які, як запевняють нас гранди процесоробудування, стане не менш вагомим аргументом у питанні купівлі нового процесора, ніж ще роки два тому була збільшена продуктивність?

У більшості російськомовних читачів слово «віртуальний», всупереч його споконвічного походженням, напевно, викликає приблизно однакові асоціації з чимось нематеріальних, неіснуючим насправді. Але початковий сенс його в обчислювальній техніці набагато конкретніше і простіше - «віртуальні» об'єкти тут завжди означають якісь абстрактні інтерфейси, за якими ховається реальний обладнання. Основна ідея, добре простежується тут останні років двадцять - це прагнення максимально спростити завдання розробникам програмного забезпечення, надавши кожній програмі (в ідеалі) за стандартним «віртуального комп'ютера», на якому вона зможе працювати без обліку взагалі яких би то не було сторонніх чинників - комп'ютера, на якому вона запущена, або інших працюють на цьому ж комп'ютері програм. І, треба сказати, результати тут були досягнуті вражаючі. Перші процесори працювали безпосередньо з «фізичною» оперативною пам'яттю, безпосередньо вказуючи в програмі конкретну комірку в модулі пам'яті, з якою вони працювали. Виходило щось на кшталт «модуль пам'яті # 1, мікросхема 4, банк 3, рядок даних 63, байт 13, - або, у двійковій нотації,« модуль 01, мікросхема 01000, банк 11, рядок даних 0111111, байт 01101 ». Ці числа записувалися підряд - і виходив адресу 010100011011111101101, тобто 669 677 у звичній нам десятковій нотації. При дотриманні мінімальних обмежень на організацію модулів пам'яті при такому способі запису фактично виходить, що ми нумеруючи елементу пам'яті що йдуть підряд числами, починаючи з нуля і закінчуючи деякими великим числом. А це зручно і проектувальникам «заліза», і програмістам. (До речі, саме звідси пішло правило «обсяг модуля пам'яті повинен бути ступенем двійки» - при такому підході всі молодші біти фізичної адреси модуля виходять допустимими, і в нумерації адрес фізичної оперативної пам'яті не виникає «дірок»). Ось з цими «фізичними адресами пам'яті», що утворюють відрізок на числової прямої, перші програми і працювали. Система була за своїм досить витончена, але, на жаль, абсолютно не пристосована для одночасного виконання кількох програм, - в кращому випадку одна програма в комп'ютері могла на час передавати управління іншій.

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

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

Схема 1. Компьютер без виртуализации

Як же розділити і захистити працюють у фізичної оперативної пам'яті програми один від одного? Найпростіше рішення, яке приходить в голову, - просто «нарізати» цю пам'ять («великий відрізок» адрес) невеликими шматочками (меншими відрізками адрес - сегментами). Кожен такий шматочок задається координатами його «почала» (першим адресою відрізка) і «довжиною» (кількістю адрес). Будь-який адресу цього відрізка вважається як відстань між цією адресою і першим адресою відрізка («зміщення» від початку сегмента). Замість того щоб працювати з фізичними адресами, програми працюють з цими зміщеннями і сегментами, - реалізувати це зовсім не так вже й важко, причому, виділивши кожній програмі навіть не по одному, а по кілька сегментів - сегмент для машинного коду програми, сегмент для її даних, сегмент для організації стека, і т.д.

Подібна система називається сегментованої моделлю оперативної пам'яті, в архітектурі x86 вона з'явилася в процесорах i80286 (де отримала назву «захищеного режиму») і зникла з цієї архітектури тільки з переходом до 64-бітним розділами інструкцій AMD64/Intel EM64T.

Схема 2. Сегментована пам'ять

Що ми отримуємо від переходу до сегментації? По-перше, захист одних програм від інших: процесор перевіряє кожне звернення програм до пам'яті і контролює, щоб вони не вийшли за межі виділених їм сегментів. По-друге, - і, мабуть, це навіть набагато важливіше - радикальне підвищення зручності програмування. Нам не потрібно замислюватися над тим, що на нашому комп'ютері взагалі існують інші програми - кожній з них забезпечено «віртуальне» простір, у якому є навіть не одна, а цілих три незалежних один від одного, «пам'яті», виділені їй і тільки їй, де зберігаються ключові структурні частини будь-якої запущеної програми - код, дані і стек. Нам не потрібно підлаштовуватися під особливості конкретної версії операційної системи (а це ж теж як мінімум ще одна програма, запущена на комп'ютері!), Ми можемо використовувати для всіх випадків життя абсолютно однаковий програмний код.