link280 link281 link282 link283 link284 link285 link286 link287 link288 link289 link290 link291 link292 link293 link294 link295 link296 link297 link298 link299 link300 link301 link302 link303 link304 link305 link306 link307 link308 link309 link310 link311 link312 link313 link314 link315 link316 link317 link318 link319 link320 link321 link322 link323 link324 link325 link326 link327 link328 link329 link330 link331 link332 link333 link334 link335 link336 link337 link338 link339 link340 link341 link342 link343 link344 link345 link346 link347 link348 link349 link350 link351 link352 link353 link354 link355 link356 link357 link358 link359 link360 link361 link362 link363 link364 link365 link366 link367 link368 link369 link370 link371 link372 link373 link374 link375 link376 link377 link378 link379 link380 link381 link382 link383 link384 link385 link386 link387 link388 link389 link390 link391 link392 link393 link394 link395 link396 link397 link398 link399 link400 link401 link402 link403 link404 link405 link406 link407 link408 link409 link410 link411 link412 link413 link414 link415 link416 link417 link418 link419

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 персонального компьютера.