BIOS считывается из микросхемы BIOS или копируется в RAM при запуске?

10

Когда вы впервые включаете компьютер, сначала настраивается цикл выборки / выполнения для получения инструкций из микросхемы BIOS непосредственно в регистр команд в ЦП, или есть автоматическая схема, настроенная таким образом, что при обнаружении включения команды в Чип BIOS автоматически загружается в оперативную память?

Обновить

Я думаю, что нашел свой ответ здесь :

После выключения сигнала сброса ЦПУ начинает работать. Код в ОЗУ не может быть выполнен, так как ОЗУ пусто. Производители ЦП предварительно программируют процессор так, чтобы он всегда начинал выполнять код по адресу «FFFF: 0000» (обычно ПЗУ BIOS) ПЗУ.

Таким образом, центральный процессор физически настроен на загрузку и выполнение адреса памяти FFFF: 0000 в ПЗУ, как только он включен.

mring
источник
1
Если вы найдете ответ самостоятельно, опубликуйте его как ответ ниже, а не редактируйте его в вопросе. (Вы можете принять свои собственные ответы через некоторое время.)
user1686
В книге «Модернизация и ремонт ПК» упоминается место в памяти, из которого первый процессор читает данные. И есть учения, которые старые учителя CS могут применять, называемые «начальной загрузкой», например, «подтягиванием себя» с помощью начальной загрузки. основание) ОС загружается.
Бароп

Ответы:

3

У большинства плат в BIOS была опция для настройки этого поведения. Обычно это называлось теневым копированием, и обычно оно было включено по умолчанию. Я не думаю, что многие форумы утруждают себя выбором в эти дни и просто всегда находятся в тени. Причина в том, что ОЗУ быстрее ПЗУ, поэтому оно ускоряет копирование в ОЗУ и запуск его оттуда.

Обратите внимание, что копирование не выполняется какой-то магической схемой, оно просто выполняется самим биосом, когда он первоначально начинает выполнять из ПЗУ, он просто копирует себя в ОЗУ, а затем продолжает выполняться оттуда.

psusi
источник
Итак, из того, что я понимаю из того, что вы сказали, при обращении к жизни ЦП читает инструкции из ПЗУ, в которых говорится: «Скопируйте все инструкции по запуску здесь, в ПЗУ, в ОЗУ, а затем установите счетчик программ на такой-то начальный адрес в оперативной памяти. " Это правильно?
mring
@psusi У вас есть ссылки, объясняющие, о чем вы говорите? Затенение процессора меня не особо привлекает, и как его можно настроить. А когда ты о чем? Когда у материнских плат была эта опция? Можете ли вы указать какие-либо модели материнских плат, у которых была бы эта опция?
Бароп
18

Это еще один случай, когда полученная народная мудрость по этому вопросу, как, к сожалению, подтверждается 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 году.

JdeBP
источник