Поскольку весь код приложения исполняется без эмуляции, а эмулируются лишь вызовы 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[2];

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

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

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

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

Для пользователей, предпочитающих работать исключительно с операционными системами семейства Windows, продукт Virtual PC 2004, пожалуй, можно считать наиболее подходящим выбором — ведь последняя версия программы принадлежит Microsoft.

Общая характеристика

Технология, заложенная в Virtual PC, была разработана компанией Connectix, однако компания Microsoft в очередной раз продемонстрировала чутье на удачные технологические решения и в начале 2003 года приобрела права на Virtual PC. В ноябре 2003 появилась доработанная и модифицированная версия продукта — Virtual PC 2001 уже под торговой маркой Microsoft. Причем указанный продукт, предназначенный для установки на автономных компьютерах и рабочих станциях, вскоре получил «напарника». В первой половине 2004 года Microsoft был выпущен инструмент Microsoft Virtual Server 2004, предназначенный для развертывания сети виртуальных машин в масштабах предприятия. Поскольку книга ориентирована на пользователей «домашних» компьютеров, то основное внимание в ней уделено Virtual PC 2004.

Особенности работы Virtual PC 2004

Каждая виртуальная машина Virtual PC 2004 эмулирует автономный компьютер с собственными звуковой картой и видеокартой, а также (если требуется) с собственным сетевым адаптером. Такой виртуальный компьютер полностью изолирован от среды реального компьютера, и никакие изменения его конфигурации не влияют на конфигурацию физических устройств хост-компьютера. Параметры виртуального компьютера сохраняются в специальном конфигурационном файле (в формате XML), который при необходимости может быть перенесен на другой хост-компьютер с целью воспроизведения параметров виртуальной машины. 

Конфигурационный файл виртуальной машины имеет расширение VMC (Virtual Machine Configuration), однако собственно описание конфигурации выполнено на языке XML. Поэтому пользователи, знакомые с этим языком, могут открыть VMC-файл в любом текстовом редакторе и изучить его содержимое,

В качестве гостевых ОС на виртуальные машины могут быть установлены следующие системы:

■ из семейства Windows: Windows 95, Windows 98, Windows Me, Windows NT, Windows 2000, Windows XP (включая Tablet PC Edition), а также MS-DOS 6.22;

■ из числа ОС от других производителей гарантированно поддерживаются OS/2 Warp V4 Fix Pack 15, OS/2 Warp Convenience Pack 1 и OS/2 Warp Convenience Pack 2. Хотя разработчики Virtual PC и утверждают, что их продукт способен работать со всеми современными ОС, базирующимися на архитектуре х86, совместимость с другими ОС (например, Red Hat Linux, Novell NetWare) требуется на каждом конкретном компьютере проверять экспериментальным путем.