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/ |