Поскольку весь код приложения исполняется без эмуляции, а эмулируются лишь вызовы 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 эмулирует автономный компьютер с собственными звуковой картой и видеокартой, а также (если требуется) с собственным сетевым адаптером. Такой виртуальный компьютер полностью изолирован от среды реального компьютера, и никакие изменения его конфигурации не влияют на конфигурацию физических устройств хост-компьютера. Параметры виртуального компьютера сохраняются в специальном конфигурационном файле (в формате 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) требуется на каждом конкретном компьютере проверять экспериментальным путем.