Например, у меня есть хост-ОС (скажем, Ubuntu) с включенным KVM. Я запускаю виртуальную машину с QEMU для запуска гостевой ОС (скажем, CentOS). Говорят, что для хост-ОС эта виртуальная машина является просто процессом. Таким образом, с точки зрения хоста, он обрабатывает сбои страниц как обычно (например, выделяет фрейм страницы по мере необходимости, при необходимости меняет страницы на основе активных / неактивных списков).
Вот вопрос и мое понимание. В гостевой ОС, поскольку она все еще является полноценной ОС, я предполагаю, что в ней все еще есть все механизмы, обрабатывающие виртуальную память. Он видит некоторую виртуализированную физическую память, предоставленную QEMU. Под виртуализированной физической памятью я подразумеваю, что гостевая ОС не знает, что она находится в виртуальной машине, и все еще работает, как на реальной физической машине, но то, что она имеет, действительно является абстракцией, данной QEMU. Таким образом, даже если ей выделен фрейм страницы, если он отсутствует в таблице страниц гостя, гостевая ОС все равно вызовет сбой страницы, а затем отобразит некоторую страницу во фрейме. Что еще хуже, может быть двухстраничный сбой, когда гость сначала выделяет несколько фреймов страницы при сбое страницы, что вызывает сбой страницы в хост-ОС.
Однако я также слышал что-то вроде мелкой (или теневой) страницы таблица, которая, кажется, могла бы оптимизировать эту ненужную ошибку двойной страницы и проблему таблицы двойной страницы. Я также рассмотрел некоторые другие реализации ядра, в частности уникальные ядра, например, OSv , IncludeOS , et c. Я не нашел ничего связанного с ошибкой страницы и механизмами таблицы страниц. Я видел некоторые символы, такие как page_fault_handler
, но не такие огромные, как в коде ядра Linux. Кажется, в этих реализациях unikernel управление памятью не имеет большого значения. Поэтому я предполагаю, что QEMU / KVM и некоторые технологии Intel для виртуализации уже справились с этим.
Какие-нибудь идеи в этой теме c? Или, если у вас есть хорошие ссылки / документы / ресурсы по этой проблеме, или некоторые советы будут очень полезны.