Это еще один случай, когда полученная народная мудрость по этому вопросу, как, к сожалению, подтверждается psusi
ответом и действительно частью вопроса, застряла в мире примерно в 1991 году, несмотря на множество доступных технических ссылок, объясняющих, как это происходит сейчас. в противном случае.
В мире конца 1980-х годов прошивка машины - одна из двух вещей, называемых «BIOS» в мире IBM PC-совместимых - действительно была в микросхеме ПЗУ на шине ISA; и процессоры действительно начали выполнять код по физическому адресу 000FFFF0
, месту в «обычной памяти», доступ к которому осуществляется через указатель реального режима. F000:FFF0
Этот мир давно исчез.
(Мир, в котором ошибочно живет автор WWW-страницы С. Эбрагим Шуббар, несмотря на то, что он писал в 2002 году, еще старше. Процессоры не начинали с CS:IP
комбинации FFFF:0000
с 8086 года. 80286 изменил это на F000:FFF0
. Но 80286 мир сам по себе является весьма устаревшее мира конца 1980 - х годов , что народная мудрость до сих пор циркулируют.)
Ваш "чип BIOS" - это RAM; и ваш процессор не 16-битный.
В современных ПК прошивка машины хранится в энергонезависимой оперативной памяти . Чип NVRAM подключен к шине LPC (или к выделенному интерфейсу «Firmware Wub»), а мост LPC / FWH в «чипсете» обычно отключает циклы записи в него. «Перепрошивка» прошивки включает в себя установку регистров набора микросхем, которые разрешают запись в NVRAM и затем запись в NVRAM. (Например, в Intel ICH10 бит регистра набора микросхем, который позволяет выполнять циклы записи, называется BIOSWE
«BIOS Write Enable». Есть некоторые дополнительные детали, которые я здесь пропущу, но в этом суть.)
Процессоры x86 не начинали выполнение на месте 000FFFF0
со времен 80286. 32-разрядные процессоры запускаются в так называемом нереальном режиме . Даже если начальное значение CS
регистра после сброса равно F000
, дескриптор сегмента, связанный с этим регистром, изначально хранится в FFFF0000
качестве его базового адреса. Таким образом, физический адрес , который изначально соответствует в CS 16:16: IP - адрес F000:FFF0
, на самом деле, и было со времен 80386 FFFFFFF0
.
И именно здесь микропрограмма машины в основном отображается в физическое адресное пространство на 32-разрядных и 64-разрядных компьютерах x86. В области «обычной памяти» имеется окно для встроенного программного обеспечения объемом 128 КБ, но NVRAM, на котором установлено встроенное программное обеспечение компьютера, может иметь размер до 16 МБ (хотя это зависит от набора микросхем) на современных ПК и, как правило, немедленно сопоставляется с 16 МБ физического адресного пространства. ниже линии 4GiB - то есть физические адреса FF000000
для FFFFFFFF
. (Чтобы снова использовать ICH10 в качестве примера: то, какая часть этого адресного пространства отображается на NVRAM, контролируется регистром набора микросхем, известным как регистр FWH_DEC_EN
"Firmware Hub Decode Enable". Регистр. Микропрограмма кодируется для перепрограммированияFWH_DEC_EN
зарегистрироваться в соответствии с размером фактического чипа NVRAM, установленного на материнской плате. Но вершина 512KiB из NVRAM будет всегда отображаться, в физические адреса FFF80000
в FFFFFFF
, и не может быть отключен.) Код сначала выполняется процессором сразу после сброса жизни в верхнем по 64Kb этого диапазона адресов 16MiB.
Что касается затенения в ПЗУ 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 году.