4

Я читал, что микрокод загружается в процессор при каждой перезагрузке. Он находится на флэш-памяти и при загрузке машины копируется в процессор. Или в случае Linux, сама ОС имеет копию микрокода для процессора. Но как микрокод копируется в процессор? Все данные перемещаются в компьютер с согласия процессора. Процессор дается инструкции на машинном языке. Поскольку микрокод является обязательным для выполнения этих инструкций машинного языка, поэтому, если микрокод не присутствует в процессоре, как инструкция для доступа к флэш-памяти и выполнения последующих операций выполняется ЦП? Означает ли это, что жесткие инструкции без микрокодирования копируют микрокод в реальном режиме?

4 ответа4

8

Современные процессоры поставляются с уже установленным микрокодом. Этот микрокод находится в специальной области ПЗУ на самом ЦП и не может быть изменен / удален. Таким образом, процессор может функционировать "из коробки".

Системный BIOS и / или операционная система может инициировать загрузку обновления микрокода в ЦП. Такое обновление - это не полный микрокод, а небольшой патч для исправления ошибок. Для этого процессор содержит небольшую область энергозависимой оперативной памяти.

Полезная ссылка: https://www.dcddcc.com/pubs/paper_microcode.pdf

6

Я читал, что микрокод загружается в процессор при каждой перезагрузке.

BIOS может выдать обновление микрокода во время загрузки. Так может операционная система. Часто эти обновления требуются, особенно с более поздними процессорами Intel.

Он находится на флэш-памяти и при загрузке машины копируется в процессор. Или в случае Linux, сама ОС имеет копию микрокода для процессора. Но как микрокод копируется в процессор?

Современные Intel и процессоры имеют механизм под названием «Регистры, зависящие от модели», и специальные инструкции процессора для чтения (RDMSR) и записи в них (WRMSR). Хотя эти регистры влияют на настройки ЦП, запись в конкретный регистр с адресом нового микрокода указывает ЦПУ прочитать область памяти и применить ее к существующему микрокоду.

Все данные перемещаются в компьютер с согласия процессора. Процессор дается инструкции на машинном языке. Поскольку микрокод является обязательным для выполнения этих инструкций машинного языка, поэтому, если микрокод не присутствует в процессоре, как инструкция для доступа к флэш-памяти и выполнения последующих операций выполняется ЦП?

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

Означает ли это, что жесткие инструкции без микрокодирования копируют микрокод в реальном режиме?

Первоначальная настройка микрокода выполняется внутри процессора, и никакие инструкции для этого не выполняются. Он настраивается перед выполнением первой инструкции процессора.

Для обновления BIOS необходимо выполнить соответствующие инструкции RDMSR и WRMSR.

Ссылка: «Эта инструкция должна выполняться на уровне привилегий 0 или в режиме реального адреса; в противном случае будет сгенерировано исключение общей защиты #GP(0)». Если это не выполняется в реальном режиме, это должно быть сделано в режиме 0 или в режиме ядра. Вы можете обновить микрокод в любое время.

3

Вопрос плохо сформулирован. В современном процессоре x86/IA64 много "микрокодов", и есть разница между "микрокодовым патчем" и микрокодом.

Микрокод в своем классическом понимании (как пошаговые элементы выполнения длинных инструкций процессора) почти наверняка встроен в кремний, поскольку нет причин оставлять ошибки нефиксированными во многих поколениях процессоров, когда новые кремний /RTL компилируется с каждым новым производственным узлом.

Тем не менее, все последние процессоры имеют несколько внутренних блоков, которые управляются независимыми микропроцессорами, встроенными в чип процессора x86.

Наиболее известным / известным является так называемый «P-блок», процессор, который управляет динамическим управлением питанием процессора. По мере роста частоты ядра и увеличения утечки при дальнейшей миниатюризации транзисторов ЦП единственным способом удержать мощность в разумных пределах является агрессивное регулирование тактовой частоты и динамическое регулирование питания. Проблема состоит в том, что ЦП может выполнять бесконечное множество программных кодов, и каждый из них достигает определенного пика энергопотребления. Некоторые образцы "мощных вирусов" могут быть неизвестны в тот момент, когда ЦП был доработан для розничной торговли, и некоторые параметры алгоритмов управления должны быть исправлены. Это делается с помощью специальных "патчей микрокодов".

Есть еще несколько микропроцессоров такого типа, которые управляют другими блоками ЦП, такими как графика и память.

Детали процесса исправления являются совершенно секретными, чтобы предотвратить злонамеренное вмешательство. Вот отчет хакера о попытке реинжиниринга механизма.

Короче говоря, микрокод архитектуры x86 не загружается в современные процессоры, но микрокоды для различных вспомогательных встроенных микропроцессоров могут иметь патчи.

1

Обновление микрокода - это исправление только для существующего микрокода процессора, которое постоянно записывается в ПЗУ. Процессор имеет постоянное ПЗУ и патч-память, которая может содержать новый код. Существует также таблица значений "соответствия", которая находится в оперативной памяти. В этой таблице есть запись для каждой исправляемой части ПЗУ. Когда процессор выполняет исправляемую инструкцию, он проверяет эту таблицу. Если есть запись, то она использует код в оперативной памяти. Если он имеет значение по умолчанию, то он переходит на ROM. Таким образом, для исправления ЦП необходимо загрузить новый код в ОЗУ, а затем соответствующим образом изменить записи в таблице соответствий. Процедура для этого примерно следующая:

  1. Очистите EAX, прочитайте текущую сигнатуру процессора, используя CPUID, и загрузите соответствующее обновление микрокода в память ядра.

  2. Очистите EAX и EBX и прочитайте текущую версию микрокода, используя инструкцию RDMSR из конкретного регистра соответствия версии.

  3. Запишите адрес памяти обновления микрокода, используя инструкцию WRMSR, в регистр соответствия обновлений.

  4. Прочитайте новую версию микрокода и верните успех, если он совпадает с обновлением. В противном случае верните ошибку.

В операционных системах на основе Linux этот процесс выполняется при загрузке специальным модулем ядра, который называется "микрокод". Вы можете прочитать исходный код этого модуля, чтобы увидеть точный процесс.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .