Введение

Гипервизор, также известный как монитор виртуальной машины (VMM) или виртуализатор, — это тип компьютерного программного обеспечения, прошивки или аппаратного обеспечения, который создает и запускает виртуальные машины. Компьютер, на котором работает гипервизор, управляя одной или несколькими виртуальными машинами, называется хост-машиной, а каждая виртуальная машина — гостевой машиной. Гипервизор предоставляет гостевым операционным системам виртуальную операционную платформу и управляет выполнением этих операционных систем. В отличие от эмулятора, гостевая операционная система выполняет большинство инструкций непосредственно на физическом оборудовании. Несколько экземпляров различных операционных систем могут совместно использовать виртуализированные аппаратные ресурсы: например, экземпляры Linux, Windows и macOS могут работать на одном физическом компьютере x86. Это отличается от виртуализации на уровне операционной системы, где все экземпляры (обычно называемые контейнерами) должны использовать одно ядро, хотя гостевые операционные системы могут различаться в пользовательском пространстве, например, различные дистрибутивы Linux с использованием одного и того же ядра. Термин «гипервизор» является вариантом слова «supervisor», традиционного обозначения ядра операционной системы: гипервизор можно рассматривать как супервизор супервизоров, где «гипер» является усиленной формой «супер». Этот термин появился примерно в 1970 году; IBM ввела его для системы 360/65 и позже использовала для обработчика DIAG в CP 67. В более ранней системе CP/CMS (1967) вместо этого использовался термин «контрольная программа».

Истоки мейнфреймов

