MVM/DOS/Win16 personality
Содержание
MVM/DOS/Win16-personality
Это инфраструктура для запуска виртуальных машин с модифицированными/немодифицированными операционными системами.
MVM-сервер
MVM-сервер — это центральный сервер MVM-personality, инфраструктуры для запуска нескольких виртуальных машин поверх микроядра L4. Он почти отделён от персоналии OS/2, но может управляться программами OS/2 через API DosOpenVDD/DosCloseVDD/DosRequestVDD.
Таким образом, MVM-сервер предоставляет некоторые интерфейсы другим ОС-personality для управления ими. Кроме того, он запускает виртуальные машины, которые выполняются в контексте монитора виртуальных машин, работающего с гостевой ОС (например, DOS). Среда виртуальной машины определяется загруженными VDD1. MVM-сервер загружает VDD, которые являются своего рода плагинами.
Виртуальные драйверы устройств (VDD)
VDD — это плагин для MVM-сервера, который может взаимодействовать с внешними программами через API запросов (DosRequestVDD для программ OS/2). С другой стороны, с точки зрения виртуальной машины, VDD эмулирует некоторые сервисы BIOS/Option ROM и аппаратные устройства гостевой платформы. Он устанавливает обработчики прерываний, перехватывает доступ к портам ввода-вывода или регистрам MMIO изнутри гостевой ОС. VDD реализует свои сервисы на основе API помощников VDD, обслуживаемого MVM-сервером. Он экспортирует API помощников для VDD через MVDM.DLL.
Изначально MV(D)M использовались для эмуляции машины 8086 с BIOS и DOS/Win 3.1. Но сейчас наблюдается тенденция: многие ОС имеют виртуальные машины на уровне ядра, такие как KVM в Linux или VirtualPC в WinNT. Наша MVM-personality — собственное решение того же класса, но оно не такое монолитное, как qemu/kvm — оно разложено на несколько частей, в лучших традициях проектирования решений IBM. VDD — это плагины для MVM-сервера, позволяющие расширять среду MVM. Это загружаемые модули (DLL).
Кроме того, как было сказано ранее, для совместного использования экрана приложениями OS/2 и приложениями других personality IBM создала решение «Seamless WinOS/2». Это возможность для программ Win 3.1 использовать один экран с программами OS/2 PM.
Это достигается с помощью специальных VDD, таких как VVIDEO (VVGA, VSVGA и т. д.), реализующих поддержку видеорежимов в окне DOS (или в полноэкранном режиме). Окно DOS реализовано как специальная DLL (pmvdmp.dll), которая загружается PM. Она взаимодействует с виртуальной машиной через DosRequestVDD и реализует видефункции через вызовы GPI (для оконного режима, то есть это PM-приложение, основанное на VIO Shield (pmviop.dll), работающее через драйверы BVH, такие как bvhwndw.dll для оконных сессий OS/2 и DOS, или bvhvga.dll+bvhsvga для полноэкранных сессий OS/2 или DOS).
Для оконных сессий WinOS/2 существовало решение с использованием так называемого PM shield (seamless.dll) и WinOS/2 shield (winsheld.exe). Первый — это «аватар» приложения Windows в мире OS/2 PM. И наоборот, WinOS/2 shield — это представитель PM-приложения в мире WinOS/2.
Также существует второе решение, основанное на модели видеодрайвера GRADD. Оно работает через VVMI (vmanwin.sys в Intel OS/2). Это VDD, связанный с взаимодействием видеодрайвера Windows (ifgdi2vm.drv для полноэкранного режима, isgdi2vm.drv для бесшовного режима) с VMAN2 из GRADD. Специальный поток в VMAN опрашивает драйвер VVMI для связи с драйвером Windows. Таким образом, драйвер Windows является универсальным, но взаимодействует с «настоящим» драйвером. Это приводит к тому, что WinOS/2 и OS/2 PM совместно используют один экран через доступ к общему видеодрайверу. См. раздел, посвящённый GRADD, для более подробной информации о совместном использовании одного экрана/видеодрайвера несколькими графическими движками.
Монитор виртуальных машин
VMM3 — это программа, реализующая среду гостевой аппаратной платформы с помощью VDD. Она поддерживает контексты всех виртуальных машин и обрабатывает ловушки, перенаправляя их нужному VDD, загружает IST4 для различных наборов инструкций процессора, использует аппаратные функции эмуляции процессора, такие как VM86, AMD SVM, Intel VT-x и т. д.
Он поддерживает раскладку адресного пространства приложения виртуальной машины, загружает прошивку (для BIOS может использоваться SeaBIOS) и ядро эмуляции DOS.
Ядро эмуляции DOS (doskrnl)
Ядро эмуляции DOS — это специальное перехостленное (паравиртуализированное) ядро DOS, работающее через сервисы OS/2 (или PN5). Например, API файловой системы int 21h реализованы через файловые API OS/2 (или PN). Доступ к API OS/2 осуществляется через SVC API (supervisor call?), который представляет собой ловушку инструкции HLT, за которой следует номер вызова и инвертированный номер вызова. Кроме того, DOSKRNL предоставляет специфичный для MVM API для приложений DOS. См. документацию DOSKRNL для получения дополнительной информации. Использовать ядро эмуляции DOS не обязательно. Можно использовать стандартное ядро DOS (например, FreeDOS), но доступ к файловым системам хоста будет ограничен.
Транслятор набора инструкций (IST)
IST — это DLL, эмулирующая инструкции гостевого оборудования через инструкции хост-процессора. Она экспортирует набор точек входа, каждая из которых соответствует эмулируемой инструкции.
Аналогичный компонент существует в QEMU, но там он статически слинкован с бинарным файлом эмулятора.
VM86 на Intel и аппаратная виртуализация
Некоторые процессоры реализуют специальные режимы совместимости (VM86 позволяет создавать специальную задачу в защищённом режиме, которая эмулирует виртуальный процессор i8086) или специальные инструкции для помощи в создании мониторов виртуальных машин (например, «hypercall» для переключения контекста на гипервизор, выполнения его сервиса и выхода из режима гипервизора). Также самые новые процессоры реализуют IOMMU (аппаратную поддержку совместного использования оборудования).
Эти расширения можно использовать для запуска немодифицированных ОС поверх гипервизора (это поддерживается в новых версиях Xen, VBox, VMWare, VPC).
Микроядра как гипервизоры
Микроядра и гипервизоры — очень похожие вещи. Микроядра реализуют аналогичные функции. Например, микроядро Fiasco.OC поддерживает SVM и VT-x и позволяет запускать немодифицированный Linux в очень тонких виртуальных машинах. Эту возможность можно использовать и в нашей персоналии MVM.
Другие ядра
Возможен перехостинг (паравиртуализация) других ядер, таких как CP/M-86, в среду MVM. Это может быть достигнуто через интерфейс SVC.
API
- SVC API
- BIOS API
1 Virtual Device Drivers — виртуальные драйверы устройств.
2 Video Manager — видеоменеджер.
3 Virtual Machine Monitor — монитор виртуальных машин.
4 Instruction Set Translator — транслятор набора инструкций.
5 Personality Neutral — нейтральный к персоналии.
| OSFree | |
|---|---|
| osFree | Архитектура • План работ • Компоненты • Используемые проекты • Экраны • FreePM • L4 • Скриншоты |
| Загрузчик | [ Последовательность загрузки: поток выполнения • изменение карты памяти ] • Загрузочный сектор • L4Ka::Kickstart |
| Personalities | Win16 personality • MVM/DOS/Win16 personality |
| Разработка | Получение исходных кодов • Сборка • Отладка • Отправка отчетов |
| API | TPCrt • FamilyAPI • Win16API • VIO API • MVM API |
| Сообщество | IRC |
| OS/2 | Presentation Manager • IFS • Петиции к IBM |