Как реализовать прямое сопоставление памяти между гостем и хостом в виртуальной машине?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как реализовать прямое сопоставление памяти между гостем и хостом в виртуальной машине?

Сообщение Anonymous »

Я работаю над своей виртуальной машиной процесса, которая работает как процесс хост-системы. Цель состоит в том, чтобы эмулировать целевую ISA гостевого программного обеспечения и обеспечить бесшовную среду для работы гостя.
Я планирую реализовать две схемы отображения образов памяти:
  • Непрямой — через таблицу трансляции, которая связывает каждый гостевой виртуальный адрес с конкретным виртуальным адресом хоста и std::allocator.
  • Прямой — без таблицы и накладных расходов на поиск. >
Моей идеей было выделить непрерывный блок памяти, используя, например, calloc. Найдите адрес первой инструкции гостевого сегмента данных, определите разницу между сегментом данных и выделенным блоком. Каждый гостевой адрес + разница = соответствующий адрес хоста.
Я не уверен, что это правильный подход, и если да, можете ли вы предоставить эффективный и безопасный метод непрерывного выделения памяти?
РЕДАКТИРОВАТЬ:
  • Хост: AMD64, Windows 11 >21H2;
  • Гость: ARM>v8, Windows 11 >21H2/Произвольный дистрибутив Linux (позже в виде отдельного модуля, реализующего специфические функции Linux);
Два основных метода эмуляции — прямая/косвенная интерпретация (для профилирования) и двоичная трансляция (для оптимизации).

Подробнее здесь: https://stackoverflow.com/questions/792 ... host-in-vm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»