Давным-давно на компьютерах не было загрузочного ПЗУ. У одного был прямой интерфейс для изменения ОЗУ, и он мог останавливать ЦП, менять ОЗУ и затем перезагружать ЦП. Таким образом, когда вы перезагружали систему, вы должны были убедиться, что процессор остановлен, ввести код начальной загрузки, который загрузит загрузчик второго уровня (2 бита) с бумажной ленты или еще чего-нибудь, а затем "вылечить" ваш процессор.
ROM спасает день здесь, очевидно. Когда вы включаете систему на базе процессора x86, она начинает выполняться по адресу FFFF:FFF0. Это встроенная функция процессора x86. ПЗУ должно находиться по этому адресу, и, действительно, самая верхняя часть BIOS (обычно начинается с E000:0000).
Термин BIOS является пережитком старой операционной системы CP/M. Структура CP/M представляла собой ROM BIOS на нижнем уровне, BDOS (базовая дисковая операционная система) в середине и CCP (консольный командный процессор) перед пользователем. В BIOS были подпрограммы для выполнения низкоуровневых функций, таких как чтение / запись определенного сектора диска, чтение клавиши с клавиатуры, запись символа на экран и т.д. BDOS будет использовать функции BIOS для реализации файловой системы, а CCP будет командной оболочкой, использующей функции BDOS и BIOS. Идея заключалась в том, что BIOS будет содержать аппаратный интерфейс, а BDOS и CCP могут быть одинаковыми в любой системе CP/M.
BIOS также будет содержать исходный код, выполняемый процессором, который инициализирует требуемое оборудование, отображает заставку, загружает 2 бита с первого сектора первого диска и запускает его.
MS-DOS 1.0, в значительной степени являющаяся реализацией CP/M для x86, с хитрыми Unix-подобными функциями, добавленными начиная с версии 2.0, была структурирована таким же образом. IBM PC BIOS в то время также включал в себя такие улучшения, как переключение режима видео, графические функции и поддержку жесткого диска в оригинальной AT BIOS.
Однако большинство программ DOS не использовали функции BIOS после запуска; они напрямую обращались к оборудованию по соображениям производительности. Это было особенно важно после того, как 32-битные процессоры стали обычным явлением; BIOS работал только в старом 16-битном режиме, поэтому вызов его из 32-битного режима приводил к дальнейшему снижению производительности.
Примерно в 1990 году архитектура ПК начала расширяться и стала включать новые элементы, такие как APM, PnP и PCI. Таким образом, BIOS начал брать на себя дополнительные функции и становиться больше. ПК также начали использовать чипсеты вместо дискретных компонентов. Инициализация чипсета - это то, что должно произойти, чтобы получить оперативную память и другие компоненты, такие как шина PCI, пригодную для использования, так что это должно обрабатываться кодом начальной загрузки BIOS. По некоторым причинам многие производители чипсетов не любят документировать, как работают их процессы установки.
APM обрабатывался функциями BIOS; т.е. чтобы выключить систему, операционная система должна была вызвать функцию APM. ACPI, преемник APM, - это большая вещь, которую BIOS делают сегодня. BIOS ACPI отвечает за создание в памяти группы таблиц, в которой описывается множество аппаратных компонентов, не поддерживающих технологию Plug and Play. Загрузочная операционная система использует это, чтобы определить, сколько процессоров имеется, сколько слотов оперативной памяти имеет система, является ли система настольным ПК или ноутбуком, сколько батарей установлено и т.д. Также необходимо вызывать ACPI BIOS, чтобы выключить систему, перевести ее в спящий режим и т.д. Однако нет причин, по которым код операционной системы не мог обрабатывать вызовы ACPI.
В большинстве случаев обновления BIOS предназначены для исправления ошибок ACPI, поскольку ACPI сложен и труден, или для введения улучшенного микрокода. Все современные процессоры позволяют обновлять микрокоды, и, если выпущено новое обновление микрокода, необходимо обновить BIOS, чтобы установить этот новый микрокод. Обычная программа может обновить микрокод процессора.
SMI также обрабатываются BIOS. Я почти уверен, что большая часть аппаратного обеспечения, связанного с температурой и энергопотреблением, запускает SMI, чьи процедуры затем регулируют скорость вращения вентилятора / процессора и / или другие вещи. Другие вещи могут вызвать СМИ; посмотрите статью в Википедии о режиме управления системой. Но нет также причины, по которой этот код нельзя заменить кодом операционной системы, если документированы аппаратные интерфейсы.
Современные операционные системы вообще не используют BIOS для доступа к оборудованию, за исключением событий питания. Некоторые загрузчики используют символьный ввод / вывод BIOS для отображения текста, а дисковый ввод / вывод загружает загрузочный код ОС.
Поэтому я надеюсь, что это проливает некоторый свет на роль BIOS, и по большей части вы абсолютно правы в том, как он работает.