Основы BIOS
Пользователи зачастую не видят разницы между программной и аппаратной частями компьютера.
🕛 23.10.2009, 14:37
Это можно объяснить высокой степенью интеграции компонентов системы. Точное представление различия между компонентами компьютера дает ключ к пониманию роли BIOS.Термин BIOS используется для описания базовой системы ввода-вывода. По существу, BIOS представляет собой “промежуточный слой” между программной и аппаратной частями системы. Большинство пользователей подразумевают под BIOS драйверы устройств. Кроме системной, существует еще BIOS адаптеров, которые загружаются при запуске системы.
Когда был представлен первый ПК, программное обеспечение BIOS содержало драйверы для всех устройств системы, которые записывались в микросхемы ПЗУ, расположенные на системной плате. При этом драйверы предварительно загружались в память и были доступны на протяжении всего времени работы компьютера.
В микросхеме ПЗУ также были записаны программа POST (Power On Self Test - тестирование при включении) и программа самозагрузки. Последняя инициирует загрузку операционной системы, проверяя загрузочный сектор на дискете или на жестком диске. После загрузки операционная система обращается к процедурам низкого уровня (драйверам устройств) BIOS, необходимым для взаимодействия с различными системными устройствами. В начале компьютерной эры в BIOS хранились абсолютно все драйверы устройств, в том числе драйвер клавиатуры, видеоадаптера MDA/CGA, последовательного и параллельного портов, контроллера гибких дисков, контроллера жестких дисков, джойстика и т.д.
После загрузки операционной системы не требуется загружать драйверы для работы с устройствами, так как драйверы уже предварительно загружены в ПЗУ. Подобная идея была неплоха, однако только до тех пор, пока в системе не устанавливалось новое устройство, драйвер которого в ПЗУ не загружен. В этом случае есть два выхода. Если вы установили новую плату адаптера, она может быть оснащена микросхемой ПЗУ, содержащей драйвер. ПЗУ системной платы запрограммировано таким образом, чтобы обнаруживать ПЗУ адаптеров и при обнаружении новых драйверов связывать соответствующие новые функции с существующей BIOS. В результате можно сказать, что ПЗУ системной платы “аккумулирует” данные, хранящиеся в ПЗУ отдельных адаптеров, в результате чего получается “коллективная” функциональность.
Подобный метод добавления драйверов использовался для целого ряда устройств, например видеоадаптеров, которые должны быть полностью функциональны с момента включения компьютера. Код BIOS, хранящийся в ПЗУ системной платы, содержит драйверы только для монохромного видеоадаптера MDA компании IBM, а также цветного видеоадаптера CGA. При установке видеоадаптера иного типа драйверы, хранящиеся в ПЗУ системной платы, оказывались бесполезными. Конечно, это не вызывало проблем, если новый видеоадаптер был оснащен собственной микросхемой ПЗУ, содержимое которой добавлялось в BIOS немедленно после включения компьютера.
Если же использовалось устройство другого типа, существовал иной способ добавления драйвера в “коллекцию” драйверов BIOS. Дело в том, что на ранних этапах загрузки файл загрузки операционной системы (IO.SYS) обращался к файлу конфигурации (CONFIG.SYS), содержащему сведения о драйверах устройств. Файл CONFIG.SYS вместе со всеми указанными в нем драйверами должен находиться на загрузочном диске. После того как файл IO.SYS получит необходимые данные, он загружает указанные драйверы в память и связывает их с BIOS. Другими словами, драйверы загружались с диска в ОЗУ и связывались с BIOS, благодаря чему появлялась возможность в любой момент их вызвать.
К этому моменту в BIOS оказывались данные из ПЗУ системной платы и адаптеров, а также драйверы, загруженные с диска в ОЗУ на ранних этапах загрузки. Таким образом, BIOS содержит данные, которые физически расположены в трех разных местах системы, но при этом работают как одно целое, поскольку все программы связываются посредством процедур BIOS. Операционная система или приложение при взаимодействии с каким-либо устройством (например, при необходимости считать данные с компакт-диска) обращается к определенному программному прерыванию, после чего в соответствии с таблицей векторов прерываний вызов направляется к определенной части BIOS (т. е. драйверу), касающейся работы устройства. При этом не имеет значения, где именно хранится драйвер - в ПЗУ системной платы, ПЗУ адаптера или ОЗУ.
Итак, базовая система ввода-вывода - это комбинация всех типов BIOS, а также загружаемые драйверы устройств. Часть BIOS, содержащаяся в микросхеме на системной плате или платах адаптеров, называется firmware (именно из-за наличия этих микросхем пользователи чаще всего относят BIOS к аппаратной части компьютера).
По мере эволюции ПК выпускалось все больше различных типов устройств и их моделей. Это означало необходимость предварительной загрузки все большего количества драйверов. Добавление драйверов в ПЗУ системной платы - задача довольно сложная, поскольку микросхемы ПЗУ чаще всего несъемные, а их объем достаточно ограничен. Архитектура PC предполагала использование ПЗУ системной платы объемом всего 128 Кбайт, причем боль-шая часть этого объема уже используется для хранения драйверов, процедуры POST, программы BIOS Setup, а также программы загрузки. Запись драйвера в ПЗУ адаптера также сложная и дорогостоящая задача, а объем ПЗУ адаптеров ограничен теми же 128 Кбайт, из которых 32 Кбайт используется видеоадаптером. Поэтому многие компании решили писать драйверы, которые загружаются в ОЗУ во время загрузки системы.
С течением времени с диска загружалось все больше и больше драйверов, в том числе таких, которые заменяют драйверы, хранящиеся в ПЗУ системной платы. Например, в Windows 95 был представлен новый 32-разрядный драйвер жесткого диска, который использовался вместо 16-разрядного драйвера, хранящегося в ПЗУ системной платы. При этом 16-разрядный драйвер использовался только с момента включения компьютера и до того момента, как в ОЗУ загружался 32-разрядный драйвер, а также изменялась таблица векторов прерываний. Windows 95/98/Me допускали использование как 16-, так и 32-разрядных драйверов.
Современные 32-разрядные драйверы загружаются непосредственно с жесткого диска, заменяя все драйверы в ПЗУ системной платы. Это относится к любому компьютеру, работающему под управлением Windows NT/2000/XP, в котором не применяются 16-разрядные драйверы, размещенные в ПЗУ (ROM) системной платы или адаптера устройства. Код ПЗУ системной платы необходим лишь для обеспечения успешной загрузки 32-разрядных драйверов и ядра операционной системы, после чего ПЗУ отключается.
То же самое справедливо и в отношении 64-разрядных версий Windows, которые требуют использования только 64-разрядных драйверов, не допуская применения 32- или 16-разрядных драйверов. На самом деле именно необходимость использования только 64-разрядных драйверов в значительной мере замедляет распространение систем, работающих под управлением 64-разрядной Windows.
Завершение загрузки, например, 32-разрядной Windows XP означает прекращение вызовов любых подпрограмм в ПЗУ системной платы или адаптеров. В дальнейшем вызовы направляются только драйверам устройств, загруженным в ОЗУ системы. При включении компьютера функции BIOS преимущественно располагаются в ПЗУ, а после загрузки Windows XP - в ОЗУ системы.
Описываемая тенденция будет развиваться и в дальнейшем. ПЗУ системной платы применяется на базовом этапе запуска системы для инициализации аппаратного обеспечения, а также для реализации системы защиты в виде паролей, вводимых при запуске компьютера, и для начальной настройки некоторых конфигурационных параметров. Тем не менее после загрузки операционной системы за дело берется совершенно другой набор системных драйверов.
Компьютерную систему можно представить в виде нескольких аппаратных и программных слоев, которые взаимодействуют друг с другом. В целом существует четыре основных слоя, каждый из которых можно разбить на подуровни.
Приложение
Условное разделение PC-совместимой системы на несколько слоев
На этом рисунке показаны два разных компьютера, в которых используется уникальная BIOS в качестве интерфейса между аппаратным обеспечением и операционной системой с ее приложениями. Таким образом, на этих компьютерах может быть установлено разное оборудование (процессоры, жесткие диски, мониторы и др.), на котором можно запускать одинаковое программное обеспечение. Связь между приложениями и операционной системой осуществляется с помощью соответствующего API (Application Programming Interface). Этот интерфейс определяет, например, как выполняется запись и считывание данных на диск, печать и другие функции. Поскольку приложение не зависит от установленного аппаратного обеспечения, все его вызовы обрабатывает операционная система, которая уже содержит информацию об установленном оборудовании.
Операционная система, в свою очередь, через BIOS обращается непосредственно к аппаратному обеспечению. Эта связь реализована в виде драйверов устройств. Как правило, выпуском драйверов для аппаратного обеспечения занимаются его производители. Поскольку драйверы обеспечивают взаимодействие между аппаратным устройством и операционной системой, они, как правило, предназначены для определенной системы. Таким образом, производителям приходится создавать драйверы для таких операционных систем, как DOS, Windows 9x/NT/2000/XP, OS/2, Linux и др. Тем не менее многие операционные системы имеют одинаковый внутренний интерфейс, некоторые драйверы подходят для нескольких операционных систем. Например, драйвер для Windows Me зачастую пригодится в Windows 98/95, а драйвер для Windows 98 можно использовать в Windows 2000/NT.
Системная BIOS остается неизменной для операционной системы, независимо от аппаратного обеспечения, а операционная система может работать на самых разных компьютерах. Например, если установить Windows XP на компьютерах с разными процессорами, жесткими дисками, видеоадаптерами и т.д., принцип ее работы останется неизменным, поскольку драйвер выполняет свои базовые функции вне зависимости от аппаратных компонентов.
Как видно из рис. 5.1, уровни приложений и операционной системы могут быть идентичны для разных систем, в то время как уровни оборудования могут значительно различаться. Поскольку BIOS содержит драйверы, обеспечивающие взаимодействие программного и аппаратного обеспечения, уровень BIOS, с одной стороны, учитывает уникальные особенности оборудования, а с другой - оказывается неизменным с точки зрения операционной системы.
На уровне оборудования сосредоточены основные различия между разными системами. Именно BIOS отвечает за маскирование различий между разными устройствами, чтобы обеспечить нормальную работу операционной системы. В настоящей главе уделяется внимание именно особенностям работы системной BIOS персонального компьютера.