Являются ли гипервизоры настоящими микроядрами?

Оба гипервизора, как первого, так и второго типа, работают с немодифицированными гостевыми операционными системами, но для достижения высокой производительности должны «прыгать сквозь обручи». Как уже было показано, в паравиртуализации используется другой подход, предусматривающий вместо этого модификацию исходного кода гостевой операционной системы.
Вместо выполнения служебных инструкций паравиртуализированная гостевая операционная система выполняет гипервызов. Получается, что гостевая операционная система работает наподобие пользовательской программы, совершая системные вызовы к операционной системе (гипервизору). Когда выбран этот маршрут, гипервизор должен определить интерфейс, состоящий из набора вызовов процедур, которыми может воспользоваться гостевая операционная система. Этот набор вызовов, который, по сути, не что иное, как программный интерфейс приложения (Application Programming Interface (API)), является при этом интерфейсом, предназначенным для использования гостевой операционной системой, а не прикладными программами.

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

Действительно, некоторые исследователи утверждают, то гипервизоры, видимо, нужно рассматривать как «настоящие микроядра» (Hand et al., 2005). Прежде всего следует заметить, что это весьма спорный вопрос и другие исследователи активно выступают против этого понятия, утверждая, что разница между ними изначально не носит фундаментального характера (Heiser et al., 2006). Третьи намекают, что по сравнению с микроядрами гипервизоры не могут быть приспособлены для построения безопасных систем, и рекомендуют расширить их функции, придав им такие функциональные возможности ядра, как передача сообщений и совместное использование памяти (Hohmuth et al., 2004). И наконец, есть такие исследователи, которые соглашаются с тем, что гипервизоры даже не являются продуктом «настоящих исследований операционных систем» (Roscoe et al., 2007). Поскольку пока никто ничего не сказал о верно (или неверно) составленных (настоящих) руководствах по операционным системам, мы посчитали, что будет правильно исследовать схожесть гипервизоров и микроядер немного глубже.

Основной причиной того, что первые гипервизоры эмулировали всю машину, было отсутствие доступа к исходному коду гостевой операционной системы (например, к коду Windows) или слишком большое количество вариантов такого кода (например,

у Linux). Возможно, в будущем API гипервизора или микроядра будет стандартизировано и последующие операционные системы будут спроектированы для вызова этого интерфейса вместо использования служебных инструкций. Тогда технология и использование виртуальных машин упростятся.

Разница между виртуализацией и паравиртуализацией показана на рис. 7.4. На нем изображены две виртуальные машины, поддерживаемые VT-оборудованием. На левой машине в качестве гостевой операционной системы используется немодифицированная версия Windows. При выполнении служебной инструкции оборудование инициирует системное прерывание с передачей управления гипервизору, который затем эмулирует эту инструкцию и возвращает управление. На правой машине используется версия Linux, модифицированная таким образом, что в ней больше не содержатся служебные инструкции. Вместо этого, когда у нее возникает потребность во вводе-выводе или внесении изменений в важные внутренние регистры (например, в регистр, указывающий на таблицы страниц), она для выполнения данной работы осуществляет вызов гипервизора точно так же, как прикладная программа совершает системный вызов в стандартной Linux.

Рис. 7.4. Настоящая виртуализация и паравиртуализация


На рис. 7.4 показан гипервизор, разделенный на две части пунктирной линией. На самом деле на оборудовании выполняется только одна программа. Одна ее часть отвечает за интерпретацию перехваченных служебных инструкций, в данном случае от Windows. А другая часть просто выполняет гипервызовы. На этой части имеется надпись: «Микроядро». Если гипервизор предназначен для запуска только пара- виртуализированных гостевых операционных систем, ему не нужно эмулировать служебные инструкции и мы имеем дело с настоящим микроядром, которое просто предоставляет самые основные службы, такие как диспетчеризация процессов и управление MMU. Граница между гипервизором первого типа и микроядром уже стирается и будет становиться все менее различимой по мере того, как гипервизоры будут приобретать все больше и больше функциональных возможностей и гипервызовов, что представляется вполне возможным развитием событий. Это спорная тема, но становится все более понятно, что программа, запущенная в режиме ядра непосредственно на оборудовании, должна быть невелика по размеру и надежна и состоять не из миллионов, а из тысяч строк кода.

