Виртуальные машины: несколько компьютеров в одном

Гультяев Алексей Константинович

Глава 1

Знакомство с технологией виртуальных машин

 

 

Понятие «виртуальная машина» появилось на свет несколько десятков лет назад, еще в конце 60-х годов прошлого века. Вот только применялись тогда виртуальные машины не на персональных компьютерах, а на «больших» ЭВМ типа IBM/370 (или их советского аналога — ЕС ЭВМ), да и задачи у них были несколько иные: предоставить каждому из многочисленных пользователей свой, независимый «кусочек» ресурсов вычислительного монстра.

 

Зачем нужны виртуальные машины

Сегодня виртуальные машины переживают второе рождение. Один из «отцов» современного поколения виртуальных машин, профессор Розенблюм, объясняет их возрождение двумя основными причинами:

■ появлением большого числа разных операционных систем (ОС), предъявляющих специфические требования к параметрам используемых аппаратных компонентов компьютера;

■ большими затратами на администрирование и сложностью обслуживания компьютеров, на которых установлено несколько различных операционных систем (в том числе в плане обеспечения требуемой надежности и безопасности работы).

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

Такой подход предоставляет пользователям (и/или администраторам вычислительных систем) целый ряд преимуществ. К ним в частности относятся:

■ возможность установки на одном компьютере нескольких ОС без необходимости соответствующего конфигурирования физических жестких дисков;

■ работа с несколькими ОС одновременно с возможностью динамического переключения между ними без перезагрузки системы (рис. 1.1);

■ сокращение времени изменения состава установленных ОС;

■ изоляция реального оборудования от нежелательного влияния программного обеспечения, работающего в среде виртуальной машины;

■ возможность моделирования вычислительной сети на единственном автономном компьютере.

Рис. 1.1. Несколько виртуальных машин на одном рабочем столе

Благодаря этим преимуществам существенно расширяется круг задач, которые пользователь может решать без перезагрузки системы и без опасения нанести ей какой-либо ущерб или полностью вывести ее из строя. Вот только некоторые примеры таких задач:

■ освоение новой ОС;

■ запуск приложений, предназначенных для работы в среде конкретной ОС;

■ тестирование одного приложения под управлением различных ОС;

■ установка и удаление оценочных или демонстрационных версий программ;

■ тестирование потенциально опасных приложений, относительно которых имеется подозрение на вирусное заражение;

■ управление правами доступа пользователей к данным и программам в пределах виртуальной машины.

Читатель, вероятно, и сам без труда дополнит приведенный перечень двумя-тремя ситуациями, когда наличие на компьютере виртуальной машины оказалось бы весьма кстати.

Каким пользователям желательно научиться работать с виртуальными машинами? Пожалуй, всем, у кого на компьютере установлено более одной ОС. А также тем, кто хочет освоить новую операционную систему, но не решается сразу отказаться от предыдущей. Весьма полезны виртуальные машины преподавателям различных компьютерных курсов и дисциплин, а также разработчикам многоплатформенных программных продуктов. Особый интерес они представляют для веб-дизайнеров: ведь созданные ими страницы должны выглядеть одинаково привлекательно для пользователей, работающих на самых разных системах и платформах. Имея возможность с помощью системы виртуальных машин быстро переключаться из одной среды и другую, «правильный» веб-дизайнер вряд ли упустит шанс проверить результат своей работы в различных веб-браузерах.

Все перечисленные достоинства виртуальных машин являются общими для многих из них. Помимо этих общих свойств, конкретный программный продукт обладает, как правило, индивидуальными особенностями, призванными повысить его привлекательность в сравнении с конкурирующими изделиями.

На веб-сайтах разработчиков виртуальных машин можно найти многочисленные примеры использования технологии таких машин различными известными компаниями. Так, виртуальные машины VMware используются компанией Symantec для тестирования сетевых антивирусных пакетов; программисты популярной поисковой системы Google применяют виртуальные машины VMware для оценки эффективности работы Google с разными веб-браузерами и на разных платформах.

 

Как работает виртуальная машина

 

Начнем с уточнения терминов.

 

Терминология

С точки зрения пользователя,виртуальная машина (ВМ) — это конкретный экземпляр некой виртуальной вычислительной среды («виртуального компьютера»), созданный с помощью специального программного инструмента. Обычно такие инструменты позволяют создавать и запускать произвольное число виртуальных машин, ограничиваемое лишь физическими ресурсами реального компьютера.

Собственно инструмент для создания ВМ (его иногда называют приложением виртуальных машин, или ПВМ) — это обычное приложение, устанавливаемое, как и любое другое, на конкретную реальную операционную систему. Эта реальная ОС именуется «хозяйской», или хостовой, ОС (от англ. термина host — «главный», «базовый», «ведущий»).

