Это еще один случай, когда полученная народная мудрость по этому вопросу, к сожалению, примером которой psusi
ответ псуси и даже часть вопроса, застряла в мире примерно в 1991 году, несмотря на множество доступных технических ссылок, объясняющих, как это происходит. сейчас иначе.
В мире конца 1980-х годов прошивка машины - одна из двух вещей, называемых "BIOS" в мире IBM PC-совместимых - действительно была в микросхеме ПЗУ на шине ISA; и ЦП действительно начали выполнять код по физическому адресу 000FFFF0
, местоположению в "обычной памяти", доступ к которому осуществляется через указатель реального режима F000:FFF0
Этот мир давно исчез.
(Мир, в котором ошибочно живет автор WWW-страницы С. Эбрагим Шуббар, несмотря на то, что он писал в 2002 году, еще старше. Процессоры не запускались с комбинацией CS:IP
FFFF:0000
с 8086 года. 80286 изменил это на F000:FFF0
. Но 80286 мира сам по себе является весьма устаревшим миром конца 1980 - х лет , что народная мудрость по- прежнему циркулирует.)
Ваш "чип BIOS" - это ОЗУ; и ваш процессор не 16-битный.
В современных ПК прошивка машины хранится в энергонезависимой оперативной памяти. Чип NVRAM подключен к шине LPC (или к выделенному интерфейсу "Firmware Wub"), а мост LPC/FWH в "чипсете" обычно отключает циклы записи в него. "Перепрошивка" прошивки включает в себя установку регистров набора микросхем, которые разрешают запись в NVRAM и затем запись в NVRAM. (Например, в Intel ICH10 бит регистра набора микросхем, который допускает циклы записи, называется BIOSWE
, "BIOS Write Enable". Есть некоторые дополнительные детали, которые я здесь пропущу, но в этом суть.)
Процессоры x86 не начинали выполнение в местоположении 000FFFF0
со времен 80286. 32-разрядные процессоры запускаются в так называемом нереальном режиме. Несмотря на то, что начальное значение регистра CS
после сброса - F000
, дескриптор сегмента, связанный с этим регистром, изначально содержит FFFF0000
качестве своего базового адреса. Таким образом, физический адрес, который изначально соответствует 16:16 CS:IP-адресу F000:FFF0
фактически является и был со времен 80386, FFFFFFF0
.
И именно здесь микропрограмма машины в основном отображается в физическое адресное пространство на 32-разрядных и 64-разрядных компьютерах x86. В области "обычной памяти" имеется окно для прошивки объемом 128 КБ, но NVRAM, на котором установлена прошивка машины, может быть до 16 МБ (хотя это зависит от набора микросхем) на современных ПК и, как правило, немедленно отображается в 16 МБ физического адресного пространства. ниже линии 4 ГБ - то есть физические адреса от FF000000
до FFFFFFFF
. (Чтобы снова использовать ICH10 в качестве примера: то, какая часть этого адресного пространства отображается на NVRAM, контролируется регистром набора микросхем, известным как FWH_DEC_EN
, " Регистрация дешифрования концентратора микропрограммного обеспечения", регистрация. Микропрограмма кодируется для перепрограммирования регистра FWH_DEC_EN
соответствии с размером фактического чипа NVRAM, установленного на материнской плате. Но верхние 512 КБ NVRAM всегда отображаются на физические адреса FFF80000
на FFFFFFF
и не могут быть отключены.) Код, первоначально выполняемый процессором сразу после сброса, находится в верхних 64 КБ этого диапазона адресов 16 МБ.
Что касается затенения в ПЗУ BIOS (как его называют - почему barlop
считает, что затенение ЦП является загадкой): Да, доступ к NVRAM на шине LPC или концентратору микропрограммного обеспечения все еще не такой быстрый, как доступ к основному системная (энергозависимая) оперативная память. Но причины, по которым слежка важна, значительно уменьшились с появлением операционных систем, таких как OS/2 и Windows NT - снова в конце 1980-х и начале 1990-х годов. Операционные системы реального режима, такие как MS-DOS, PC-DOS, DR-DOS и т.д., Были наслоены поверх функциональных возможностей ввода-вывода, обеспечиваемых микропрограммой устройства. Таким образом, код прошивки и данные только для чтения в конечном итоге стали доступны во время выполнения. Операционные системы защищенного режима, такие как OS/2 и Windows NT, в гораздо меньшей степени полагаются на предоставляемые микропрограммой службы во время выполнения. Таким образом, тот факт, что код, выполняемый из NVRAM, и данные, предназначенные только для чтения, поступают в процессор медленнее, чем при теневом копировании в системную память, представляет собой меньшую проблему, чем раньше.
Кроме того, какой код прошивки и данные они полагаются на не обязательно жить в той части NVRAM отображается в части физического адресного пространства, вышеупомянутая окно 128KiB "обычной памяти", то есть обязательно даже shadowable в первую очередь. Не все службы встроенного ПО защищенного режима должны располагаться ниже линии 1 МБ в физическом адресном пространстве, как службы встроенного ПО реального режима, а некоторые - нет. (И, конечно , это было бы возможно только сделать тот же трюк с областью физического адресного пространства , что они живут, если есть по крайней мере 4GiB системная память.)
По иронии судьбы, более точным источником информации об этом, чем С. Эбрагим Шуббар в 2002 году, является книга Фила Краучера « BIOS Companion», выпущенная годом ранее в 2001 году. М. Краучер отмечает, что Unices, Linux, Windows NT и «предположительно (95/98)» "не получают никакой выгоды от теневого копирования". Это не обязательно совсем бесполезно , но это сравнительно очень мало по сравнению с миром людей, использующих MS-DOS, PC-DOS и DR-DOS в реальном режиме на 16-битных машинах 80286 в 1989 году.