Использование B IOS int 0x15 / E820 для просмотра карты памяти - PullRequest
1 голос
/ 31 января 2020

Я занимаюсь программированием на x86. Я нахожусь в 16-битном режиме, и я эмулирую, используя qemu ... Я использую int 0x15 / ax = 0xE820 для просмотра карты памяти ... Используя монитор qemu (чтобы исследовать регион, в котором я написал карту), я получаю следующую информацию о карте памяти:

Start=0 Length= 0x9fc00 (type 1)
Start=0x9fc00 Length= 0x400 (type 2) 
Start=0xf0000 Length= 0x10000 (type 2)
Start=0x100000 Length= 0x7ee0000 (type 1)
Start=0x7fe0000 Length= 0x10000 (type 2)
Start=0xfffc0000 Length = 0x40000 (Type 2)

Итак, принадлежат ли сегменты, которых нет на этой карте (например, 0xA0000), как-то как MMIO? Я знаю, что области памяти типа 2 используются B IOS, et c. ( Start = 0x9fc00 Длина = 0x400 (тип 2) - это EDBA) Что происходит, когда я пишу в эти регионы?

Примечание: у меня нет типа 3 (ACPI), вероятно, потому что я пользуюсь qemu. В реальной аппаратуре я, скорее всего, тоже должен получить регионы типа 3. Это тоже ОЗУ?

1 Ответ

1 голос
/ 31 января 2020

Этот вызов B IOS полностью описан в INT 15h, AX = E820h - Карта адресов системы запросов , где это отмечено в разделе «Допущения и ограничения»:

  1. B IOS возвращает диапазоны адресов, описывающие память базовой платы и память ISA или PCI, смежную с этой памятью базовой платы.
  2. B IOS НЕ вернет описание диапазона для отображение памяти PCI-устройств, ISA Option ROM и ISA Plug & Play. Это связано с тем, что в ОС имеются механизмы для их обнаружения.
  3. B IOS будет возвращать определенные адресные дыры чипсета, которые не используются устройствами как зарезервированные.
  4. Диапазоны адресов, определенные для базы Устройства ввода-вывода с отображением в памяти платы (например, APIC) будут возвращены как зарезервированные.
  5. Все вхождения системы B IOS будут отображены как зарезервированные. Это включает область ниже 1 МБ, 16 МБ (если имеется) и в конце адресного пространства (4 гигабайта).
  6. Стандартные диапазоны адресов P C не будут сообщаться. Пример видеопамяти с физической скоростью от A0000 до BFFFF не будет описываться этой функцией. Диапазон от E0000 до EFFFF определяется базовой платой c и будет отображаться как соответствующий базовой плате.
  7. Вся нижняя память отображается как обычная память. Операционная система отвечает за обработку стандартных расположений ОЗУ, зарезервированных для конкретных целей, например: таблицы векторов прерываний (0: 0) и области данных B IOS (40: 0).

Статья в Википедии Обнаружение памяти (x86) добавить в свой раздел "B IOS Функция: INT 0x15, EAX = 0xE820" добавляет следующие правила:

  • После получения списка может оказаться желательным: отсортировать список, объединить смежные диапазоны одного типа, изменить любые перекрывающиеся области на наиболее ограниченный тип и изменить любые нераспознанные значения «типа» на тип 2.
  • Области памяти типа «ACPI reclaimable» типа 3 могут использоваться как (и в сочетании с) с обычными областями «доступной оперативной памяти», если вы закончили использовать таблицы ACPI, которые там хранятся (то есть могут быть «восстановлены»).
  • Типы 2, 4, 5 (зарезервированные, энергонезависимые, неправильные) ACPI отмечают области, которых следует избегать при выделении физической памяти.
  • Обрабатывать незарегистрированные области как типы 2 - зарезервированные .

Вывод: диапазоны, которые не найдены на карте, функциональный, возможно, занят памятью устройства, такой как видео.

...