PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

BIOS: базовая система ввода-вывода

Основы BIOS

Основы BIOS

Пользователи зачастую не видят разницы между программной и аппаратной частями компьютера. Это можно объяснить высокой степенью интеграции компонентов системы. Точное представление различия между компонентами компьютера дает ключ к пониманию роли 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, содержащаяся в микросхеме на системной плате или платах адаптеров, называется прошивкой(firmware) (именно из-за наличия этих микросхем пользователи чаще всего относят BIOS к аппаратной части компьютера). После выключения питания компьютера все данные, находящиеся в оперативной памяти компьютера, стираются; нетронутым остается только содержимое ПЗУ. После включения компьютера снова выполняется процесс загрузки, и в память с диска загружаются все отсутствующие драйверы.

По мере эволюции ПК выпускалось все больше различных типов устройств и их моделей. Это означало необходимость предварительной загрузки все большего количества драйверов. Добавление драйверов в ПЗУ системной платы — задача довольно сложная, поскольку микросхемы ПЗУ чаще всего несъемные, а их объем достаточно ограничен. Архитектура PC предполагала использование ПЗУ системной платы объемом всего 128 Кбайт, причем большая часть этого объема уже используется для хранения драйверов, процедуры POST и программ настройки BIOS и загрузки. Запись драйвера в ПЗУ адаптера — также сложная и дорогостоящая задача, а объем ПЗУ адаптеров ограничен теми же 128 Кбайт, из которых 32 Кбайт используются самим видеоадаптером. Поэтому многие компании решили создавать драйверы, которые загружаются в ОЗУ при запуске системы.

С течением времени с диска загружалось все больше и больше драйверов, в том числе таких,которые заменяют драйверы, хранящиеся в ПЗУ системной платы. Например, в Windows 95 был представлен новый 32-разрядный драйвер жесткого диска, который использовался вместо 16-разрядного, хранящегося в ПЗУ системной платы. При этом 16-разрядный драйвер использовался только с момента включения компьютера до того момента, когда в ОЗУ загружался 32-разрядный драйвер, а также изменялась таблица векторов прерываний. Windows 95/98/Me допускали использование как 16-, так и 32-разрядных драйверов, облегчая тем самым переход к 32-разрядным операциям.

Современные 32- и 64-разрядные драйверы загружаются непосредственно с жесткого диска, заменяя все драйверы в ПЗУ системной платы. Это относится к любому компьютеру, работающему под управлением Windows NT/2000/XP или Vista. Эти операционные системы вообще не используют 16-разрядные драйверы, размещенные в ПЗУ (ROM) системной платы или адаптера устройства. Код ПЗУ системной платы необходим лишь для обеспечения успешной загрузки 32-разрядных драйверов и ядра операционной системы, после чего ПЗУ отключается. Другими словами, после загрузки операционной системы все необходимые драйверы (т.е. BIOS) уже находятся в оперативной памяти. Основные функции ПЗУ материнской платы — запуск системы, инициализация необходимых для загрузки системы устройств, а также проверка пароля для входа в систему и выполнение базовой настройки устройств. После загрузки системы управление передается загруженному в память набору драйверов.

Компьютерную систему можно представить в виде нескольких аппаратных и программных слоев, которые взаимодействуют друг с другом. Существует четыре основных слоя, каждый из которых можно разбить на подуровни. Эта концепция представлена в графическом виде на рисунке ниже.

В представленной на рисунке архитектуре программное обеспечение взаимодействует с операционной системой с помощью интерфейса прикладного программирования (Application Programming Interface или API). Этот интерфейс специфичен для каждой операционной системы; он состоит из набора команд и функций, которые операционная система может выполнить для приложения. К примеру, приложение может отдать приказ операционной системе загрузить или сохранить файл. Такой порядок избавляет приложения от необходимости знать специфику работы с конкретным оборудованием, установленным в компьютере, и его набором команд. Оно имеет дело только с операционной системой, выступающей посредником между приложением и аппаратной частью. Поскольку приложение оказывается полностью изолированным от оборудования, оно может выполняться на любом компьютере, на котором установлена операционная система, интерфейс API которой задействован в программе.

 

Операционная система, в свою очередь, через BIOS обращается непосредственно к аппаратному обеспечению. Эта связь реализована в виде драйверов устройств. Обычно выпуском драйверов устройств занимаются их производители. Поскольку драйверы обеспечивают взаимодействие между аппаратным устройством и операционной системой, они, как правило, предназначены для конкретной ОС. Таким образом, производителям приходится создавать драйверы для таких операционных систем, как DOS, Windows 9x/NT/2000/XP, OS/2, Linux и др. Тем не менее многие операционные системы имеют одинаковые внутренние интерфейсы, и некоторые драйверы подходят для нескольких операционных систем. Например, драйвер для Windows Me обычно подходит для Windows 98/95, а драйвер для Windows XP можно использовать в Windows 2000/NT, и наоборот. Это связано с тем, что операционные системы Windows 95/98/Me имеют одно и то же ядро; то же можно сказать и о системах Windows NT/2000/XP. В новой системе Windows Vista в значительной мере изменено ядро NT, так что в ней зачастую нельзя использовать драйверы, предназначенные для предыдущих версий Windows семейства NT.

Как видно из рисунке, уровни приложений и операционной системы могут быть идентичны для разных систем, в то время как уровни оборудования могут значительно различаться. Поскольку BIOS содержит драйверы, обеспечивающие взаимодействие программного и аппаратного обеспечения, уровень BIOS, с одной стороны, учитывает уникальные особенности оборудования, а с другой — оказывается неизменным с точки зрения операционной системы. На аппаратном уровне сосредоточены основные различия между разными системами. Именно BIOS отвечает за маскирование различий между разными устройствами, чтобы обеспечить нормальную работу операционной системы. В настоящей главе внимание уделяется особенностям работы системной BIOS персонального компьютера.