А по-русски? Ибо не понятно (мне лично)... Что по-вашему есть "карту распределения адресного пространства" и что "непосредственно перед загрузкой ОСи" и чем именно мы это будем делать...
Во время POSTа и непосредственно перед загрузкой любой ОСи в памяти формируется некий набор вполне определенных программ и структур данных (таблица прерываний, BDA, сам BIOS и т. д.). Все это хозяйство называется картой распределения адресного пространства.
В принципе, в BIOS есть такая функция (wiki.osdev.org/How_Do_I_Determine_The_Amount_Of_RAM), но она, если не ошибаюсь, работает до 1 МБ и не все подробно описывает. Хотелось бы увидеть все поподробнее: где лежат BIOSы PCI-расширений и т. п.
Как-то невнимательно вы читали Вашу же ссылку.
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, уменьшен на размер этого блока".
Нда - задача нетривиальная, и готовое решение надо собирать по крупицам.
А по-русски? Ибо не понятно (мне лично)... Что по-вашему есть "карту распределения адресного пространства" и что "непосредственно перед загрузкой ОСи" и чем именно мы это будем делать...
А кому счас легко...
Во время POSTа и непосредственно перед загрузкой любой ОСи в памяти формируется некий набор вполне определенных программ и структур данных (таблица прерываний, BDA, сам BIOS и т. д.). Все это хозяйство называется картой распределения адресного пространства.
В принципе, в BIOS есть такая функция (wiki.osdev.org/How_Do_I_Determine_The_Amount_Of_RAM), но она, если не ошибаюсь, работает до 1 МБ и не все подробно описывает. Хотелось бы увидеть все поподробнее: где лежат BIOSы PCI-расширений и т. п.
Вроде бы GRUB может такое, но не пробовал...
Как-то невнимательно вы читали Вашу же ссылку.
1. Функция работает по всей памяти.
2. GRUB использует именно эту функцию.
Как всегда - где-то от 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, уменьшен на размер этого блока".
Нда - задача нетривиальная, и готовое решение надо собирать по крупицам.
А кому счас легко...
Отправить комментарий