17
Virtualization plugins — crosscontext API for third-party
Андрей Симановский

Виртуальная машина состоит из трех основных компонентов: прикладная программа vm_app (обеспечивает back-end виртуализации устройств, получает ресурсы хостовой системы), монитор виртуальной машины VMM (непосредственно контролирует поведение гостевой системы, обеспечивает front-end виртуализации устройств, работает либо в собственном адресном пространстве, либо в пространстве ядра хостовой системы), хостовый ядерный модуль hyp_module (обеспечивает связь между vm_app и VMM, предоставляет VMM-у низкоуровневые функции хостовой ОС)

В данный момент номенклатура виртуальных устройств, доступных гостевой системе, ограничена следующими типами: процессор, память, видеокарта (с поддержкой 3D), сетевая карта (Ethernet), HDD, CD/DVD, FDD, клавиатура/мышь, звуковая карта, последовательный порт, принтер, USB (прокидывание USB устройств в гостевую систему). Расширение указанной номенклатуры возможно лишь путем изменения исходного кода виртуальной машины.

Задачи:

1) Создать механизм, позволяющий в дальнейшем без изменения кода виртуальном машины динамически добавлять в нее плагины (на уровное vm_app или на уровне VMM, или на обоих), которые реализовывают любые типы виртуальных устройств, эмулирующие реальный аппаратный стандарт (например PCI), или поддерживающие исключительно паравиртуализацию.

2) Для созданного механизма плагинов придумать и реализовать свое виртуальное устройство, расширяющее функциональность виртуальной машины или заметно превосходящее по быстродействию (или функциональности) имеющиеся. Например, реализация плагина для отладки гостевой системы различными отладчиками (WinDBG, LLDB, GDB и т.п.)