Вот мне было интересно, что происходит после нажатия кнопки Power. CPU начинает выполнение с адреса 0x0, а вот что находится по этому адресу в этот момент (и как оно туда попадает) совершенно непонятно. Может, просветите, что делает комп от момента подачи питания на материнку до запуска загрузчика операционки?
Это с какого перепуга ?!! всю жизнь после включения питания стартовал код BIOS (если не изменяет память F000:0000). Код проверяет систему на исправность и стартует ОС. Это в кратце
Loger При нажатии кнопки Power происходит только запуск блока питания. Процессор же запускается по сбросу сигнала #reset, который в свою очередь сбрасывается по появлению сигнала на линии #powergood. После выполнения сброса, процессор начинает выполнять код, который записан в ROM BIOS по адресу FFFF:0000. По данному адресу записана команда перехода на реально выполняемый код ROM BIOS. Далее процессору предстоит выполнить программы BootBlock, POST и наконец загрузчик системы.
alpet А код ROM BIOS как оказывается в оперативке? Материнка сама его туда грузит до запуска процессора или перехватывает обращение к оперативке и выдает код ROM BIOS?
0000... F000:0000... FFFF:0000... ещё будут мнения? Loger Это задача чипсета подсунуть процу то что надо при RESET'е. Выполнение начинается в т.н. High BIOS Area по физ. адресу FFFFFFF0h. Чипсет по адресу (при состоянии после сброса) определяет цель (а сам код BIOS'а может быть на FWH, LPC, ISA и тд -- в зависимости от прихоти вендора) и переадресует циклы куда надо.
_BC_ Я написал если не изменяет память... Скорее всего стар начинается с FFFF:0000. А если у меня нет 4Gb памяти ? Может имелось ввиду FFFF0h = FFFF:0000 ?
Нет и ещё раз нет. Это совершенно не зависит от того, сколько у тебя оперативной памяти, это исключительно mapping. Уже давно миновали времена 8086, и процессору при старте всё равно, что будет в сегменте F, его интересует физ. адрес FFFFFFF0h (который получается за счет того, что CS shadow-регистр при старте содержит базовый адрес FFFF0000h и предел FFFFh, а EIP=FFF0h). Теоретически, код BIOS'а может целиком отработать и в High BIOS, но на практике первая же команда по адресу FFFFFFF0h -- FAR JMP на F000h:xxxxh.
Loger Дешифратор шины адреса (ДША) в момент появления на шине адреса конретного значения определяет (так, как в него запрограммировал vendor), что это будет за устройство: RAM, ROM или, например, видеопамять; и именно это устройство выходит из высокомного состояния, то есть начинает взаимодействовать с процессором. Стартовый адрес раньше традиционно выставлялся так что попадал на ROM BIOS.
>> А код ROM BIOS как оказывается в оперативке? Код ROM BIOS загружает в ОЗУ boot-block (Initial OPROM), который, как верно заметил _BC_, находится по адресу 0xFFFFFFF0. >>на практике первая же команда по адресу FFFFFFF0h -- FAR JMP на F000h:xxxxh Так было только на очень старых компьютерах. Теперь boot-block содержит код проверки КС, средства восстановления ROM, код конфигурирования основной памяти. >> ДША в момент появления на шине адреса конретного значения определяет, что это будет за устройство: RAM, ROM или, например, видеопамять Северный мост чипсета содержит набор регистров конфигурирования адресного пространства PAM (Programmable Attribute Map) в рамках GPIO*. Один PAM регистр контролирует два региона адресного пространства. В зависимости от битов типа региона, доступ осуществляется либо к основной памяти, либо к ROM, либо перенаправляется на шину PCI. >> А где можно узнать подробности (книги, статьи) Статья "Технологии защиты BIOS": http://www.lowlevel.h14.ru/cgi-bin/yabb/YaBB.cgi?board=programming;act ion=display;num=1120969302 ---------------------- * Про GPIO: http://www.lowlevel.h14.ru/cgi-bin/yabb/YaBB.cgi?board=programming;act ion=display;num=1109883050