По паравиртуализации гостевой операционной системы возникает ряд вопросов. Во- первых, если служебные инструкции заменены вызовами гипервизора, то как может операционная система работать на простом оборудовании? Ведь оборудование не понимает эти гипервызовы. Во-вторых, что, если на рынке имеется несколько гипервизоров, например VMware, Xen с открытым кодом, изначально созданный в Кембриджском университете, и Hyper-V компании Microsoft, и у каждого из них имеется в чем-то отличающийся API-интерфейс гипервизора? Как можно модифицировать ядро для запуска всех этих гипервизоров?

Решение было предложено в работе Amsden et al. (2006). В их модели ядро, когда ему нужно выполнить какие-нибудь служебные инструкции, модифицируется для вызова специальных процедур. Все вместе эти процедуры, названные интерфейсом виртуальной машины (Virtual Machine Interface (VMI)), образуют низкоуровневый слой, который взаимодействует с оборудованием или гипервизором. Эти процедуры разработаны с прицелом на универсальность и не привязаны к какой-либо конкретной аппаратной платформе или к какому-нибудь конкретному гипервизору.

Экземпляр такой технологии для паравиртуализированной версии Linux, названной ими VMI Linux (VMIL), показан на рис. 7.5. Когда VMI Linux запускается непосредственно на оборудовании, она должна быть подключена к библиотеке, которая, как показано на рис. 7.5, а, выдает необходимые для работы настоящие (служебные) инструкции. При работе в режиме гипервизора, например VMware или Xen, гостевая операционная система подключается к другим библиотекам, совершающим соответствующие (и уже другие) гипервызовы, направляемые базовому гипервизору. Таким образом, ядро операционной системы сохраняет переносимость при успешно и эффективно взаимодействующем с ним гипервизоре.

Рис. 7.5. VMI Linux, работающая: а — непосредственно на оборудовании; б — на VMware; в — на Xen


Относительно интерфейса виртуальной машины были внесены и другие предложения. Одно из популярных предложений называется paravirt ops. Концептуально идея похожа на то, что уже было описано ранее, но отличается в деталях. По сути, группа поставщиков Linux, включающая такие компании, как IBM, VMware, Xen и Red Hat, выступила в поддержку независимого от конкретного гипервизора интерфейса для Linux. Интерфейс, включенный в основную линейку ядра, начиная с версии 2.6.23, позволял ядру взаимодействовать с тем гипервизором, который управлял физическим оборудованием.

7.3.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Являются ли гипервизоры настоящими микроядрами?:

  1. Источниками ошибок являются
  2. Навыки установления межличностных отношений являются базовыми
  3. Статья 434. Произведения, которые не являются объектами авторского права
  4. Кроме содержания, преступное действие имеет внутреннюю структуру, главными компонентами которой являются:
  5. Наилучшим регулятором продолжительности разрядки являются ваши ощущения: избавляйтесь от негативной энергии столько времени, сколько заблагорассудится.
  6. Настоящее
  7. ВНЕВРЕМЕННОЕ НАСТОЯЩЕЕ
  8. Если заполнены все наши резервуары любви, то наши желания являются одновременно и желаниями Бога.
  9. Настоящее время.
  10. Линия настоящего 2-5-8
  11. Настоящая проблема
  12. Настоящий момент
  13. Жить настоящим?
  14. Счастье в настоящем
  15. Настоящая проблема
  16. ПОЧЕМУ МЫ НЕ УМЕЕМ ЖИТЬ НАСТОЯЩИМ