Лабораторная работа №1
Тема: Работа с виртуальными машинами.
Цель работы: Изучение основных понятий о виртуальных машинах для их практического применения.
Теоретические сведения:
1. Виртуальные машины в целом
1.1. Определение и понятие
Чтобы построить полный взгляд на виртуальные машины, разберем для начала, а что такое виртуальная машина?
Виртуальная машина — программная или аппаратная среда, исполняющая некоторый код (например, байт-код, шитый код, p-код или машинный код реального процессора), или спецификация такой системы (например: «виртуальная машина языка программирования Си»). [Википедия]
Для сравнения приведем несколько других определенней, а именно: Виртуальная машина — это полностью изолированный программный контейнер, способный выполнять собственную операционную систему и приложения, как физический компьютер. Виртуальная машина работает абсолютно так же, как физический компьютер, и содержит собственные виртуальные (т.е. программные) ЦП, ОЗУ, жесткий диск и сетевую интерфейсную карту (NIC).
Проще говоря, виртуальная машина – это программа, которую вы запускаете из своей операционной системы. Программа эмулирует реальную машину. На виртуальные машины, как и на реальные, можно ставить операционные системы. У неё есть BIOS, отведенное место на вашем жестком диске, сетевые адаптеры для соединения с реальной машиной, сетевыми ресурсами или другими виртуальными машинами.
1.2. Преимущества и недостатки виртуальных машин
1.2.1. Преимущества виртуальных машин
1.2.2. Недостатки виртуальных машин
1.3. Архитектура виртуальных машин
1.3.1. Абстракция и виртуализация
1.3.2. Процессные и системные виртуальные машины
1.3.3. Типы виртуализаций
Рассмотрим основные типы виртуализации различных компонент ИТ — инфраструктуры.
Приведенная выше типология рассматривает виртуализацию, в зависимости от части ИТ — инфраструктуры, в которой она применяется. Подходы к созданию интерфейсов между виртуальными машинами и системами виртуализации ресурсов также можно разделить на следующие типы:
2. Различные виртуальные машины
2.1. ORACLE VirtualBox — универсальная бесплатная виртуальная машина
VirtualBox — очень простой, мощный и бесплатный инструмент для виртуализации, развивающийся благодаря поддержжке знаменитой корпорации ORACLE. Он распространяется бесплатно, с открытым исходным кодом. VirtualBox

