Как BIOS определяет занятые участки памяти ОЗУ?

Всем привет! В качестве хобби пишу ОС реального режима, и возник вопрос с выделением свободных блоков памяти, в частности для регистров BAR устройств в конфигурационном пространстве PCI. Чтобы получить доступ к расширенной памяти выше 1МБ, перешёл в нереальный режим "UnrealMode" - с этим всё ок. Но не понятно, как определить свободные регионы в верхних блоках памяти (ниже 4ГБ), ведь BIOS мог отдать их уже какому-либо устройству?

Сейчас через прерывание INT-15h, AX=E820h я могу получить "карту свободной памяти" как на рис.ниже. Выходит, что биос где-то ведёт учёт этих блоков чтоли? К сожалению данное прерывание работает не на всех моих машинах (видимо проблемы с ACPI), а потому ищу альтернативу. Вопрос: как определить в RMode, что память занята? Спасибо.

Прерывание INT-15h возвращает флаги: Free(1), Used(2), ACPI(3,4), Bad(5). введите сюда описание изображения


Ответы (0 шт):