Все задачи по управлению виртуальными машинами решает специальный модуль в составе приложения ВМ — монитор виртуальных машин (МВМ). Монитор играет роль посредника во всех взаимодействиях между виртуальными машинами и базовым оборудованием, поддерживая выполнение всех созданных ВМ на единой аппаратной платформе и обеспечивая их надежную изоляцию. Пользователь не имеет непосредственного доступа к МВМ. В большинстве программных продуктов ему предоставляется лишь графический интерфейс для создания и настройки виртуальных машин (рис. 1.2). Этот интерфейс обычно называют консолью виртуальных машин.

Рис. 1.2. Пример консоли виртуальных машин

«Внутри» виртуальной машины пользователь устанавливает, как и на реальном компьютере, нужную ему операционную систему. Такая ОС, принадлежащая конкретной ВМ, называется гостевой (guest OS). Перечень поддерживаемых гостевых ОС является одной из наиболее важных характеристик виртуальной машины. Наиболее мощные из современных виртуальных машин (представленные в данной книге) обеспечивают поддержку около десятка популярных версий операционных систем из семейств Windows, Linux и MacOS.

 

Виртуальная машина изнутри

Когда виртуальная машина создана и запущена, у пользователя может возникнуть полная иллюзия того, что он работает с автономным компьютером, имеющим собственные процессор, оперативную память, видеосистему и (как правило) «стандартный» набор внешних устройств, включая флоппи-дисковод и устройство чтения CD/DVD.

На самом деле виртуальная машина не имеет доступа к физическим ресурсам реального компьютера. Работа с ними возложена на упоминавшийся ранее МВМ, а также на еще одну служебную программу — драйвер виртуальных машин.

В упрощенном виде архитектура системы, в которой используются виртуальные машины, выглядит следующим образом (рис. 1.3):

■ хостовая ОС и монитор виртуальных машин разделяют между собой права на управление аппаратными компонентами компьютера; при этом хостовая ОС занимается распределением ресурсов между собственными приложениями (включая и консоль ВМ);

■ монитор ВМ контролирует распределение ресурсов между запущенными виртуальными машинами, создавая для них иллюзию непосредственного доступа к аппаратному уровню (этот механизм называют виртуализацией);

■ гостевые ОС в пределах выделенных им ресурсов управляют работой «своих» приложений.

Рис. 1.3. Архитектура системы виртуальных машин

Приведенная архитектура является весьма общей. Однако представленные сегодня на рынке системы виртуальных машин имеют и существенные различия. Обусловлены они в первую очередь механизмом виртуализации, который использован в той или иной системе.

 

Виды виртуальных машин

 

Система виртуальных машин может быть построена на базе различных платформ и при помощи разных технологий. Используемая схема виртуализации зависит как от аппаратной платформы, так и от особенностей «взаимоотношений» хостовой ОС и поддерживаемых гостевых ОС. Некоторые архитектуры обеспечивают возможность виртуализации на аппаратном уровне, другие требуют применения дополнительных программных ухищрений.

В настоящее время распространение получили три схемы виртуализации:

■ эмуляция API гостевой ОС;

■ полная эмуляция гостевой ОС;

■ квазиэмуляция гостевой ОС.

 

Виртуальные машины с эмуляцией API гостевой ОС

Обычно приложения работают в изолированном адресном пространстве и взаимодействуют с оборудованием при помощи интерфейса API (Application Programming Interface — интерфейс прикладного программирования), предоставляемого операционной системой. Если две операционные системы совместимы по своим интерфейсам API (например, Windows 98 и Windows ME), то приложения, разработанные для одной из них, будут работать и на другой. Если две операционные системы несовместимы по своим интерфейсам API (например, Windows 2000 и Linux), то необходимо обеспечить перехват обращений приложений к API гостевой ОС и сымитировать ее поведение средствами хостовой ОС. При таком подходе можно установить одну операционную систему и работать одновременно как с ее приложениями, так и с приложениями другой операционной системы.

Поскольку весь код приложения исполняется без эмуляции, а эмулируются лишь вызовы API, такая схема виртуализации приводит к незначительной потере в производительности виртуальной машины. Однако из-за того, что многие приложения используют недокументированные функции API или обращаются к операционной системе в обход API, даже очень хорошие эмуляторы API имеют проблемы совместимости и позволяют запускать не более 70% от общего числа приложений. Кроме того, поддерживать эмуляцию API бурно развивающейся операционной системы (например, такой как Windows) очень нелегко, и большинство эмуляторов API так и остаются эмуляторами какой-то конкретной версии операционной системы. Так, в Windows NT/2000 до сих пор встроен эмулятор для приложений OS/2 версии 1.x. Но самый большой недостаток ВМ с эмуляцией API гостевой ОС — это ее ориентация на конкретную операционную систему.

