Автор: Unknown BIOS (не проверено) , 18 сентября 2008
Как определить точную карту распределения адресного пространства непосредственно перед загрузкой ОСи?
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

savely

17 лет 5 месяцев назад

А по-русски? Ибо не понятно (мне лично)... Что по-вашему есть "карту распределения адресного пространства" и что "непосредственно перед загрузкой ОСи" и чем именно мы это будем делать...

alxdef

17 лет 5 месяцев назад

Во время POSTа и непосредственно перед загрузкой любой ОСи в памяти формируется некий набор вполне определенных программ и структур данных (таблица прерываний, BDA, сам BIOS и т. д.). Все это хозяйство называется картой распределения адресного пространства.
В принципе, в BIOS есть такая функция (wiki.osdev.org/How_Do_I_Determine_The_Amount_Of_RAM), но она, если не ошибаюсь, работает до 1 МБ и не все подробно описывает. Хотелось бы увидеть все поподробнее: где лежат BIOSы PCI-расширений и т. п.
Вроде бы GRUB может такое, но не пробовал...

savely

17 лет 5 месяцев назад

Как-то невнимательно вы читали Вашу же ссылку.
1. Функция работает по всей памяти.
2. GRUB использует именно эту функцию.

где лежат BIOSы PCI-расширений

Как всегда - где-то от 0xC0000 до 0xF(E?)0000. C0000 - видео, дальше BIOS сам решает кого куда совать. Искать - по сигнатурам. Сопоставлять с конкретным устройством - по VID/DID в PCI-заголовке.

Раскладка основного BIOS есть тут в статьях - сегменты 0xE000, 0xF000, 0x1000 и т.п. К загрузке ОС - ну, 0xF(E?)000-то остается. Мемори-маппед устройства - определять по PCI. Где лежит USB-память - по регистрам USB-контроллера. Еще где-то замапленная SMM-память лежит, по идее...
Таблицы ACPI - "выполняется сканирование блока BIOS Runtime (адреса 000E0000h-000FFFFFh), если ACPI поддерживается, там будет обнаружена структура RSDP (Root System Description Pointer). Структура RSDP содержит указатель на таблицу RSDT (Root System Description Table), содержащую каталог таблиц ACPI. RSDT и другие таблицы ACPI находятся в верхних адресах Extended памяти в блоке служебной информации BIOS. Для того, чтобы при использовании Extended памяти этот блок не был "затерт", размер памяти, о котором рапортует BIOS, уменьшен на размер этого блока".

Нда - задача нетривиальная, и готовое решение надо собирать по крупицам.