3

Когда компьютер x86 загружается, он запускает программу под названием BIOS, которая хранится в энергонезависимой памяти на материнской плате. Задача BIOS состоит в том, чтобы подготовить оборудование, а затем передать управление операционной системе. источник Приложение B. Из лабораторного занятия здесь, в разделе «Физическое адресное пространство ПК» показано после сопоставления.
+ ------------------+ <- 0x00100000 (1 МБ)
| BIOS ROM |
+ ------------------+ <- 0x000F0000 (960 КБ)

Зачем BIOS должен его использовать, если не то, что его используют? Как это связано с программой BIOS, которая хранится в энергонезависимой памяти на материнской плате, как я упоминал в начале? Хотя в лабораторном ресурсе упоминается, что дизайн предназначен для qemu(эмулятора x86), но osdev [ http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area] также говорит о макете памяти. Я просто немного смущен.

2 ответа2

3

AFAIK, это в основном исторические причины. Программа хранится на микросхеме, но для ее запуска код загружается в ОЗУ (тень BIOS), где ЦП может напрямую получать инструкции. Это особенно необходимо для сжатых образов BIOS на менее дорогих чипах с минимальной емкостью.

Отключение параметра «BIOS shadow» может замедлить процесс загрузки или редко вызывать более серьезные проблемы. Кроме того, операционные системы, такие как MS DOS, дополнительно использовали подпрограммы BIOS для ввода-вывода, что было своего рода HAL. Это было бы ужасно медленно и небезопасно для использования в современных многопоточных ОС, поэтому после передачи управления ОС эта часть ОЗУ остается неактивной.

Другие системы даже имели свое ядро на этом чипе, например Commodore Amiga Kickstart, который альтернативно был доступен как Floppy.

3

DOS и другие операционные системы реального времени активно использовали службы BIOS. Поскольку реальный режим процессоров x86 связан с адресным пространством 2 ^ 20 = 1 Мб, производители систем i8086 решили, что BIOS должен быть сопоставлен с верхним пределом адресного пространства (так же, как в настоящее время ядра более высокой половины отображают свою виртуальную память в конец диапазона): от 0xA0000 и выше.

Защищенный режим сделал эту зарезервированную память пробелом в адресном пространстве: программы защищенного режима не могут вызывать функции из BIOS без значительных взломов, делая ее непригодной для использования в защищенном и длинном режиме (в котором работает каждая современная ОС), но передавая программное обеспечение из RM в PM не был быстрым, поэтому инженеры Intel оставили аварийный люк в режиме v8086, который позволял запускать старые программы реального режима в песочнице в среде защищенного режима (например, OS/2 интенсивно использовал режим v8086 и эмуляцию DOS в системе Windows также полагается на эту функцию), все еще требуя службы BIOS для совместимости.

Эта память все еще используется в защищенном режиме для некоторых задач, таких как VGA-терминал / графический выход (память терминала расположена в 0xB8000, консольные шрифты также могут быть там отрегулированы, графический буфер VGA в 0xA8000, iirc). Иногда эта память используется даже для таких API, как VBE 3, но да, сопоставление BIOS в 0xA0000 - это в основном вопрос обратной совместимости. Есть попытки заменить его: современное переосмысление BIOS, UEFI сейчас неуклонно набирает популярность.

Вывод: сопоставление BIOS в 0xA0000 в основном является вопросом обратной совместимости, и предпринимаются попытки заменить его более современными средами загрузки, такими как UEFI.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .