Изоляция памяти ОС - PullRequest
       62

Изоляция памяти ОС

0 голосов
/ 15 августа 2011

Я пытаюсь написать очень тонкий гипервизор, который будет иметь следующие ограничения:

  • запускает только одну операционную систему за раз (т. Е. Нет параллелизма ОС, нет разделения оборудования, нет возможностипереключиться на другую операционную систему)
  • она должна иметь возможность только изолировать некоторые части ОЗУ (выполнить некоторые преобразования памяти за ОС - скажем, у меня 6 ГБ ОЗУ, я хочу Linux / Winне использовать первые 100 МБ, посмотрите только 5,9 МБ и используйте их, не зная, что за этим стоит)

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

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

То, что вы ищете, уже существует в аппаратном обеспечении!

Это называется IOMMU [1]. В основном, как таблицы страниц, добавление слоя перевода между выполненными инструкциями и фактическим физическим оборудованием.

AMD называет его IOMMU [2], Intel называет его VT-d (пожалуйста, google: "intel vt-d". Я не могу опубликовать более двух ссылок).

[1] http://en.wikipedia.org/wiki/IOMMU
[2] http://developer.amd.com/documentation/articles/pages/892006101.aspx

1 голос
/ 29 марта 2012

Вот несколько предложений / советов, которые обязательно несколько неполны, поскольку разработка гипервизора с нуля является сложной задачей.

Сначала сделайте ваш гипервизор "совместимым с несколькими загрузками".Это позволит ему находиться как обычная запись в файле конфигурации загрузчика, например, /boot/grub/menu.lst или /boot/grub/grub.cfg.

. Вы хотите выделить 100 МБ в top памяти, например, от 5,9 ГБ до 6 ГБ.Поскольку вы упомянули Windows, я предполагаю, что вы заинтересованы в архитектуре x86.Долгая история x86 означает, что первые несколько мегабайт заполнены всевозможными сложностями устаревших устройств.В Интернете есть много материалов о «дыре» между 640 КБ и 1 МБ (много информации в Интернете подробно).Старые устройства ISA (многие из которых до сих пор сохранились в современных системах с «чипами Super I / O») ограничены выполнением DMA с первыми 16 МБ физической памяти.Если вы попытаетесь встать между Windows или Linux и их отношениями с этими первыми несколькими МБ ОЗУ, вам придется столкнуться с гораздо большей сложностью.Оставьте это на потом, как только вы загрузите что-то.

Когда физические адреса приближаются к 4 ГБ (2 ^ 32, следовательно, физическая память ограничена в базовой 32-разрядной архитектуре), все снова становится сложным,многие устройства отображаются в память в этом регионе.Например (ссылаясь на другой ответ), IOMMU, который Intel предоставляет с помощью своей технологии VT-d, как правило, привязывает свои регистры конфигурации к физическим адресам, начинающимся с 0xfedNNNNN.

Это вдвойне верно для системы с несколькими процессорами,Я бы посоветовал вам начать с однопроцессорной системы, отключить другие процессоры из BIOS или, по крайней мере, вручную настроить гостевую ОС, чтобы не включать другие процессоры (например, для Linux, включите 'nosmp' в командной строке ядра - например,в вашей /boot/grub/menu.lst).

Далее узнайте о карте "e820".Опять же, в Интернете много материала, но, пожалуй, лучшее место для начала - это загрузить систему Linux и посмотреть в верхней части вывода «dmesg».Это то, как BIOS сообщает ОС, какие части физической памяти «зарезервированы» для устройств или других специфичных для платформы BIOS / прошивок (например, для эмуляции клавиатуры PS / 2 в системе только с портами USB I / O).).

Один из способов для вашего гипервизора «спрятать» свои 100 МБ от гостевой ОС - добавить запись в карту e820 системы.Быстрый и грязный способ начать работу - использовать параметр командной строки ядра Linux "mem =" или флаг Windows boot.ini / bcdedit "/maxmem".

Есть много других деталей и вещейвы, вероятно, столкнетесь (например, процессоры x86 запускаются в 16-битном режиме при первом включении), но если вы сделаете небольшую домашнюю работу над перечисленными здесь, то, надеюсь, вы будете в лучшем положении, чтобы попроситьвопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...