
Когда загружается ПК x86, он начинает выполнять программу, называемую BIOS, которая хранится в энергонезависимой памяти на материнской плате. Задача BIOS — подготовить оборудование и затем передать управление операционной системе.источникПриложение B. Из лабораторной работыздесьв разделеФизическое адресное пространство ПКпоказано следующее сопоставление.
+------------------+ <- 0x00100000 (1 МБ)
| ПЗУ BIOS |
+------------------+ <- 0x000F0000 (960 КБ)
Зачем BIOS его использовать, если нет, то в чем его польза? Как он связан с программой BIOS, которая хранится в энергонезависимой памяти на материнской плате, как я упоминал в начале? Хотя в лабораторном ресурсе упоминается, что дизайн предназначен для qemu (эмулятор x86), но osdev [http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]то же самое говорит и о структуре памяти. Я просто немного запутался.
решение1
ДОС и другиереальный режимОперационные системы интенсивно использовали службы 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, таких какВБЭ 3, но да, отображение BIOS по адресу 0xA0000 в основном является вопросом обратной совместимости. Есть попытки заменить его: современное переосмысление BIOS, UEFI, теперь уверенно набирает популярность.
Заключение:Отображение BIOS по адресу 0xA0000 в основном связано с обратной совместимостью.и предпринимаются попытки заменить его более современными загрузочными средами, такими как UEFI.
решение2
AFAIK, это имеет в основном исторические причины. Программа хранится на чипе, но для ее запуска код загружается в ОЗУ (BIOS shadow), откуда ЦП может напрямую извлекать инструкции. Это особенно необходимо для сжатых образов BIOS на менее дорогих чипах с минимальной емкостью.
Отключение опции «BIOS shadow» может замедлить процесс загрузки или в редких случаях вызвать более серьезные проблемы. Более того, такие операционные системы, как MS DOS, дополнительно использовали процедуры BIOS для ввода-вывода, что было своего рода HAL. Это было бы ужасно медленно и небезопасно для использования в современных многопоточных ОС, поэтому после передачи управления ОС эта часть ОЗУ остается неактивной.
В других системах даже было свое ядро на этом чипе, например, в Commodore Amiga Kickstart, которое также было доступно в виде Floppy.