Читать «Виртуальные машины: несколько компьютеров в одном» онлайн - страница 4

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

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

В упрощенном виде архитектура системы, в которой используются виртуальные машины, выглядит следующим образом (рис. 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 гостевой ОС — это ее ориентация на конкретную операционную систему.