Цитата:
-- управление памятью: он же должен физическую память разделять между несколькими ВМ, а значит, должен поддерживать свою собственную виртуальную память и эмулировать нужным образом соответствующее железо для ВМ, поскольку оси на ВМ тоже обычно имеют свою виртуальную память;
Рекомендую посмотреть какой API предоставляет KittenOS для Palacios'а, там всего около десятка функций.
Для виртуализации памяти достаточно функций ОС для выделения/освобождения физически непрерывных кусков + функций для преобразования между HPA и HVA (Host {Physical/Virtual} Addresses). Правда, со стороны гипервизора ещё нужны функции для построения EPT/NPT таблиц, но куда ж без них.
> эмулировать нужным образом соответствующее железо для ВМ,
Как у вас там в 2005, хорошо живётся? А у нас 2012, shadow page tables иногда используются, но обычно и без них неплохо живётся.
Ещё могут понадобиться функции для разбора гостевых таблиц страниц, но в минимальном варианте можно и без них.
Страшное начинается когда гостю разрешают использовать DMA, но тоже терпимо, ибо всё уже изобретено до нас.
В общем, я к тому что большая часть управления памятью всё же делается функциями ОС.
Цитата:
-- управление процессами и потоками: по сути, каждая ВМ -- это отдельный процесс с несколькими потоками; надо разделять физически имеющиеся процессоры между несколькими ВМ, переключая их по мере надобности;
Если правильно спроектировано, то можно, опять-таки, обойтись процессами/потоками ОС (даже без потоков), разве что для полного счастья нужны функции для установки affinity.
Цитата:
-- управление вводом-выводом: не всегда есть возможно выделить то или иное устройство в полное распоряжение определённой ВМ, тем более навсегда; значит, необходимо самому заниматься вводом-выводом и уметь эмулировать некоторые устройства для ВМ.
Звучит как слова человека, который в недрах VMM ничего не писал, а знает только по-наслышке. Или писал, но рассказывать пытается уж очень общо.
Хуки на порты ввода/вывода и MMIO делаются средствами гипервизора, от ОС требуется функция для хуканья прерываний.
Виртуальные устройства - отдельный разговор, но к функциям ОС они отношения не имеют.
Устройства, которые попеременно то у хостовой, то у гостевой ОС - ужасный и редкий (редко используемый) гемор (из той же серии что сохранение состояний устройств, живая миграция с проброшенными устройстами и т.д.), про который в рамках этого треда лучше не вспоминать.
Цитата:
Да, уже нашёл, что он не только для линукс, но и для любого multiboot-ядра, и таким образом самый простой способ. Но несмотря на мультибутность ни TVMM, ни MAVMM у меня не запустились.
У Bochs есть похожая вещь, называется 32-bit OS load hack, можно ещё использовать всякие фичи seabios. И да, могло не запуститься из-за версии qemu, не поддерживающей вложенную виртуализацию/эмуляцию виртуализации.
Вообще, в таких делах самособранный trunk Bochs'а - наше всё.
Хоть отловленные мной баги и никак не помечены что найдены мной.. ЧСВ--Цитата:
Но они ещё пока не анонсированы?
Да вот в рамках дипломной работы пилил в Palacios поддержку exitless interrupt handling (можно нагуглить соотв. статью и почитать, она клёвая, но авторы не выкладывают сорцы и сделали только однопроцессорный вариант, так что мне было поручено запилить свой). Даже успел вовремя сделать работающий вариант, но его ещё пилить и пилить, а потом переносить в KVM, эхх.
Цитата:
А на чём упор в этой ветке?
На практическом использовании для виртуализации HPC. Ну или хотя бы исследовании улучшений для практического использования. Но допилено реально много мелких вещей, которые выявляются при тестировании (которое авторам делать было в т.ч. некогда, тут иногда им даже сочувствуешь).