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

Микросхемы ROM

Память типа ROM (Read-Only Memory, или ПЗУ) может постоянно (или практически постоянно) хранить данные. Эти записанные данные хранятся в памяти даже при отключении питания. Таким образом, для хранения стартовых процедур (и BIOS) лучше всего подходит память ROM. Аналогичная память используется и в других устройствах с собственной BIOS, например в видеоадаптерах.

Особо отмечу, что ROM и оперативная память — не противоположные понятия. На самом деле ROM представляет собой часть оперативной памяти системы. Другими словами, часть адресного пространства оперативной памяти отводится для ROM. Это необходимо для хранения программного обеспечения, которое позволяет загрузить операционную систему; в противном случае процессор сразу после включения питания не найдет в памяти команды, которые ему следует выполнить.

Например, сразу при включении компьютера счетчик команд автоматически принимает значение (адрес) FFFF0h; команды, размещенные по этому адресу, должны обеспечить загрузку операционной системы. Этим командам отводится ровно 16 байт, от конца первого мегабайта оперативной памяти и от конца ROM. Если бы эти адреса указывали на ячейки обычной памяти, все хранимые в ней данные, в том числе и команды, исчезли бы при выключении питания и процессор при следующем включении не нашел бы там никаких команд. Но, если этот адрес указывает на ячейку ROM, программа запуска системы в неизменном виде выполняется каждый раз при включении компьютера.

Обычно первым адресом ROM системы является F0000h или E0000h, расположенный за 64 или 128 Кбайт от конца первого мегабайта. Поскольку емкость ROM обычно равна 128 Кбайт, программы ROM полностью занимают последние 128 Кбайт первого мегабайта, включая критический адрес FFFF0h первой команды запуска. Емкость современных микросхем ROM может достигать 256 или 512 Кбайт. Такой увеличенный объем позволяет хранить драйверы интегрированных на системной плате устройств. К примеру, ROM интегрированной на системной плате видеосистемы обычно находится в адресах C0000h–C7FFFh, а ROM прочих интегрированных устройств, таких как адаптеры сети и SCSI, — в адресах C8000h–DFFFFh.

На рисунке показана карта распределения первого мегабайта памяти. Замечу, что верхние адреса памяти, зарезервированные для ROM BIOS материнской платы и адаптеров, находятся в конце первого мегабайта.

 

Кажется странным, что при запуске компьютер начинает выполнять команду, расположенную за 16 байт от конца ROM, но в этом есть свой смысл. Просто по этому адресу помещается команда перехода JMP, после выполнения которой процессор переходит к фактическому началу программы; в большинстве случаев оно близко к адресу F0000h, который расположен примерно на 64 Кбайт ранее в карте памяти. Это все равно что начинать чтение книги с 16-й страницы от конца; причем на ней должен быть указан номер страницы, с которой фактически начинается изложение. Зато подобное соглашение позволяет свободно изменять объем ROM.

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

Программа, хранящаяся в ПЗУ системной платы, сканирует специальную область ROM оперативной памяти (адреса C0000–DFFFFh) в поисках пары байтов сигнатуры (55AAh), которая указывает на начало ПЗУ адаптеров.

Адреса ПЗУ всех адаптеров должны начинаться с 55Aah, иначе системная плата просто их не распознает. Третий байт указывает размер ПЗУ в единицах, кратных 512 байт, которые называются абзацами, а четвертый байт соответствует фактическому началу драйверов. Байт размера используется ПЗУ системной платы в целях тестирования. ПЗУ системной платы складывает все байты в ПЗУ, после чего делит полученную сумму на количество байтов. Остаток от деления должен быть равен 100h. Поэтому при написании программы для ПЗУ адаптера программист обычно использует байт “дополнения”, позволяющий получить необходимую контрольную сумму. Используя значение контрольной суммы, системная плата проверяет ПЗУ каждого адаптера во время выполнения процедуры POST и помечает те из них, которые были повреждены.

Базовая система ввода-вывода системной платы автоматически выполняет программы в ROM любого адаптера, который она находит в процессе сканирования. Процесс обнаружения и инициализации видеоадаптера можно наблюдать в большинстве компьютеров при включении питания и во время выполнения POST.

 



Sitelinkx by eXtro-media.de
Яндекс.Метрика