Программная архитектура процессора. Поддержка виртуальных машин 09.12.2015 Вопрос № 27 Поддержка виртуальных машин Общий обзор Что такое виртуальная машина? Виртуальная машина – это программная среда исполнения, которая «выглядит» для операционной системы как отдельный независимый компьютер (возможно, многопроцессорный) o Т.е. операционные системы и драйверы взаимодействуют с компьютером «прозрачно», как если бы они исполнялись на оборудовании непосредственно Процессор Intel 64 предоставляет механизм создания и исполнения виртуальных машин VMX (Virtual Machine eXtension) o CPUID.1:ECX.VMX[bit 5] = 1 Виртуальная среда • • Физическая среда Прикладные задачи Операционная система (ОС) Монитор виртуальной среды Компьютер Компьютер ОС 1 ОС 2 ОС 3 Состояния процессора • • Процессор может находиться в двух состояниях o non-VMX – обычное (изученное в курсе) o VMX – состояние поддержки виртуальной среды У состояния VMX есть два режима работы o VMX root operation – предназначен для исполнения монитора виртуальной среды (VMM – virtual-machine monitor). В этом режиме процессор имеет полный доступ к оборудованию. o VMX non-root operation – предназначен для исполнения «гостевого» программного обеспечения (VM - виртуальных машин). В этом режиме процессор имеет ряд ограничений, но их наличие невозможно установить программным путем даже в нулевом кольце. Digital Design 1 Программная архитектура процессора. Поддержка виртуальных машин 09.12.2015 Диаграмма переходов VMX operation Команда VMXON • • VM-entry VMM VM-exit Guest n VM-exit VM-entry Guest 0 Команда VMXOFF Вход и выход в состояние VMX (только в режим root operation) осуществляется командами VMXON и VMXOFF Переход от монитора (VMM) к гостевому программному обеспечению и обратно осуществляется процедурами VM-entry и VM-exit VMCS В состоянии VMX каждый виртуальный процессор определяется структурой данных VMCS (virtual machine control data structure) VMCS имеет размер до 4K и содержит следующие области o Область состояния гостевого ПО (Guest State Area). Загружается при VM-entry и сохраняется при VM-exit o Область состояния VMM (Host State Area). Загружается при VM-exit. o Область управления VM (VM-execution control fields). Определяет поведение процессора в режиме non-root. В частности, условия запуска VM-exit o Область управления VM-exit (VM-exit control fields). Управляет ходом VM-exit o Область управления VM-entry (VM-entry control fields). Управляет ходом VM-entry o Область информации VM-exit (VM-exit information fields). Содержит информацию о причине VM-exit. Только для чтения. • • Область состояния гостевого ПО (Guest State Area) • • Предназначена для хранения состояния виртуального процессора o Состояние процессора загружается из этой области при исполнении VM-entry o Состояние процессора сохраняется в эту область при исполнении VM-exit Содержит следующую информацию o Состояние регистров (CR0, CR3, CR4, RSP, RIP, сегментные, GDTR, IDTR, TR, некоторые MSR’s, …) o Состояние процессора (активен, исполняет HLT, ждет startup IPI, отключен по критической ошибке) o Значение таймера виртуализации, которое будет загружено при следующем VM-entry. o Другое… Digital Design 2 Программная архитектура процессора. Поддержка виртуальных машин 09.12.2015 Область состояния VMM (Host State Area) Предназначена для хранения состояния монитора виртуальной среды o Состояние процессора загружается из этой области при исполнении VM-exit Содержит следующую информацию o Состояние регистров (CR0, CR3, CR4, RSP, RIP, RFLAGS, сегментные, GDTR, LDTR, IDTR, TR, некоторые MSR’s, …) o Некоторая дополнительная информация, зависящая от конкретной модели процессора • • VM-entries • • Для запуска процедуры VM-entry предназначены команды VMLAUNCH and VMRESUME Действия, выполняемые процедурой VM-entry определяются состоянием области VM-entry control fields, которая содержит: • Список MSR’s, которые нужно загрузить и адрес области, где они хранятся • Флаги определяющие необходимость загрузки регистров отладчика (DR) • Флаг, определяющий работу гостевого ПО в 64- или 32разрядном режиме • Данные, позволяющие войти в гостевое ПО, с использованием механизма Event Injection • Этот механизм позволяет произвести возврат в гостевое ПО как возврат из прерывания (исключения) VM-exits • • В отличие от VM-entries, которые запускаются монитором с помощью специальных команд, VM-exits выполняются в случае наступления специальных событий при исполнении гостевого ПО o Исполнение некоторых команд o Исключения o Прерывания o Переключение задач o Обнуление таймера VMX (специальный счетчик, значение которого постоянно уменьшается) o Поступление внешних сигналов VM-exits происходят «незаметно» для гостевого ПО o Этим они похожи на прерывания, только прерванным может оказаться и ядро ОС, даже в процессе обработки прерываний Digital Design 3 Программная архитектура процессора. Поддержка виртуальных машин 09.12.2015 Команды, вызывающие VM-exit Попытка исполнения некоторых команд гостевым ПО всегда вызывает VM-exit o CPUID, INVD, все команды VMX, некоторые другие команды Некоторые команды вызывают VM-exit в соответствии с условиями, заданными в области VM-execution control fields o LGDT, LIDT, LLDT, LTR, SGDT, SIDT, SLDT, STR o MOV в управляющие регистры CR o PAUSE, MWAIT, HLT, RDRAND, WBINVD, CLFLUSH o RDTSC, RDTSCP Если VM-exit не вызывается, то к TSC может быть добавлена знаковая константа, хранящаяся в VM-execution control fields Команды записи и чтения в порты IN, INS/INSB/INSW/INSD, OUT, OUTS/OUTSB/OUTSW/OUTSD вызывают VM-exit в соответствии с битовой маской, определяющей условия для каждого порта • • • Преобразование адреса • Современная архитектура VMX имеет два механизма, позволяющих оптимизировать управление памятью при переключении виртуальных машин o Virtual Processor Identifiers (VPIDS) – позволяет сохранять TLB и внутренний кэш, хранящий информацию о структуре страниц. Это достигается путем использования уникального идентификатора для каждого виртуального процессора и сопоставления с каждым из них своей области кэш o The Extended Page-Table mechanism (EPT) – позволяет рассматривать физические адреса режима non-root, как «гостевые физические адреса» и преобразовывать их в реальные адреса физической памяти • Прерывания могут исполняться внутри гостевого программного обеспечения (т.е. без запуска VM-exit) Для обеспечения независимости виртуальных машин требуется виртуализация не только процессора но и контроллера прерываний (APIC) Для каждого виртуального APIC создается 4KB структура (Virtual APIC Page) o Адрес этой структуры находится в VMCS o Virtual APIC Page используется для хранения состояния APIC и виртуализации его регистров и виртуализации MSR’s, связанных с управлением прерываниями Виртуализация прерываний • • Архитектура виртуализации не столько сложна, сколько объемна А наш курс закончен Digital Design 4