Первыми гипервизорами, обеспечивающими полную виртуализацию, были тестовый инструмент SIMMON и исследовательская система IBM CP 40, которая начала использоваться в производстве в январе 1967 года и стала первой версией операционной системы IBM CP/CMS. CP 40 работала на S/360 40, модифицированном в Кембриджском научном центре для поддержки динамического преобразования адресов, что позволило реализовать виртуализацию. До этого момента аппаратное обеспечение компьютеров виртуализировалось лишь в той степени, чтобы позволить нескольким пользовательским приложениям выполняться одновременно, как, например, в CTSS и IBM M44/44X. С CP 40 виртуализировалось также состояние супервизора аппаратного обеспечения, что позволило нескольким операционным системам одновременно работать в отдельных контекстах виртуальных машин. Программисты вскоре реализовали CP 40 (под названием CP 67) для IBM System/360 67 – первой производственной компьютерной системы, способной к полной виртуализации. IBM выпустила эту машину в 1966 году; она включала аппаратное обеспечение для таблиц преобразования страниц для виртуальной памяти и другие методы, позволявшие полностью виртуализировать все задачи ядра, включая ввод/вывод и обработку прерываний. (Следует отметить, что "официальная" операционная система, неудачная TSS/360, не использовала полную виртуализацию.) И CP 40, и CP 67 начали использоваться в производстве в 1967 году. CP/CMS была доступна клиентам IBM с 1968 по начало 1970-х годов в виде исходного кода без поддержки. CP/CMS была частью попытки IBM создать надежные системы разделения времени для своих мэйнфреймов. Запуская несколько операционных систем одновременно, гипервизор повышал устойчивость и стабильность системы: даже если одна операционная система аварийно завершала работу, другие продолжали работать без перерыва. Это даже позволяло развертывать и отлаживать бета-версии или экспериментальные версии операционных систем или даже нового оборудования, не подвергая опасности стабильную основную производственную систему и не требуя дорогостоящих дополнительных систем разработки. IBM объявила о своей серии System/370 в 1970 году без функции виртуальной памяти, необходимой для виртуализации, но добавила ее в августе 1972 года в рамках анонса расширенных функций. Виртуализация была включена во все последующие системы, так что все современные мэйнфреймы IBM, включая линейку zSeries, сохраняют обратную совместимость с линейкой IBM S/360 1960-х годов. Анонс 1972 года также включал VM/370 – перереализацию CP/CMS для S/370. В отличие от CP/CMS, IBM предоставляла поддержку этой версии (хотя она все еще распространялась в виде исходного кода для нескольких релизов). VM расшифровывается как Virtual Machine, подчеркивая, что виртуализированы все, а не только некоторые, аппаратные интерфейсы. И VM, и CP/CMS получили раннее признание и быстрое развитие в университетах, корпоративных пользователях и поставщиках услуг разделения времени, а также внутри IBM. Пользователи играли активную роль в текущей разработке, предвосхищая тенденции, наблюдаемые в современных проектах с открытым исходным кодом. Однако в серии спорных и ожесточенных противостояний разделение времени проиграло пакетной обработке из-за политической борьбы внутри IBM, и VM оставалась "другой" операционной системой IBM на протяжении десятилетий, уступая MVS. Она пережила возрождение популярности и поддержки с 2000 года как продукт z/VM, например, как платформа для Linux на IBM Z. Как упоминалось выше, программа управления виртуальными машинами включает обработчик вызовов гипервизора, который перехватывает инструкции DIAG ("Диагностика", opcode x'83"), используемые внутри виртуальной машины. Это обеспечивает быстрое не виртуализированное выполнение доступа к файловой системе и других операций (DIAG – это привилегированная инструкция, зависящая от модели, не используемая в обычном программировании и, следовательно, не виртуализируемая. Поэтому она доступна для использования в качестве сигнала для операционной системы "хоста"). Впервые реализованное в CP/CMS версии 3.1, использование DIAG обеспечило интерфейс операционной системы, аналогичный инструкции System/360 Supervisor Call (SVC), но не требующее изменения или расширения виртуализации SVC. В 1985 году IBM представила гипервизор PR/SM для управления логическими разделами (LPAR).

Системы x86

Виртуализация x86 была представлена в 1990-х годах, а её эмуляция была включена в Bochs. Intel и AMD выпустили свои первые процессоры x86 с аппаратной виртуализацией в 2005 году: Intel VT-x (с кодовым названием Vanderpool) и AMD-V (с кодовым названием Pacifica). Альтернативный подход предполагает модификацию гостевой операционной системы для выполнения системного вызова к базовому гипервизору, вместо выполнения машинных инструкций ввода-вывода, которые гипервизор эмулирует. Это называется паравиртуализацией в Xen, "гипервызовом" в Parallels Workstation и "кодом DIAGNOSE" в IBM VM. Некоторые микроядра, такие как Mach и L4, достаточно гибки, чтобы поддерживать паравиртуализацию гостевых операционных систем.

Встроенные системы

Встроенные гипервизоры, предназначенные для встраиваемых систем и определенных сред операционных систем реального времени (RTOS), разрабатываются с иными требованиями, чем для настольных и корпоративных систем, включая надежность, безопасность и возможности работы в реальном времени. Ограниченность ресурсов многих встраиваемых систем, особенно мобильных систем с питанием от батарей, предъявляет дополнительные требования к небольшому объему памяти и минимальным накладным расходам. Кроме того, в отличие от распространенности архитектуры x86 в мире ПК, встраиваемые системы используют более широкий спектр архитектур и менее стандартизированные среды. Поддержка виртуализации требует защиты памяти (в виде блока управления памятью или, как минимум, блока защиты памяти) и разделения между пользовательским режимом и привилегированным режимом, что исключает большинство микроконтроллеров. Это оставляет x86, MIPS, ARM и PowerPC в качестве широко используемых архитектур для встраиваемых систем среднего и высокого уровня. Поскольку производители встраиваемых систем обычно имеют исходный код своих операционных систем, потребность в полной виртуализации в этой области у них невелика. Вместо этого, преимущества паравиртуализации с точки зрения производительности обычно делают ее предпочтительной технологией виртуализации. Тем не менее, ARM и MIPS недавно добавили поддержку полной виртуализации в качестве опции IP и включили ее в свои последние высокопроизводительные процессоры и архитектуры, такие как ARM Cortex A15 MPCore и ARMv8 EL2. Другие различия между виртуализацией в серверных/настольных и встраиваемых средах включают требования к эффективному обмену ресурсами между виртуальными машинами, высокой пропускной способности, связи между виртуальными машинами с низкой задержкой, глобальному представлению о планировании и управлении питанием, а также детальному контролю информационных потоков.

Последствия для безопасности

Использование технологии гипервизора вредоносными программами и руткитами, устанавливающимися как гипервизор ниже операционной системы, известное как гиперджекинг, может затруднить их обнаружение, поскольку вредоносное ПО способно перехватывать любые операции операционной системы (например, ввод пароля) без обязательного обнаружения антивирусным программным обеспечением (поскольку вредоносное ПО работает ниже всей операционной системы). Утверждается, что реализация данной концепции была осуществлена в рутките SubVirt (разработанном совместно исследователями Microsoft и Университета Мичигана), а также в вредоносном пакете Blue Pill. Однако другие оспаривают эти утверждения, заявляя о возможности обнаружения руткита, основанного на гипервизоре. В 2009 году исследователи из Microsoft и Университета Северной Каролины продемонстрировали антируткит с гипервизорным слоем под названием Hooksafe, способный обеспечить универсальную защиту от руткитов, работающих в режиме ядра.