Я много читал о гипервизорах на голом железе, но так и не понял, как они взаимодействуют с ОС, которую они размещают.
Предположим, у вас есть Unix на голом железе. В пользовательском режиме вы не можете прикоснуться к внутренним компонентам ОС или повлиять на них. Вы выполняете задачи с помощью системного вызова, который попадает в ловушку, переводит машину в режим ядра, а затем выполняет эту работу за вас. Например, в C вы можете malloc () создать группу, а затем в конечном итоге исчерпать изначально выделенную память. Если память мне не изменяет, malloc - когда он знает, что не хватает памяти - должен вызвать системный вызов, который, как мне кажется, называется break (). Находясь в режиме ядра, таблица страниц вашего процесса может быть расширена, после чего она вернется, и у malloc () будет необходимая дополнительная память (или что-то в этом роде).
Но если у вас есть Unix поверх гипервизора без оболочки, как это на самом деле происходит? Казалось бы, гипервизор должен иметь фактические таблицы страниц для всей системы (даже для ОС). Таким образом, Unix не может находиться в режиме ядра при выполнении системного вызова Unix, иначе он может испортить работу других операционных систем, работающих одновременно. С другой стороны, если он работает в пользовательском режиме, как код, реализующий break, когда-либо позволит гипервизору узнать, что ему нужно больше памяти, без перезаписи кода Unix?