Тeхнологии виртуализации Воронин Дмитрий План • • • • • Что такое виртуализация Модели виртуализации Как это реализовать Динамическая трансляция Аппаратная поддержка виртуализации 2 Что такое виртуализация • Сокрытие физических ресурсов от их потебителей. Обычно потребителями являются операционные системы. • Изоляция окружения одного потребителя от другого. 3 Модели виртуализации • Полная виртуализация • Пара-виртуализация • Виртуализация на уровне операционной системы 4 Полная виртуализация • Использует подход разделения на guest/host ОС. • Каждый гость исполняется на виртуальной имитации физических ресурсов. • Гостевая ОС иполняется без модификаций кода. • Гипервизор исполняется на реальных физических ресурсах и управляет запросами от гостевой ОС к физическим ресурсам (Virtual Machine Monitor, VMM). • Гипервизор специальным образом исполняет все инструкции гостевой ОС, которые требуют системного уровня привелегий (модифицируют состояние CPU). • Либо использует поддержку виртуализации в архитектуре, либо бинарную трансляцию. • Примеры: VMWare, Virtual PC, Parallels, VirtualBox, QEMU+KQEMU, KVM. 5 Паравиртуализация* • Использует подход разделения на guest/host OC. • VMM модифицирует код гостевой ОС. • Примеры: Xen, UML (User Mode Linux), Sun Logical Domains *Впервые термин возник в проекте Denali, а после того, как это слово применили исследователи из компьютерной лаборатории Кембриджского университета в проекте Xen, оно окончательно утвердилось в терминологии. Приставка «пара» в слове паравиртуализация ничего не обозначает, просто авторам данной идеи понадобился новый термин. 6 Виртуализация на уровне ОС • Не использует подход guest/host. • Хост исполняет ядро ОС и передает функциональность ОС гостям. • Гости должны использовать одно и то же ядро, что и хост. Но могут использовать различные дистрибутивы. • Необходима изоляция окружения гостя. • Одни и те же исполняемые файлы и библиотеки могут существовать в одном экземпляре. • Примеры: Virtuozzo/OpenVZ, Solaris Zones, FreeBSD jails. 7 Как это реализовать Хочется запускать больше одной гостевой ОС на одном хосте Guest OS 1 apps Guest OS N apps Layer 3 Guest OS 1 Guest OS N Layer 2 VMM 1 VMM N Layer 1 Host OS + HyperVisor Layer 0 Hardware Для защиты нужно использовать аппаратные методы защиты памяти. В идеале: Layer3 < Layer 2 < Layer 1 < Layer 0 8 Как это реализовать Проблема Гостевые ОС хотят: - Распределять физическую оперативную память. - Управлять системными ресурсами CPU. - Взаимодействовать с периферийным оборудованием. Как при этом не сломать контекст хостовой ОС? Решение Нужно виртуализовать все эти понятия для гостевых ОС. 9 Виртуализация оперативной памяти • Пользовательскому процессу доступно только виртуальное адресное пространство. • Нужно создать 2 пространства. В первом будет VMM (Full) и Host OS, а во втором VMM(Base) и Guest OS. Virtual Address Space 1 Virtual Address Space 2 switch to Guest VMM Host OS VMM switch to Host 10 Guest OS Виртуализация оперативной памяти Для того, что эта модель работала, нужно: • Исполнить специальным образом код гостевой системы, который занимается управлением физической памятью (соотв. сист. рег., обработка page fault). • Обеспечить синхронизацию гостевой структуры страниц (Guest Paging) и реальной структуры страниц (Shadow Paging), которое используется при работе гостевой ОС. • Защитить память VMM от памяти гостевой ОС (разграничить доступ к различным страницам при помощи уровней защиты). 11 Виртуализация системного контекста CPU Чтобы работала схема виртуализации контекста CPU, нужно: • Специальным образом исполнять код гостевой системы, который читает и изменяет состояние гостевого CPU. • Читать состояние контекста можно без прерывания работы гостевой ОС (для оптимизации). • Записывать определенные значения можно без прерывания работы гостевой ОС (для оптимизации). 12 Виртуализация периферии • Периферийные ус-ва могут быть как реальными (сетевая карта, видео память, звук. ус-во), так и виртуальными (виртуальный hard drive/cd drive/com port в виде файла в хостовой состеме). • Нужно специальным образом исполнять код гостевой системы, который взаимодействует с периферией (реализация устройства в виде отдельных процессов, которые периодически опрашивают состояния вирт. физ. ресурсов вирт. физ.память, вирт. сист. регистры). 13 Динамическая трансляция • Трансляция кода гостевой ОС в терминах блоков (линейных участков). • Связывание блоков (прямые условные/безусловные переходы, переходы по косвенности). Удаление блоков при удалении соотв. страницы кода из гостевой структуры страниц. • Отслеживание самомодифицирующегося кода (транслированный, который уже есть в кэше, нужно выкинуть при записи в соотв. гостевой код). • Специальное исполнение "запрещенного" кода. Подмена инструкций при трансляции. 14 Аппаратная поддержка виртуализации • Новый режим привелегий (virtual mode), спец. инструкции для переключение в/из virt.mode. • Аппаратное сохранение/восстановление состояния CPU при переключении режимов. Недостаток в том, что этот процесс очень ресурсоемок, и происходит при каждом переключении. • Аппаратный выход из virt.mode при возникновении прерываний (можно настраивать конкретные прерывания). 15