E820

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

E820 — программный интерфейс ACPI для получения карты оперативной памяти компьютера. Официально доступен только в системах на базе архитектуры IA-PC (имя архитектуры из спецификации) и только в реальном режиме. На начало 2014-го года данный интерфейс позволяет получить наиболее полную картину по памяти (не только общий объём, но и доступные операционной системе адресные пространства). До этого использовались интерфейсы INT-15H 88H и INT-15H E801. Они так же до сих пор доступны, но исключительно для обратной совместимости.

Актуальную информацию по данному интерфейсу можно получить из спецификаций по ACPI (ссылка указаны в конце статьи). Например, в последней на начало 2014-го года версии спецификации 5.0, данная информация располагается в разделе «15 System Address Map Interfaces».

Использование[править | править вики-текст]

Для получения информации о распределении адресного пространства нужно загрузить в регистр EBX значение 0, в EAX — E820H (номер функции), в EDX — 534d4150h (строка «SMAP»), в ECX — размер буфера для принятия ячейки из таблицы (как минимум 20 байт), в ES:DI следует загрузить указатель на буфер и вызвать прерывание 15h. В буфер будет записана одна строка таблицы распределения адресов, для получения следующей строки нужно вызывать функцию повторно. При каждом следующем вызове функции EBX должен содержать значение возвращенное предыдущим вызовом. Повторять до тех пор, пока в регистре EBX не будет возвращен нуль, что означает конец таблицы. При успешном завершении функции флаг переноса будет сброшен, а регистр EAX будет содержать строку «SMAP».

Формат записи таблицы распределения адресов[править | править вики-текст]

Смещение (байт) Размер (байт) Значение
0 4 Младшие 32 бита начального адреса
4 4 Старшие 32 бита начального адреса
8 4 Младшие 32 бита размера области
12 4 Старшие 32 бита размера области
16 4 Тип области адресного пространства

Поле типа области будет содержать единицу, если в области адресов находится оперативная память, и двойку, если область зарезервирована (для устройств отображенных на память, резерв BIOS и т.д.), значения 3 и 4 - память, используемая ACPI. Остальные значения типа являются зарезервированными.

Пример вывода таблицы распределения адресов при загрузке ОС Linux[править | править вики-текст]

BIOS-provided physical RAM map:

BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000ce000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 0000000037e70000 (usable)
BIOS-e820: 0000000037e70000 - 0000000037e80000 (ACPI data)
BIOS-e820: 0000000037e80000 - 0000000037f00000 (ACPI NVS)
BIOS-e820: 0000000037f00000 - 0000000040000000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)

Ссылки[править | править вики-текст]

  • acpi.info — официальный сайт ACPI, с которого можно скачать спецификации любых версий (от самой первой до текущей).