Преимуществом VirtualBox является простой и понятный пользовательский интерфейс. Хорошо сделан перевод на русский язык. Все основные функции вынесены в виде кнопок под меню. Создание виртуальных машин выполняется с помощью пошагового мастера.
VirtualBox поддерживает работу с сетями, поэтому ваша виртуальная ОС сможет легко выйти в Интернет. Очень полезной является функция «снимков» операционной системы. Виртуальная машина записывает на винчестер «точки восстановления», к которым вы в любой момент можете откатить гостевую систему в случае возникновения ошибок или сбоев.
2.2 Windows Visual PC — виртуальная машина от Microsoft
Windows Virtual PC — виртуальная машина для работы только и исключительно с Windows. Установить на Visual PC операционную систему Linux или MacOS просто невозможно.
Visual PC позволяет запускать несколько разных копий Windows на одном компьютере. Поддерживается работа с операционными системами Microsoft разных поколений, в том числе с 64-битными.
Плюсом Visual PC является возможность задать, какая из запущенных виртуальных машин будет более приоритетной по сравнению с другими. При этом «хостовый» компьютер сможет в автоматическом режиме выделять под ее нужды большее количество ресурсов за счёт других виртуальных систем, если «гостевой» системе это необходимо.
Моноплатформенность виртуальной машины Visual PC является её главным недостатком, впрочем, если требуется тестировать только разные версии Windows, это не актуально. Некоторым недостатком можно считать менее функциональный и менее удобный чем в VirtualBox интерфейс. В остальном Visual PC вполне надёжный инструмент, позволяющий тестировать операцонные системы Microsoft.
2.3 VMware Workstation — для серьёзных задач
VMware Workstation – мощная, платная, максимально-надёжная программа для виртуализации, которая поддерживает работу с Windows и Linux. Для виртуализации MacOS, данная машина не предназначена.
Благодаря высокой надёжности и широчайшей функциональности VMware Workstation часто используется не просто для тестирования, а даже для постоянной работы виртуальных машин в качестве серверов даже для бизнес-приложений, будь то фаервол, отеляющий сеть организации от Интернет или даже сервер какой-либо базы данных.
VMware Workstation можно очень гибко настраивать, включая множество параметров сетевых подключений для работы с интернетом. Система имеет собственный виртуальный 3D-ускоритель, который позволяет получить высокое качество графики.
Интерфейс VMware Workstation достаточно грамотно организован, поэтому освоиться со всем её богатым функционалом довольно легко. В программе полностью поддерживается русский язык.
Необходимо отметить, что у VMware Workstation есть бесплатный «младший брат» — VMWare Player. В отличие от версии Workstation, плеер не умеет создавать виртуальные машины, но позволяет запускать ранее созданные. Эта программа будет полезна в случаях тестирования, когда, к примеру, разработчик какой-либо автоматизированной системы передат её на ознакомление именно в виде образа виртуальной машины. Эта практика получает всё большее распространение, поскольку избавляет пользователя от необходимости разворачивать незнакомую программу самостоятельно.
Практическая часть
Вопросы для самоконтроля
Виртуальные машины
Что такое виртуальная машина?
Виртуальная машина — это виртуальное представление или эмуляция физического компьютера. Часто ее называют гостевой системой, а физический компьютер, на котором она работает, — хостом.
Виртуализация позволяет на одном физическом компьютере создать несколько виртуальных машин, каждая из которых будет иметь собственную операционную систему (ОС) и приложения. Виртуальная машина не может взаимодействовать с физическим компьютером напрямую. Для этого ей требуется «облегченный» программный уровень, называемый гипервизором, который обеспечивает координацию операций между виртуальной машиной и базовым физическим оборудованием. Гипервизор выделяет физические вычислительные ресурсы, в частности ресурсы процессора, памяти и накопителей, для каждой виртуальной машины. Гипервизор также обеспечивает независимую работу каждой виртуальной машины.
Вам могут встретиться разные названия этой технологии, например виртуальный сервер, экземпляр виртуального сервера (VSI) или виртуальный частный сервер (VPS), однако в этой статье мы будем использовать самый простой термин — «виртуальная машина».
Принцип работы виртуализации
Гипервизор, установленный на физическом компьютере или сервере, позволяет абстрагировать операционную систему и приложения от аппаратного обеспечения. Это дает возможность разделить физический сервер на несколько независимых «виртуальных машин».
Таким образом, каждая виртуальная машина независимо от других виртуальных машин может запускать собственную операционную систему и приложения и при этом совместно с другими виртуальными машинами использовать общие ресурсы физического сервера, управляемого гипервизором. Примерами таких ресурсов являются оперативная память, хранилище и др.
Для того чтобы познакомиться с базовыми принципами виртуализации, посмотрите следующий видеоролик и прочитайте статью 5 преимуществ виртуализации:
Гипервизор выполняет роль «регулировщика» трафика, обеспечивая распределение ресурсов физического сервера между множеством новых виртуальных машин и их независимую работу.
Существует два основных типа гипервизоров.
Гипервизоры 1 типа работают непосредственно на физическом оборудовании (обычно сервере), заменяя собой ОС. Для создания виртуальных машин и управления ими через гипервизор, как правило, используется отдельный программный продукт. Некоторые инструменты управления, например VMware vSphere, предоставляют возможность выбора гостевой ОС для установки на виртуальную машину.
При необходимости отдельную виртуальную машину можно использовать в качестве шаблона, дублируя конфигурацию при создании новых виртуальных машин. В зависимости от ваших потребностей можно создать несколько шаблонов виртуальных машин для разных целей, например для тестирования ПО, рабочих баз данных и сред разработки.
Гипервизоры 2 типа работают как приложение в ОС хоста и обычно ориентированы на однопользовательские платформы настольных или портативных компьютеров. Гипервизоры 2 типа позволяют вручную создать виртуальную машину и установить на нее гостевую ОС. С помощью гипервизора можно выделить физические ресурсы виртуальной машине, вручную настроив количество ядер процессора и объем памяти. В зависимости от функциональных возможностей гипервизора можно также включить аппаратное ускорение трехмерной графики.
Полный обзор гипервизоров приведен в документе Гипервизоры: полное руководство.
Достоинства и преимущества виртуальных машин
Виртуальные машины обладают целым рядом преимуществ по сравнению с традиционными физическими устройствами:
Примеры использования виртуальных машин
Существует несколько сфер применения виртуальных машин для ИТ-администраторов предприятий и для конечных пользователей. Вот некоторые из них:
Типы виртуальных машин
В этом разделе рассматриваются лишь некоторые из множества видов виртуальных машин:
Виртуальные машины Windows
Большинство гипервизоров поддерживают виртуальные машины, работающие в ОС Windows как гостевые системы. Гипервизор Microsoft Hyper-V входит в состав операционной системы Windows. Во время установки он создает родительский раздел, содержащий сам гипервизор и основную ОС Windows, которые обладают привилегированным доступом к аппаратному обеспечению. Другие операционные системы, включая гостевые системы Windows, выполняются в дочерних разделах, взаимодействующих с аппаратным обеспечением через родительский раздел.
Виртуальные машины Android
Операционная система Google Android с открытым исходным кодом широко применяется на мобильных устройствах и в бытовых приборах, подключенных к Интернету, таких как домашние медиацентры. ОС Android работает только на архитектуре процессора ARM, предназначенной для этих устройств, однако любители игр на Android и разработчики ПО могут попробовать запустить ее на ПК.
Это не так просто, так поскольку ПК работают на полностью отличной архитектуре x86, а гипервизор виртуализации оборудования лишь передает инструкции между виртуальной машиной и процессором. Гипервизор не преобразует код для процессоров с другими наборами инструкций. Существует несколько вариантов решения этой проблемы.
В некоторых проектах, например Shashlik или Genymotion, используется эмулятор, который воссоздает архитектуру ARM в программном обеспечении. Альтернативный проект Android-x86 переносит Android на архитектуру x86. Для ее запуска необходимо установить программу Android-x86 в качестве виртуальной машины с использованием гипервизора VirtualBox 2 типа. Еще одно альтернативное решение, Anbox, запускает операционную систему Android в ядре ОС Linux хоста.
Виртуальные машины Mac
ОС macOS от Apple может работать исключительно на оборудовании Apple; лицензионное соглашение с конечным пользователем запрещает запускать macOS на оборудовании других производителей как виртуальную машину или иным способом. Для создания виртуальных машин с гостевой ОС macOS можно использовать гипервизоры 2 типа на базе оборудования Mac.
Виртуальные машины iOS
На сегодняшний день невозможно запустить iOS в виртуальной машине, поскольку Apple разрешает запускать ОС iOS исключительно на устройствах iOS и строго контролирует свой продукт.
Ближайшее к виртуальной машине iOS решение — эмулятор iPhone, который поставляется вместе с интегрированной средой разработки Xcode, имитирующей всю систему iPhone в программном обеспечении.
Виртуальные машины Java
Платформа Java — среда выполнения, предназначенная для программ на языке разработки программного обеспечения Java. Язык Java создавался под лозунгом «написано однажды, выполняется где угодно». Это означает, что любая программа Java может работать на любом оборудовании с платформой Java. Для этого на платформе Java предусмотрена виртуальная машина Java (JVM).
Программы Java содержат байтовый код, представляющий собой инструкции для JVM. JVM компилирует байтовый код в машинный код — низкоуровневый язык хоста. Для каждой вычислительной платформы JVM создает уникальный набор инструкций на машинном языке, в зависимости от процессора целевой платформы.
Поэтому JVM не запускает ОС целиком и не использует гипервизор, как другие виртуальные машины. Вместо этого она преобразует программы прикладного уровня для работы на определенном оборудовании.
Более подробная информация о Java приведена в документе Java: полное руководство.
Виртуальные машины Python
Виртуальная машина Python, как и JVM, не запускает гипервизор и не включает гостевую ОС. Этот инструмент обеспечивает возможность выполнения программ на языке программирования Python на множестве различных ЦП.
Аналогично Java, Python преобразует программы в промежуточный формат (байтовый код) и хранит его в исполняемом файле. При запуске программы виртуальная машина Python преобразует байтовый код в машинный код для быстрого выполнения.
Виртуальные машины Linux
Linux — распространенная гостевая ОС, применяемая во многих виртуальных машинах. Это еще и популярная ОС хоста для работы виртуальных машин, имеющая собственный гипервизор под названием «виртуальная машина на основе ядра» (KVM). KVM была добавлена в ядро Linux еще в 2007 году. Несмотря на то, что проект создавался на основе открытого исходного кода, сегодня компания-разработчик KVM принадлежит Red Hat.
Виртуальные машины VMware
Компания VMware, которая одной из первых приступила к разработке ПО для виртуализации, сегодня является популярным поставщиком гипервизоров 1 и 2 типов, а также ПО виртуальных машин для корпоративных клиентов.
В документе VMware: полное руководство приведена исчерпывающая информация о VMware.
Виртуальные машины Ubuntu
Ubuntu — дистрибутив Linux, разработанный компанией Canonical. Он доступен в двух версиях — для ПК и сервера — с возможностью установки в виде виртуальной машины. Ubuntu можно развернуть как гостевую ОС в Microsoft Hyper-V. Он предоставляет оптимизированную версию Ubuntu Desktop, которая отлично работает в расширенном режиме Hyper-V (Enhanced Session Mode), обеспечивая тесную интеграцию между хостом Windows и виртуальной машиной Ubuntu. Кроме того, поддерживаются следующие возможности: интеграция буфера обмена, динамическое изменение размера рабочего стола, общие папки и перемещение указателя мыши между рабочим столом хоста и гостевой системы.
Сравнение моделей с одним и несколькими арендаторами
В средах облачных вычислений виртуальные машины обычно доступны в двух вариантах — с одним и несколькими арендаторами.
Виртуальные машины с несколькими арендаторами — это общедоступные виртуальные машины с совместным использованием общей физической инфраструктуры несколькими пользователями. Это самый выгодный и масштабируемый подход к предоставлению виртуальных машин, однако он характеризуется низким уровнем изоляции, в котором нуждаются организации со строгими требованиями к безопасности и нормативному соответствию.
Виртуальные машины с одним арендатором доступны в двух вариантах — выделенные хосты и выделенные экземпляры.
Выделенный хост подразумевает аренду всего физического сервера и получение полного контроля за доступом к операционной системе, оборудованию и всем установленным программам. Данная модель обеспечивает максимальную гибкость и прозрачность аппаратного обеспечения, контроль за размещением задач, а также предоставляет ряд преимуществ при использовании существующих лицензий (BYOL) на программное обеспечение.
Выделенный экземпляр отличается тем же уровнем изоляции и контроля за приложениями, но он не привязан к определенному физическому оборудованию. Таким образом, в случае перезагрузки выделенный экземпляр может оказаться в новой физической системе — системе, назначенной определенному клиенту, но тем не менее эта новая система теоретически может находиться в другом физическом расположении.
Модели ценообразования для виртуальных машин
К самым распространенным моделям ценообразования для виртуальных машин в облаке относятся: оплата за фактическое использование (в час или секунду), временные/оперативные экземпляры, зарезервированные экземпляры и выделенные хосты.
Сравнение виртуальных машин и физических серверов
Выбор в пользу виртуальной машины вместо физического сервера относится не столько к конкурирующим возможностям, сколько к пониманию задач, стоящих перед вами.
Физические серверы — это мощное аппаратное обеспечение и вычислительные возможности в изолированной среде. Физические серверы с одним арендатором совершенно не зависят от циклов гипервизора (ПО виртуализации) и находятся в распоряжении одного клиента.
Приложениям с высокими требованиями к производительности и уровню изоляции (например, в случае интенсивной обработки данных или соблюдения нормативных требований) лучше всего подходят физические серверы — особенно в случае долгосрочного развертывания.
Приложения в сфере электронной коммерции, финансовых услуг, ERP, CRM и SCM являются примерами идеальных задач для физических серверов.
Итак, когда следует использовать гипервизор в дополнение к физическому серверу для создания виртуальной машины? В тех случаях, когда необходимо обеспечить максимальную гибкость и масштабируемость приложений.
Виртуальные машины без лишних усилий масштабируют ресурсы сервера и повышают эффективность использования ресурсов — идеальное решение для перемещения данных из одной виртуальной машины в другую, изменения размера наборов данных и разделения динамических задач.
Сравнение виртуальных машин и контейнеров
Самый простой способ понять, что такое контейнер, — это понять, чем он отличается от традиционной виртуальной машины (ВМ). При традиционном подходе к виртуализации — на локальных ресурсах или в облаке — для виртуализации физического оборудования применяется гипервизор. В этом случае каждая виртуальная машина содержит гостевую ОС, виртуальный экземпляр оборудования для работы ОС, а также приложение вместе со связанными библиотеками и зависимостями.
Вместо виртуализации базового оборудования контейнеры виртуализируют операционную систему (обычно Linux), т. е. каждый отдельный контейнер содержит только приложение, его библиотеки и зависимости. Легкость, высокая скорость и переносимость контейнеров объясняется именно отсутствием гостевой ОС.
Контейнеры и управляющий ими механизм координации, Kubernetes, прекрасно подходят для современных, облачных архитектур и микросервисов. Хотя контейнеры обычно применяются вместе с услугами без отслеживания состояния, они могут быть адаптированы к услугам с отслеживанием состояния.
Кроме того, контейнеры все чаще встречаются в гибридных облачных средах, поскольку их отличает согласованная работа на портативных компьютерах, в облаке и в традиционных, локальных средах.
Более подробная информация приведена в статье блога Сравнение контейнеров и виртуальных машин: в чем отличия?
В следующем видеоролике Сай Веннам подробно разбирает основные принципы контейнеризации и ее отличия от виртуальных машин (8:09):
Стратегия выбора поставщика виртуальных машин
Выбор поставщика облачных услуг и виртуальных машин не станет для вас большой проблемой, если вы понимаете, каким критериям должен соответствовать поставщик. Конечно, виртуальная машина должна соответствовать вашим задачам и бюджету, но есть и ряд других факторов, играющих важную роль при выборе среды виртуализации. Ниже перечислены десять пунктов, которые следует учитывать при выборе поставщика виртуальных машин.
Виртуальные машины и IBM Cloud
IBM Cloud предлагает для работы с виртуальными машинами различные конфигурации как относительно технических возможностей, так и с точки зрения ценообразования. Технический профиль виртуальной машины можно выбрать, исходя из ваших требований к вычислительной мощности, памяти, объему локального хранилища, возможностям GPU, т. е. настроить систему для своих конкретных задач. Кроме того, для управления виртуальными машинами VMware можно использовать решения IBM Cloud for VMware.
В зависимости от нормативных требований и требований к безопасности можно выбрать общедоступный или частный узел. Частная среда с одним арендатором может быть размещена на выделенном хосте, выбранном вами из более чем 60 ЦОД IBM в 19 странах по всему миру.
Вам доступен огромный выбор вариантов развертывания для разного бюджета. Общедоступный экземпляр виртуальной машины, резервируемый на определенное время, обходится дешевле незарезервированной системы. Также можно выбрать виртуальную машину на основе «оперативного» тарифа для выполнения временных задач.
Кроме того, IBM Cloud позволяет настроить комбинацию ресурсов виртуального сервера и физического сервера, которая удовлетворит любые требования и подойдет для любых задач.
Для просмотра дополнительных сведений посетите страницу IBM Cloud и создайте IBMid.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
VM (Virtual Machine)
Содержание
История
В наши дни лидерами рынка виртуализации являются VMware, Microsoft, Citrix и Red Hat, однако эти компании не стояли у истоков технологии. В 1960-х годах прошлого века все начиналось с разработок специалистов таких компаний, как General Electric (GE), Bell Labs, IBM и др. За более чем полвека область виртуализации прошла значительный путь.
Истоки
Виртуализация зародилась в качестве средства для расширения размеров оперативной памяти компьютеров в 60-х годах прошлого века. В те времена речь шла о том, чтобы добиться возможности исполнения нескольких программ — первым суперкомпьютером, в котором процессы операционной системы были разделены, стал проект департамента электротехники Университета Манчестера под названием Atlas (финансировался компанией Ferranti Limited).
Суперкомпьютер Atlas
Atlas был самым быстрым суперкомпьютером своего времени. Частично это достигалось благодаря разделению системных процессов с помощью суперзвизора (компонент, отвечающий за контроль ключевых ресурсов — процессорного времени и т.д.) и компонента, осуществлявшего исполнение пользовательских программ. Впервые в Atlas была использована виртуальная память (one-level store) — системное хранилище памяти было отделено от использовавшегося пользовательскими программами. Данные разработки стали первыми шагами по направлению к созданию уровня абстракции, использованного в дальнейшем во всех основных технологиях виртуализации.
Проект M44/44X
Следующим шагом в развитии технологий виртуализации стал проект корпорации IBM. Американские исследователи пошли дальше британских коллег и разработали концепцию «виртуальной машины», попытавшись разделить компьютер на отдельные небольшие части. Основным компьютером был «научный» IBM 7044 (M44), на котором запускались виртуальные машины 7044 (40X) — на данном этапе виртуальные машины не симулировали полностью работу «железа».
CP/CMS
IBM работала над мейнфреймом S/360 — планировалось, что этот продукт станет заменой предыдущим разработкам корпорации. S/360 была однопользовательской системой, которая могла запускать несколько процессов одновременно. Фокус деятельности корпорации начал меняться после 1 июля 1963 года, когда ученые Массачусетского технологического института (MIT) запустили проект MAC. Изначально сокращение системы было образовано от фразы Mathematics and Computation, показывая направленность разработки, но позднее под MAC стали понимать Multiple Access Computer («компьютер множественного доступа»).
IBM S/360
Виртуализация в СССР
В СССР аналогом IBM System/370 являлся проект СВМ (Система Виртуальных Машин), запущенный в 1969 году. Одной из главных задач проекта была адаптация системы IBM VM/370 Release 5 (её более ранняя версия CP/CMS). В СВМ была реализована последовательная и полная виртуализация (на виртуальной машине можно было запустить другую копию СВМ и т.д.).
SoftPC, Virtual PC и VMware
Развитие рынка в 2000-х
В 2001 году VMware выпуcтила два новых продукта, которые позволили компании выйти на корпоративный рынок — ESX Server и GSX Server. GSX позволил пользователям запускать виртуальные машины внутри операционных систем вроде MS Windows (данная технология является гипервизором второго типа — Type-2 Hypervisor). ESX Server относится к гипервизорам первого типа (Type-1 Hypervizor) и не требует наличия домашней операционной системы для запуска виртуальных машин. Гипервизоры первого типа гораздо эффективнее, поскольку обладают большими возможностями по оптимизации и не требуют траты ресурсов на запуск и поддержание работы операционной системы. После выпуска ESX Server компания VMware стремительными темпами захватила корпоративный рынок, опередив конкурентов. Вслед за VMware на данный рынок вышли и другие игроки — в 2003 году Microsoft купила Connectix и перезапустила продукт Virtual PC, а затем, в 2005 году выпустила и энтерпрайз-решение Microsoft Virtual Server. В 2007 году на рынок корпоративной виртуализации вышла корпорация Citrix, купившая open source платформу для виртуализации под названием Xensource. Этот продукт затем был переименован в Citrix XenServer.
Определение и понятие виртуальной машины
На виртуальные машины, как и на реальные, можно ставить операционные системы.На одном компьютере может функционировать несколько виртуальных машин (это может использоваться для имитации нескольких серверов на одном реальном сервере с целью оптимизации использования ресурсов сервера).
Архитектура виртуальной машины
Операционная система, управляющая реальным оборудованием и предоставляющая функции для доступа к нему, называется «хостовой операционной системой». Хостовая операционная система загружается самостоятельно и не требует виртуальной машины для своей работы. Операционные системы, работающие в виртуальных машинах, называются «гостевыми операционными системами». На одном физическом компьютере может быть запущена одна хостовая и много гостевых операционных систем. Общая системная архитектура виртуальной машины построена на взаимодействии трех основных компонентов:
Для каждой виртуальной машины запускается своя копия приложения виртуальной машины. Приложение виртуальной машины выполняет следующие основные функции:
Монитор работает в изолированном от хостовой операционной системы контексте и поддерживает свои собственные системные таблицы GDT, LDT, IDT и т.д. При переключении контекста между монитором и хостовой операционной системой выполняется операция сохранения одного контекста и загрузка другого. Переключение контекста напоминает процедуру переключения задач операционной системы, но включает в себя дополнительный набор данных. Также, монитор должен отлавливать и перенаправлять хостовой операционной системе все прерывания от реальных внешних устройств.
Классификация виртуальной машины
Процессные виртуальные машины
Процессные ВМ создают виртуальные среды ABI или API для пользовательских приложений. Различные их разновидности позволяют в многозадачном режиме осуществлять репликацию операционной среды, эмулировать систему команд, оптимизировать код или выполнять программы на языках высокого уровня.
Многозадачные системы
Самая распространенная процессная ВМ стала настолько привычной, что мало кто воспринимает ее как виртуальную машину. Большинство операционных систем могут работать в многозадачном режиме, поддерживая несколько пользовательских процессов одновременно, благодаря чему у каждого из них «создается иллюзия единоличного владения» машиной. Каждый процесс имеет собственные адресное пространство, регистры и файловую структуру. Операционная система организует работу базового оборудования в режиме разделения времени. Фактически операционная система предоставляет процессную ВМ каждому из одновременно выполняемых приложений.
Интерпретаторы и динамические трансляторы двоичного кода
Более сложной проблемой для процессных ВМ является поддержка программ в двоичном коде, которые скомпилированы для системы команд, отличающейся от системы команд хоста. Свежий пример процессной ВМ — программный пакет Intel IA32-EL, позволяющий на платформе Itanium выполнять приложения, рассчитанные на IA-32. Проще всего эмулировать команды путем интерпретации. Программа-интерпретатор одну за другой выбирает из памяти, декодирует и выполняет команды гостевой программы. Этот процесс может быть довольно медленным и требовать десятков команд хост-машины для интерпретации каждой исходной команды. Более высокая производительность достигается путем динамической трансляции двоичного кода, в ходе которой команды гостевой программы поблочно преобразуются в команды хоста и сохраняются для повторного использования в кэш-памяти команд. Таким образом, в случае циклического выполнения транслированных команд удается амортизировать относительно высокие затраты на трансляцию.
Оптимизаторы двоичного кода
Для повышения производительности динамические трансляторы иногда оптимизируют двоичный код. Эта возможность приводит к идее создания виртуальной машины, в которой гость и хост используют одну и ту же систему команд. Единственным назначением такой ВМ становится оптимизация двоичного кода. Оптимизаторы используют информацию из профиля, собранную при интерпретации или трансляции, чтобы оптимизировать двоичный код «на лету». Примером такого оптимизатора является система Dynamo — один из результатов реализации научно-исследовательского проекта компании Hewlett-Packard.
Виртуальные машины для языков высокого уровня
Системные виртуальные машины
Системная ВМ обеспечивает полнофункциональную среду, в которой могут сосуществовать операционная система и несколько процессов, относящихся к разным пользователям. С помощью системных ВМ одна аппаратная платформа способна одновременно поддерживать несколько изолированных гостевых операционных систем. Системные ВМ появились в середине 60-х годов. В то время компьютерные системы на базе мэйнфреймов были очень большими и дорогими, обычно обслуживали многочисленные группы пользователей. С появлением технологий ВМ эти группы получили возможность на общем оборудовании эксплуатировать различные операционные системы. По мере снижения цен на компьютерное оборудование и развития настольных ПК интерес к первым системным ВМ постепенно снизился. Однако сегодня системные ВМ снова набирают популярность, поскольку на смену мэйнфреймам пришли серверы и серверные комплексы, обслуживающие большие группы потребителей. Одним из важнейших применений технологии системных ВМ является изоляция систем, одновременно работающих на общей аппаратной платформе. В таких случаях отказ в работе или нарушение безопасности одной из гостевых систем не влияет на программное обеспечение, выполняющееся на других гостевых системах. В системной ВМ монитор VMM обеспечивает репликацию платформы. Основной проблемой является распределение аппаратных ресурсов между несколькими гостевыми операционными системами. VMM управляет всеми аппаратными ресурсами. Гостевая операционная система и ее прикладные процессы работают под скрытым контролем VMM. Когда гостевая ОС пытается выполнить привилегированную команду или операцию, непосредственно затрагивающую общие аппаратные ресурсы, VMM ее перехватывает, проверяет правильность и исполняет от имени гостя. Гостевое ПО «не знает» об этой негласной работе.
Классические системные ВМ
Большинство системных ВМ обеспечивают примерно одинаковые функциональные возможности, но различаются деталями реализации. При классическом подходе монитор VMM устанавливается на «голом железе», а ВМ располагается поверх него. VMM выполняется в привилегированном режиме, в то время как гостевые операционные системы лишены почти всех привилегий. Это необходимо, чтобы VMM мог перехватывать и эмулировать те их действия, которые в обычных условиях связаны с управлением жизненно важными аппаратными ресурсами.
Вложенные ВМ
Интегральные ВМ
В обычных системных ВМ хост-система, все гостевые операционные системы и прикладные программы используют архитектуру ISA базового оборудования. Однако в некоторых ситуациях гость и хост не имеют общей ISA. Например, две самые популярные настольные системы, Windows PC и Apple PowerPC, используют различные ISA и разные операционные системы. Интегральные ВМ справляются с такой ситуацией, виртуализируя все программное обеспечение, в том числе операционную систему и приложения. Из-за различий в системах команд ВМ должна эмулировать и код приложений, и код операционной системы. Примером ВМ такого типа служит эмулятор Virtual PC, в котором система Windows работает на платформе Macintosh. Программное обеспечение ВМ выполняется на хосте как обычная прикладная программа и не использует системных операций ISA.
Многопроцессорная виртуализация
Особый интерес представляет виртуализация большого многопроцессорного комплекса с разделяемой памятью. Важно разделить крупную систему на несколько меньших многопроцессорных систем, распределив аппаратные ресурсы базовой системы. С помощью физического разбиения на разделы аппаратные ресурсы, используемые одной виртуальной системой, отделяются от ресурсов других виртуальных систем. Физическое разделение обеспечивает высокую степень изоляции, поэтому ни проблемы ПО, ни ошибки аппаратных средств в одном разделе не затрагивают программы в других разделах. При логическом разбиении на разделы разделы сервера совместно используют базовые аппаратные ресурсы в режиме временного мультиплексирования, что позволяет повысить коэффициент загрузки оборудования. Однако при этом теряются некоторые из преимуществ изоляции аппаратных средств. При реализации обоих методов обычно используются дополнительное программное обеспечение или микропрограммы для базового оборудования, специально доработанного для обеспечения поддержки логических разделов.
Встроенные ВМ
Для встроенной ВМ нет готовых приложений, а монитор VMM выглядит как составная часть оборудования, единственным назначением которого является эмуляция гостевой ISA. Для поддержания этой иллюзии VMM располагается в области памяти, скрытой от обычного программного обеспечения. В его состав входит транслятор двоичного кода, который преобразует гостевые команды в оптимизированные последовательности базовых команд и помещает их в скрытую кэш-память. Наиболее известный пример встроенной ВМ — процессор Transmeta Crusoe. Его базовые аппаратные средства используют архитектуру команд со сверхдлинным командным словом (very long instruction word, VLIW), а гостевая ISA — это Intel IA-32. Благодаря простоте аппаратной части, предназначенной для выполнения команд VLIW, разработчикам Transmeta удалось существенно снизить энергопотребление процессора. В системе IBM AS/400 (сегодня известна как iSeries) также используется технология встроенных ВМ. В отличие от других встроенных ВМ, основное назначение AS/400 — поддержка объектно-ориентированной системы команд, позволяющей по-новому взглянуть на интерфейс между оборудованием и программным обеспечением. Сегодняшние реализации AS/400 основаны на расширенной архитектуре PowerPC, тогда как ранние версии использовали существенно отличавшуюся от нее частную архитектуру ISA.
Обзор технологии виртуальной машины
Квази-эмуляция
Примеры проектов, выполненных по технологии квази-эмуляции:
Существуют различные программные техники, позволяющие решать задачи квази-эмуляции. Две наиболее популярные техники, используемые в большинстве проектов виртуализации и эмуляции, «техника программного отладчика» и «техника динамической трансляции».
Техника программного отладчика
Техника динамической трансляции
Эмуляция процессора
По аналогии с контекстом отдельного процесса можно ввести понятие контекста операционной системы. Для этого контекст процесса надо расширить системными регистрами CROx, дескрипторными таблицами GDT, LDT, IDT, страничными таблицами PDE, PTE, отладочными регистрами DROx. В схеме виртуализации присутствует три независимых контекста
Если контексты хостовой и гостевой операционных систем абсолютно независимы, то контекст монитора является некоторым расширением контекста гостевой операционной системы. Контекст монитора является расширением контекста гостевой операционной системы. Величина этого расширения зависит от выбранной стратегии виртуализации. Существует два противоположных подхода к эмуляции системных областей процессора:
Схема виртуализации должна обеспечивать:
Для взаимодействия с внешними устройствами процессор использует инструкции ввода/вывода ( IN, OUT). Виртуализационная схема может использовать два различных метода эмуляции внешних устройств: метод полной эмуляции и/или метод сквозного взаимодействия. В первом случае, все регистры и области устройства полностью эмулируются, а для взаимодействия с реальным устройством используются функции хостовой операционной системы. При этом реальное устройство может использоваться виртуальной машиной совершенно не так, как это предполагалось гостевой операционной системой. Например, виртуальный CD-ROM может быть отображен как на реальный CD-ROM, так и в файл на жестком диске. Несмотря на то, что виртуальная машина может запускаться на самых разных компьютерах с разными конфигурациями, для гостевой операционной системы всегда будет эмулироваться единый набор виртуального «железа». То есть, один раз настроенную и проинсталлированную виртуальную машину можно переносить с одного компьютера на другой, не заботясь о совместимости. Для метода сквозного взаимодействия необходимо осуществить монопольный захват реального устройства одной виртуальной машиной. В процессе работы оно будег недоступно ни хостовой операционной системе, ни другим виртуальным машинам. При этом устройство не эмулируется, а напрямую используется гостевой операционной системой. Все команды гостевой операционной системы перехватываются монитором и перенаправляются захваченному устройству. Естественно, ни о какой совместимости здесь речь уже не идет. Зато возможна работа гостевой операционной системы с устройствами, которые не поддерживаются хостовой операционной системой.
Эмуляция API операционной системы
Полная эмуляция
Проекты, выполненные по технологии полной эмуляции работают как интерпретаторы. Они последовательно выбирают код гостевой операционной системы и эмулируют поведение каждой отдельно взятой инструкции. Поскольку при этом полностью эмулируется поведение как процессора, так и всех внешних устройств виртуального Intel х86 компьютера, то существует возможность запускать эмулятор на компьютерах с совершенно другой архитектурой, например, на рабочих станциях Mаc или на RISC’овых серверах Sun. Самый серьезный недостаток этого подхода заключается в катастрофической потере производительности гостевой операционной системы. Скорость работы гостевых приложений может упасть в 100-1000 раз, что означает практическую невозможность нормальной работы с гостевой операционной системой внутри эмулятора. Тем не менее, существуют некоторые технологии, такие как динамическая трансляция, позволяющие увеличить скорость полной эмуляции. Полные эмуляторы чаще всего используются в качестве низкоуровневых отладчиков для исследования и трассировки операционных систем. Примеры проектов, выполненных по технологии полной эмуляции:





















