OSDev
http://osdev.su/

Как стартует BIOS в PC совместимых ЭВМ?
http://osdev.su/viewtopic.php?f=5&t=318
Страница 1 из 1

Автор:  leonidpr [ 20 мар 2010, 12:59 ]
Заголовок сообщения:  Как стартует BIOS в PC совместимых ЭВМ?

Вот возник у меня такой вопрос. У процессора есть адрес, по которому он обращается к первой инструкции при старте. Где расположена эта инструкция? Наверное в BIOS, то бишь в ПЗУ. Но в современных мамках, BIOS подключена через шину LPC к южному мосту. Далековато от процессора. То есть первый вариант - перенаправление обращений процессора по определенным физическим адресам к микросхеме ПЗУ BIOS. Второй вариант - копировать BIOS в ОЗУ и там уже исполнять. Когда у меня был комп на i386, там в настройках BIOS Setup даже был пункт что-то типа Use shadow BIOS. Но вот тут у меня вопрос, кто копирует BIOS в ОЗУ, если проц еще не стартовал? Или, он исполняет маленький код из ПЗУ, копирующий BIOS в память при необходимости и потом уже выполняет его?

Автор:  SII [ 20 мар 2010, 13:46 ]
Заголовок сообщения:  Re: Как стартует BIOS в PC совместимых ЭВМ?

Запуск процессора описан в 9-й главе третьего тома интеловского мануала. Однако аппаратный сброс затрагивает не только процессор, но и всю прочую электронику, включая северный и южный мосты. Благодаря этому они устанавливают "стандартное" отображение адресов, по которому микросхема ПЗУ BIOS будет занимать самые старшие адреса в районе 4 Гбайт (заканчивая FFFF_FFFF; начало зависит от объёма BIOS). Кроме того, на старшую часть ПЗУ BIOS (последние 64 Кбайта) будут отображаться физические адреса 000F_0000–000F_FFFF — т.е. именно те, где располагался BIOS на первых ПК. Процессор начинает выполнение, имея базовый адрес сегмента кода, равный FFFF_0000 (сам CS содержит F000), и содержимое IP=FFF0, что обеспечивает выборку первой команды по физическому адресу FFFF_FFF0 — из последних 16 байт ПЗУ BIOS. Этой командой будет длинный переход, обеспечивающий загрузку в CS:IP адреса реальной точки входа в код BIOS.

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/