Примеры продуктов, выполненных но технологии эмуляции API гостевой ОС:

■ проект с открытым кодом Wine (Wine Is Not an Emulator, «Wine — это не эмулятор»), позволяющий запускать DOS-, Win16- и Win32-приложения под управлением операционной системы Linux и Unix;

■ продукт Win4Lin компании Netraverse, позволяющий запускать операционные системы семейства Windows под управлением операционной системы Linux;

■ проект с открытым кодом DOSEMU, позволяющий запускать DOS-приложения под управлением операционной системы Linux;

■ проект с открытым кодом User Mode Linux (UML), позволяющий запускать несколько копий операционной системы Linux на одном компьютере (в настоящее время встроен и ядро Linux версии 2.6);

■ технология Virtuozzo, разработанная российской компанией SWsoft и позволяющая запускать несколько копий операционной системы Linux на одном компьютере.

 

Виртуальные машины с полной эмуляцией гостевой ОС

Проекты, поддерживающие технологию полной эмуляции, работают по принципу интерпретации инструкций из системы команд гостевой ОС. Поскольку при этом полностью эмулируется поведение как процессора, так и всех внешних устройств, то существует возможность эмулировать компьютер с архитектурой Intel х86 на компьютерах с совершенно другой архитектурой, например на рабочих станциях Mac или на серверах Sun с RISC-процессорами. Главный недостаток полной эмуляции заключается в существенной потере производительности гостевой операционной системы (скорость работы «гостевых» приложений может упасть в 100-1000 раз). Поэтому до недавнего времени ВМ с полной эмуляцией чаще всего использовались в качестве низкоуровневых отладчиков для исследования и трассировки операционных систем. Однако благодаря значительному росту вычислительных мощностей даже «настольных» компьютеров ВМ с полной эмуляцией стали сегодня вполне конкурентоспособными. Наиболее яркий представитель этого вида ВМ — продукт Virtual PC фирмы Connectix (ныне купленной Microsoft), который подробно описан в главе 2 книги. В качестве других примеров проектов, выполненных по технологии полной эмуляции, можно назвать следующие:

■ проект с открытым кодом Bochs, позволяющий запускать различные операционные системы Intel х86 под Linux, Windows, BeOS и Mac OS;

■ продукт Simics компании Virtutech, позволяющий запускать и отлаживать различные операционные системы Intel х86 под управлением Windows и других операционных систем;

■ проект Qemu — эмулятор различных архитектур на PC,

 

Виртуальные машины с квазиэмуляцией гостевой ОС

Технология квазиэмуляции гостевой ОС основана на том, что далеко не все инструкции гостевой ОС нуждаются в эмуляции средствами хостовой операционной системы. Многие из инструкций, необходимых для корректной работы «гостевых» приложений, могут быть непосредственно адресованы хостовой ОС. Исключение составляют инструкции для управления такими устройствами, как видеокарта, IDE-контроллер, таймер, и некоторыми другими.

Таким образом, в процессе работы RM с квазиэмуляцией происходит выборочная эмуляция инструкций гостевой ОС. Очевидно, что производительность такой ВМ должна быть выше, чем у ВМ с полной эмуляцией. Тем не менее, как было сказано, при достигнутых уровнях производительности персональных компьютеров разница оказывается не столь ощутимой.

Примеры проектов, выполненных по технологии квазиэмуляции:

■ технология Virtual Platform, на базе которой компания VMware предлагает четыре продукта: VMware Workstation для Windows NT/2000/XP, VMware Workstation для Linux, VMware GSX Server (group server) и VMware LSX Server (enterprise server);

■ виртуальная машина Serenity Virtual Station (SVISTA) (бывшая twoOStwo), разработанная российской компанией Параллели (Parallels) по заказу немецкой компании NetSys GmbH;

■ проект с открытым кодом Рlеx86, позволяющий запускать различные операционные системы Intel х86 под управлением Linux.

■ проект с открытым кодом L4Ka, использующий микроядро;

■ проект с открытым кодом Xen, позволяющий запускать модифицированные ОС Linux, FreeBSD, NetBSD и Windows ХР под управлением Linux, FreeBSD, NetBSD и при соблюдении некоторых условий обеспечивающий даже прирост производительности.

В последующих главах книги рассмотрены наиболее популярные на сегодняшний день представители различных видов виртуальных машин: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels. Причем описание всех конкурирующих программ построено по одной и той же схеме, чтобы читателю проще было сравнить их между собой и сделать обоснованный выбор.