Что такое микрокод и чем он отличается от прошивки?


50

Что касается терминологии, что именно представляет собой «микрокод» и если его можно обновить, чем он отличается от прошивки?

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

Обновить

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

  1. «Микрокод процессора сродни микропрограммному обеспечению процессора». Когда я читаю это все больше и больше, вот как я это воспринимаю. «Микрокод» в этом контексте просто рекламирует «прошивку процессора». Потерпите меня,..
  2. Или я ошибаюсь, и я знаю, что это происходит! В этом случае мне нужно гораздо более полное представление о том, почему я не прав. В этих ответах, которые я прочитал, чтобы показать, что я неправ, я изо всех сил пытаюсь понять их,
    • «Выполнение против данных» многие ответы используют эту парадигму, но для процессора это не имеет большого смысла для меня. Какая-то прошивка assert выполнена, но чем? Когда дело доходит до процессора, это инструкции программ или данные?
    • Если микропрограмма соединяет программное и аппаратное обеспечение (читай: электротехническое дело Богов), то как микрокод также не удовлетворяет этому различию?
    • «Интерпретация» с течением времени, это даже имеет все меньше и меньше смысла. Что значит сказать «аппаратные инструкции интерпретируются» с помощью микрокода. Если бы это было правдой, было бы что-то столь же производительным, если бы оно не интерпретировалось, а было предварительно скомпилировано с другими аппаратными инструкциями и просто «выполнялось»? Кроме того, как General MIDI не интерпретируется в том же свете? Это язык, который интерпретируется как «MIDI-микрокод» и работает на оборудовании. Или тупые терминалы, которые интерпретируют инструкции телепринтера для визуального отображения?
    • Применяется ли «микрокод» к коду, который работает на звуковых картах и видеокартах (графических процессорах) ?

Я не эксперт, но я бы сказал, что микрокод - это прошивка процессора. Я полагаю, что все данные о том, как выполняется микрокод, были бы запатентованы Intel / AMD, но я могу догадаться, как это будет работать. У вас есть простой набор процессоров, базовые вещи, такие как выборка из памяти и математические операторы. Затем у вас есть сложный набор инструкций (например, x86 / intel). Процессор получает инструкцию из памяти и использует микрокод для преобразования сложных команд в более простые. Одним из примеров будет умножение. Большинство процессоров имеют инструкцию умножения, но на самом деле умножение состоит из нескольких битовых сдвигов.
Программирование

Термин «микрокод» относится к тому факту, что он использует / лежит в основе многих инструкций «кода» процессора. Это в основном говорит процессору, как эмулировать инструкции и функции. Отсюда и название. С точки зрения владельца компьютера, это еще один набор кода, поставляемый поставщиком оборудования, поэтому его можно альтернативно обобщить как прошивку.
Eckes

ИМО, лучший простой ответ: «Каждый раз, когда процессор выполняет инструкцию, он фактически выполняет программу микрокода». То, что вам кажется инструкцией с одним процессором, - это особая последовательность инструкций микрокода, «программа микрокода». Каждая инструкция имеет свою собственную программу микрокода. Отдельные инструкции микрокода включают / отключают / и т. Д. Различные внутренние биты процессора.
Итан Реесор

Ответы:


57

Происхождение слова «прошивка» - это середина между аппаратным и программным обеспечением - программным обеспечением, встроенным в аппаратное обеспечение. Это относится к программному обеспечению, которое хранится в энергонезависимой памяти на аппаратном устройстве. Примерами являются EEPROM и флэш-память, встроенные в аппаратные устройства, когда они используются для хранения кода, который выполняется самим устройством.

В некоторых типах аппаратного обеспечения все чаще встречается его «прошивка», которая хранится в программном обеспечении драйвера и загружается на устройство при загрузке / инициализации, а не остается постоянно на устройстве. В настоящее время нет ничего сложного, например, сохранить несколько сотен килобайт кода прошивки в программном драйвере, загруженном на хост-ОС, и отправить его на устройство, как оно было инициализировано драйвером.

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

Микрокод является подмножеством этого последнего типа «прошивки». Микрокод не является общим термином для всех «прошивок», которые загружаются на устройство при загрузке. Вместо этого он специфичен для процессоров, где микрокод в основном формирует слой перевода между стандартными инструкциями CPU более высокого уровня и операциями более низкого уровня, специфичными для этого CPU. Он загружается в CPU при загрузке с помощью BIOS, но может быть позже заменен на этапе загрузки операционной системой.

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

Обратите внимание, что Meltdown (уязвимость, затрагивающая только микросхемы Intel) не может быть исправлена ​​только с помощью обновлений микрокода и требует изменений в функциональности базовой ОС, что может еще больше снизить производительность. Spectre (уязвимость, затрагивающая чипы Intel, AMD и ARM) может быть обойден только с помощью обновлений микрокода.


Чтобы ответить на некоторые ваши конкретные вопросы с момента вашего редактирования:

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

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

  2. Я не думаю, что ты не прав. Прошивка не должна быть написана на определенном машинном языке, и ее выполнение не должно запускаться определенным образом. На определенном низком уровне весь машинный код является «данными», которые «читаются» процессором и интерпретируются определенным образом.

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


1
Ваше второе предложение неверно; прошивка включает в себя программное обеспечение, хранящееся в ПЗУ. Когда-то давно большинство прошивок было в ПЗУ, прежде чем альтернативы стали доступными.
Гарри Джонстон

1
Ясно, что «микрокод» специфичен для процессора. Вопрос не в том, чтобы быть конкретным, а в том, делает ли он что-то другое. Удалив область («ЦП»), вы получите почти прямую цитату «уровня перевода между инструкциями более высокого уровня и операциями более низкого уровня». Это в значительной степени только определение прошивки. Разве это не то, что делает все прошивки? Это много слов, но я думаю, что наиболее описательным и кратким описанием является приведенное выше: «Микрокод процессора сродни микропрограммному обеспечению процессора».
Эван Кэрролл

@Evan, большинство устройств получают свои инструкции косвенно, отправленные из кода, работающего на CPU. Только процессор непосредственно обрабатывает код, предоставленный пользователем. Также учтите, что большинство устройств содержат какой-либо встроенный процессор, который выполняет прошивку, и этот процессор может иметь свой собственный микрокод. Различие может иметь значение только для разработчиков оборудования и программистов ядра, но оно не является произвольным.
Гарри Джонстон

«Большинство устройств содержат какой-то встроенный процессор, который выполняет прошивку, и этот процессор может иметь свой собственный микрокод», - вот что я имею в виду. То есть код, обрабатывающий миди-поток на звуковой карте, также является «микрокодом»? Или код, который рисует / отображает отображаемые символы на немом терминале?
Эван Кэрролл

Нет. Код, который работает на звуковой карте для обработки потока MIDI, - это просто обычная прошивка. Код, который обрабатывает код, который выполняется на звуковой карте для обработки потока MIDI, будет микрокодом. (На практике я не уверен, что встроенному ЦП на чем-то столь же простом, как звуковая карта, во-первых, понадобится микрокод, но это не относится к делу.) Главное, что MIDI-поток или символы отправляются на тупой терминал, не код. Они просто данные.
Гарри Джонстон

23

https://wiki.debian.org/Microcode

Микрокод процессора

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

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

BIOS (или UEFI) обновляет микрокод ЦП во время загрузки, однако большую часть времени либо поставщик материнских плат не будет выпускать частые обновления BIOS / UEFI, либо пользователь не будет устанавливать такие обновления. По этим причинам системный процессор, вероятно, будет работать с устаревшим микрокодом в огромном количестве систем.

Примеры:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
Это не так просто: микрокод - это «метод, который навязывает интерпретатор между аппаратным и архитектурным уровнем компьютера». Как таковой, микрокод представляет собой уровень инструкций аппаратного уровня, которые реализуют высокоуровневые инструкции машинного кода или последовательность внутренних конечных автоматов во многих элементах цифровой обработки. Источник: en.wikipedia.org/wiki/Microcode

17
Так что подождите ... "лодка" - это просто особый вид "транспортного средства"? Какое бесполезное слово! :-)
Гарри Джонстон

4
@HarryJohnston Ну, я считаю довольно полезным отличать «лодку» от других типов транспортных средств в определенных контекстах ... а «микрокод» - это очень специфический тип «чего-то», присутствующего во многих современных процессорах ... ( таким образом, весьма желательно иметь термин для этого).
Радован Гарабик

4
@ RadovanGarabík: Это точно точка зрения Гарри, сделанная с сарказмом.
Питер Кордес

4
Я не понимаю Если «Ядро может обновлять микропрограмму процессора без необходимости его обновления через обновление BIOS», то почему тот факт, что «поставщик материнских плат не будет выпускать частые обновления BIOS / UEFI», означает, что «системный процессор может быть запущен с устаревшим микрокодом в огромном количестве систем? Почему ядро ​​не просто исправляет микрокод? Зачем полагаться на BIOS, если BIOS никогда не обновляется, и есть более часто обновляемая альтернатива?
Ajedi32

6

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

Эти обновления унифицированных пакетов процессоров, которые мы называем «обновлениями микрокодов» для Intel, также обновляют другие встроенные микроконтроллеры (такие как PMU и ядро ​​управления питанием), а также несколько таблиц параметров для различных подсистем встроенных процессоров. Они довольно сложны.

Эта информация доступна по нескольким патентам Intel, связанным с обновлениями микрокодов и микрокодов.


4

Я думаю, что термин «микрокод» относится в первую очередь к тому, что делает код (он выполняет инструкции низкого уровня, используя даже инструкции более низкого уровня), в то время как термин «микропрограмма» относится главным образом к тому, как он хранится и управляется (менее легко обновляется, чем программное обеспечение). , более легко обновляется, чем аппаратное обеспечение). В этом смысле это скорее похоже на различие между «приложением» и «файлом JAR» - одна и та же программа может быть и тем и другим, но вы смотрите на это с двух разных точек зрения.

Кстати, идея микрокода восходит к Морису Уилксу в 1951 году, за десятилетия до того, как компьютерные процессоры были встроены в кремний.


3

Прошивка обычно относится к коду для устройств, которые содержат ЦП, а не сам ЦП, например, прошивка для телефона Android.

Микрокод - это слой перевода между сложными наборами команд (например, 486, 686, AMD-64 и т. Д.) И инструкциями более низкого уровня, для которых производители микросхем разрабатывают кремний. Таким образом, ряд инструкций в наборе команд ЦП не реализован в кремнии, а переведен через микрокод в несколько команд, которые реализованы в кремнии.


Но разве это не правда для всех прошивок? Инструкции ABI, которые могут быть реализованы в Silicon, но не обновляются и не обновляются с помощью программного обеспечения?
Эван Кэрролл

1
«Обновления микрокода» от Intel могут не только изменить способ декодирования микрокодированных инструкций . Например, они могут отключить буфер цикла (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы это было возможно в случае обнаружения аппаратных ошибок.
Питер Кордес

3

«Микрокод» был первоначальным термином и относился к инструкциям, которые использовались для реализации интерпретатора для «открытого» набора процессоров.

Но со временем, со многими вариациями в схемах реализации, различие, как оно было, стало более расплывчатым. Сначала был горизонтальный против вертикального микрокода, затем различные схемы записи «микрокода» (для реализации, скажем, команд ввода / вывода) в «основном» наборе команд процессора. Затем возникла необходимость различать код, который легко загружался с помощью обычных операций «запуска» программы, и код (например, для BIOS), который был сохранен в ПЗУ или каком-либо другом защищенном и относительно неизменном хранилище. Таким образом, термин «встроенное программное обеспечение» был изобретен для обозначения этих инструкций, которые каким-то образом стали более постоянными (и менее доступными для модификации пользователем) в хранилище.

Но с тех пор, как были сделаны эти первые различия, вещи многократно изменялись и перекручивались, и теперь термины могут быть определены только с какой-либо точностью в пределах конкретного процессора и среды ОС.


+1, ключ здесь в том, что есть много значений термина «микрокод», и я думаю, что ОП действительно хочет знать об «обновлениях микрокода», а не о других значениях.
Питер Кордес

3

[NB: этот ответ специально предназначен для недавнего редактирования и не добавляет других звуковых ответов, которые уже были опубликованы.]

Итак, еще раз: микрокод (по крайней мере, в первом приближении) - это особый вид прошивки.

«Микрокод» в этом контексте просто рекламирует «прошивку процессора».

Ну, это не маркетинг. Маркетинг назвал бы это XBoost Pro (TM) или что-то в этом роде. Скорее это инженерный термин; если вы проектируете ЦП, для вас важно различие между микрокодом и другими микропрограммами ЦП (и тип микропрограммы, типичной для других устройств). Если нет, то, вероятно, нет.

Если вы проектируете материнские платы или пишете операционные системы, вы, вероятно, используете «обновление микрокода» в качестве сокращения для более громоздкого и менее знакомого «обновления прошивки ЦП». Большинство обновлений микропрограммы ЦП в первую очередь влияют на микрокод, поэтому он достаточно близок к тому же. Вы, вероятно, знаете разницу, но вам не нужно заботиться об этом.

Конечный пользователь не должен знать или заботиться о разнице, и в идеальном мире никогда не услышит слово «микрокод» вообще.

Я предполагаю, что это привлекло ваше внимание при освещении в прессе недавних уязвимостей спекулятивного исполнения, хотя вы, возможно, также слышали это ранее в контексте, который сделал более очевидным, что вам не нужно заботиться. Эти уязвимости были выпущены раньше, чем планировалось, что могло привести к тому, что освещение в прессе было менее интересным, чем могло бы быть. С точки зрения конечного пользователя, вам необходимо установить обновления BIOS, обновления операционной системы и, в некоторых случаях, обновления приложений; Вам не нужно ни знать, ни заботиться о том, какие из них содержат новый микрокод.


Итак, даже понимая, что вам, вероятно, не нужно знать или заботиться, вы все равно можете быть заинтересованы из чистого любопытства: как вы можете отличить микрокод от других прошивок?

Ну, первое, что нужно признать, это то, что не обязательно существует одно точное и быстрое определение, это скорее ситуация Блеггса и Рубеса . Тем не менее, есть несколько вещей, которые мы можем сказать о микрокоде:

  • Микрокод обычно работает внутри процессора, а не на процессоре. Это представление высокого уровня.

  • Архитектура микрокода обычно выглядит совершенно иначе, чем архитектура обычного кода, включая обычные прошивки. Вероятно, он будет в высокой степени параллельным и будет реализован гораздо ближе к аппаратному обеспечению. Некоторые из существующих ответов (включая ваш собственный ответ) обсуждают это, хотя следует отметить, что детали могут различаться в зависимости от конструкции процессора.

  • Несмотря на то, что аппаратное обеспечение часто предназначено для запуска только встроенного программного обеспечения, предоставленного производителем, использование стороннего встроенного программного обеспечения не является чем-то необычным, хотя, вероятно, это приведет к аннулированию гарантии! Сторонний микрокод гораздо реже, хотя я считаю, что в древние времена (я имею в виду, когда процессор был размером с хлебную коробку), некоторые конечные пользователи изменяли микрокод в своих процессорах. Насколько я знаю, это невозможно в процессорах, используемых в ПК.

  • Микрокод обычно транслирует или помогает реализовать общедоступную архитектуру набора команд, т. Е. Выполняет машинный код, который используют разработчик операционной системы и программисты приложений. Подробнее об этом в следующем разделе.


«Выполнение против данных» многие ответы используют эту парадигму

Я боюсь, что это может привести к путанице, но я отвечу на свой комментарий. Этот раздел также служит для расширения последнего пункта выше. Цель здесь состоит в том, чтобы попытаться провести различие между работой, которую выполняет ЦП (достигается с помощью комбинации аппаратного обеспечения и микрокода), и работой, которую выполняет типичное устройство (достигается с помощью комбинации аппаратного и встроенного программного обеспечения). Я собираюсь выбрать жесткий диск SATA.

Диск SATA следует инструкциям компьютера, которые выглядят следующим образом: «прочитать данные из сектора 5,123» и «записать эти данные в сектор 1,321». Микропрограмма привода отвечает за то, чтобы аппаратные средства сделали это, и это, как правило, довольно обычный код, работающий на каком-то встроенном процессоре. Инструкции привода поступают последовательно, хотя они могут не обрабатываться в том порядке, в котором они поступают. Эти инструкции не являются программой, они отправляются программой, работающей на главном процессоре. В частности, отсутствует поток управления, т. Е. Нет инструкции, указывающей накопителю SATA, какие инструкции следует выполнить дальше.

Процессор отвечает за компьютер. После завершения инициализации он выполняет инструкции («машинный код»), предоставляемые материнской платой (BIOS, другой тип прошивки), которые предписывают ему запускать машинный код, предоставленный операционной системой, который направляет его на выполнение предоставленного машинного кода. поставщиками приложений. Сам ЦП извлекает машинный код из ЭСППЗУ (в случае BIOS) или ОЗУ (в случае операционной системы и приложений). В частности, машинный код имеет поток управления: машинный код сообщает процессору, какой машинный код выполнять дальше. Вы можете циклически повторять один и тот же машинный код, вы можете запускать разные биты кода в зависимости от данных, над которыми работает код - инструкции на языке интерфейса устройства, таком как код SATA, могут выполнять ограниченный набор простых задач, но машинный код может делатьчто угодно . (См. Также полнота по Тьюрингу .)

Мы могли бы переписать этот последний пункт выше: микрокод обычно реализует язык Turing Complete; обычная прошивка обычно не делает.


Что значит сказать «аппаратные инструкции интерпретируются» с помощью микрокода.

Правда, но, вероятно, сбивает с толку; Важным моментом является различие между машинным кодом, который имеет поток управления и является Turing Complete, и инструкциями, определенными интерфейсом устройства, таким как SATA, который не является и не является.


Применяется ли «микрокод» к коду, который работает на звуковых картах

Нет, звуковые карты получают инструкции, а не код, как диски SATA. Инструкции могут быть как «Play A Sharp» или «интерпретировать эти данные как сигнал и воспроизводить их». Все еще очень просто.

а видеокарты (графические процессоры)?

Старомодные видеокарты (без графических процессоров) такие же, как и диски SATA. Инструкции как «установить этот пиксель в этот цвет» или «написать A в этой позиции».

... GPU сложны и находятся где-то между двумя мирами, которые я пытался описать выше. Вероятно, проще всего думать о них как о специализированном компьютере, который находится внутри основного компьютера, который имеет свои собственные процессоры. Это правда, что устройства, такие как диски SATA, также имеют встроенные процессоры, но разница в том, что встроенный процессор в диске SATA выполняет только код, предоставленный производителем диска, тогда как на графических процессорах также выполняется код, предоставленный операционной системой и / или поставщиком приложений. На самом деле это целый отдельный вопрос.


TL; DR: микрокод - это особый вид прошивки, который помогает аппаратному обеспечению реализовать набор инструкций Turing Complete.


1

Микрокод ( «хранилище управления» ) - это данные, которые находятся в энергозависимой или энергонезависимой памяти - как правило, это небольшая, но очень широкая память, выходные сигналы данных которой подключены к входам управляющих сигналов параллельных аппаратных функциональных блоков, логике случайного управления и т. Д. Адресные входы памяти микрокодов обеспечиваются конечным автоматом, который последовательно перебирает слово памяти («инструкция микропрограммы») для эффективной последовательности управляющих сигналов одного или нескольких аппаратных блоков. Это аппаратное мультиплексирование по времени и позволяет выполнять сложные операции со значительно меньшей случайной логикой.

В современных микропроцессорах может существовать иерархия модулей микрокода / секвенирования, необходимых для абстрагирования микроархитектуры физического кремния в более общее семейство архитектур с общим интерфейсом «машинный код». Например, может быть несколько уровней микрокода / последовательности для реализации декодеров команд и модулей с плавающей запятой.

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

Микрокод может быть реализован в микропрограмме / микропрограмма может содержать микрокод, но они не совпадают.


1
Современные процессоры x86 гораздо более жесткие, чем вы описали; Похоже, вы описываете не конвейерный 386, а не Haswell / Skylake. «Обновления микрокода» от Intel могут не только изменить способ декодирования микрокодированных инструкций . Например, они могут отключить буфер цикла (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы это было возможно в случае обнаружения аппаратных ошибок.
Питер Кордес

@PeterCordes 1) архитектура x86 не имеет отношения к представлению концепции микрокода 2) если бы вы поняли мой ответ, мы были бы согласны с тем, что он упорядочивает управляющие сигналы, как вы намекаете

1
Нет, Intel Uops на самом деле не являются управляющими сигналами. Они не программируют логические блоки напрямую, как в классическом конвейере MIPS. мопы считываются планировщиком вне очереди, чтобы выяснить, какие мопы имеют зависимость от данных и от каких других мопов. Это очень отличная внутренняя модель от чего-то типа 6502, где несколько этапов выполнения одной инструкции считываются из декодированного ПЗУ. То, что вы описываете, является историческим значением термина микрокод, но это не то, для чего нужны «обновления микрокода» для современных процессоров.
Питер Кордес

Где я (или вопрос в этом отношении) упомянул микрооперации Intel или x86 (которые НЕ совпадают с «микропрограммой» в хранилище элементов управления)? Кроме того, буквально все, что предоставляется из хранилища управления, является управляющим сигналом, независимо от того, является ли сигнал последовательным или статическим, логическим или проводным. То, что я описываю, является буквальным определением микрокода, «обновления микрокода» тоже. Вы одержимы аспектом последовательности моего ответа, потому что многие из упомянутых сигналов в Haswell будут статичными. Для записи, многие из них упорядочены, упорядочение абсолютно не является взаимоисключающим для конвейеризации или OoOE.

1
Таким образом, вы правильно отвечаете на вопрос «что такое микрокодированная инструкция» , но «обновление микрокода» для ЦП не имеет такого же технического значения слова «микрокод». Это важный момент, который следует четко указать, так как я думаю, что это является причиной путаницы ОП.
Питер Кордес

0

Прошивка - это исполняемый код, помещенный в ПЗУ или другую энергонезависимую память.

Первоначальная и основная цель прошивки заключается в том, чтобы присутствовать при запуске ЦП, поэтому у него есть код, который нужно выполнить для запуска или загрузки любой системы, частью которой является ЦП. В случае ПК встроенное ПО также используется для предоставления услуг работающей операционной системе, а также содержит код для встроенных контроллеров, управляющих вентиляторами, питанием и некоторыми другими вещами, и код для ME / PSP, который работает в фоновом режиме. ,

Периферийные устройства, использующие встроенное ПО, например жесткие диски, USB-устройства и т. Д., Имеют встроенный процессор.


Микрокод - это не исполняемый код, а код, используемый внутренними средствами устройства.

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

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

Сложные инструкции во многих процессорах напрямую не связаны аппаратно, а «выполняются» меньшим по размеру процессором в основном процессоре. Микрокод контролирует эти операции. Это восходит, по крайней мере, к Motorola 68000, который имел «MicroROM», содержащий микрокод.

Никто, кроме процессоров Intel или AMD, не знает, что на самом деле контролирует или делает микрокод, поскольку они не раскрывают подробности. Есть попытки взломать его. Ссылка .

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


Некоторое представление о том, что микрокод ЦП может на самом деле делать / на самом деле, можно получить, если вы прочитаете о ПЗУ декодирования 6502 PLA - 6502 - это старый 8-битный ЦП, и его инструкции были упорядочены / контролировались внутренним PLA. PLA в основном скажет, какие части чипа были задействованы на каждом шаге каждой инструкции (6502 инструкции находятся в диапазоне от 2 до 7 циклов). Это далеко, намного раньше, чем такие вещи, как кэширование, суперскалярная архитектура, прогнозирование ветвлений и т. Д. Не уверен, что микрокод на современных процессорах будет управлять чем-то вроде этого PLA.


1
«Обновления микрокода» от Intel могут не только изменить способ декодирования микрокодированных инструкций . Например, они могут отключить буфер цикла (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы это было возможно в случае обнаружения аппаратных ошибок.
Питер Кордес

1
Интересный момент о 6502 PLA, но конвейерные процессоры должны быть более жесткими, чем это. Классический MIPS использовал разные поля командного слова для непосредственного управления внутренней логикой, что-то вроде этого, но, конечно, конвейерный ЦП имеет несколько команд в полете, возможно, по одной для каждой стадии конвейера, если нет остановок. (Или для суперскалярных, 2 или более на каждой стадии конвейера, а для вышедших из строя это еще более сложно.) Многие внутренние компоненты современных процессоров имеют жесткую проводку, но с ручками, которые могут обновляться микрокодами.
Питер Кордес

0

терминология

Я отвечу на это сам, используя только контекст использования в этом PDF-файле .

  • Firmware - микрокод будет обновлен через путь , предоставленный прошивкой процессора.

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

  • Микрокод - это сами данные, используемые «модулем декодирования инструкций (IDU)». ПИН может быть как проводным, так и микрокодированным . Микрокодирование в этом контексте означает просто программирование. ТАКЖЕ означает «множество микрокодов». ПИН

    Блок IDU играет центральную роль в блоке управления и генерирует сигналы управления на основе содержимого регистра команд.

  • Макроинструкция одной инструкцией, отправляемой в ПИН для декодирования, может вернуть любое количество микроинструкций .

  • Микроинструкция одно предварительно вычисленное «управляющее слово», все состояния и инструкции для выполнения за один тактовый цикл. Отправляется в CPU для генерации управляющих сигналов .

Таким образом, в этом контексте вы обновите микрокод прошивкой. Вы бы отправили макрокоманды в микрокодированный IDU, чтобы преобразовать макрокоманду в «микрокоманду» для выполнения на ЦПУ, которая превращает их в управляющие сигналы.

Мое чтение этого

Микрокод - это данные , но обновление микрокода выполняется с помощью прошивки. И это сбивает с толку, потому что вы говорите о том, что по существу равнозначно внутренней справочной таблице, это, безусловно, также сама прошивка, поскольку она в основном хранится в микросхеме и используется в потоке выполнения микросхемы. Я думаю, что вы могли бы поспорить, что General MIDI, аппаратный PostScript и управляющие сигналы для немых терминалов также интерпретируются в том же смысле аппаратно, и что что- то берет инструкцию и в конечном итоге генерирует «управляющие сигналы» в некотором процессе интерпретации. ,

Кажется, у нас есть специальные имена для этих процессов и компонентов в ЦП: «IDU» в ЦП и имя для конкретной входной таблицы, в которой используется IDU, которая содержит все «микроинструкции»: «микрокод». Информация об этом процессе является частной и закрытой. Я бы предположил, что она аналогична любой другой технологии от модемов (с ATDT и т.п. на модеме Hayes) до MIDI-карт, но мы не называем конкретную таблицу поиска «микрокод», а вместо этого используем общий термин «прошивка» для процесс перепрошивки и вся полезная нагрузка хранятся на чипе.


2
Linux (и Windows) могут обновлять микрокод процессора независимо от прошивки материнской платы, о которой вы говорите. Материнские платы прошивка делает содержит последнюю версию микрокода процессора и механизм его применения , прежде чем какой - либо код загружается с диска, но если вы не обновили прошивку Mobo некоторое время, вы все равно можете иметь последнюю версию микрокода процессора простым обновлением программного обеспечения. Вы слишком много делаете из-за связи между прошивкой mobo и микрокодом процессора. Полезно, чтобы микропрограмма обновляла микропрограмму при каждой загрузке, но не обязательно (за исключением стабильности иногда).
Питер Кордес

2
Кроме того, не все макрокоманды x86 декодируются путем поиска их в ПЗУ секвенсора микрокода. На процессорах Intel инструкции, которые декодируют до 4 или менее мопов (микроопераций), жестко запрограммированы в декодерах. Большинство инструкций не являются «микрокодированными» в этом смысле слова. Целочисленное деление - это ( divи idiv), но даже деление FP - одиночное моп (поскольку это более критично для производительности, многошаговая итерационная логика выполняется внутри блока деления, а не с микрокодированными мопами).
Питер Кордес

@PeterCordes вы парень, который пишет этот ответ, можете редактировать любой мой ответ, чтобы сделать его более технически правильным. У тебя есть карт-бланш. Хотя я постараюсь свернуть эти изменения сегодня вечером, если у вас мало времени.
Эван Кэрролл

Если я доберусь до этого, я закончу писать ответ, который я начал. На данный момент, ответ Гарри Джонстона, вероятно, является лучшим из тех, которые пока отвечают на то, что, я думаю, вы действительно хотите знать (именно это действительно обновляет «обновление микрокода», а не то, что делает «микрокод процессора», потому что это слишком упрощенное имя, как это часто бывает у технических специалистов, которым нужно одно слово, которое может отслеживать широкая публика.)
Питер Кордес

0

Я прошел курс базового проектирования ISA, главным образом, по изучению и проектированию процессора RISC по образцу концепций MIPS. Вот что я вспомнил

Насколько я понимаю, базовые блоки процессора, такие как регистры, ALU, мультиплексоры и модули памяти, требуют определенных сигналов для своей работы. Вы бы назвали эти сигналы вашими «утвержденными» сигналами, поскольку они являются сигналами, необходимыми для работы этих блоков. Процессоры, по сути, представляют собой спагетти-блок ALU, модулей памяти, регистров и другого аппаратного обеспечения. Это означает, что каждый ЦП должен утверждать определенную последовательность управляющих сигналов, чтобы выполнять свою работу (я имею в виду основные инструкции, такие как ANDI, ORI, JMP, BNE, BEQ и т. Д.). У меня были смешанные чувства по этому поводу, когда мне приходилось самому утверждать сигналы (буквально проходя через все инструкции MIPS) во время тестирования и отладки набора инструкций, поскольку темп учебной программы в то время не учил меня ничего о блоках управления.

С другой стороны, язык ассемблера сводится к кодам операций и их операндам в командном слове (в основном ширина вашей шины данных). С точки зрения MIPS, первые 6 битов вашего командного слова - это ваш код операции. Одной лишь математической проверкой вы не можете «утвердить» свой ALU, регистр, память, мультиплексоры ... в основном остальную часть вашего оборудования только с 6 битами.

Нет, если у вас нет ... ИНСТРУКЦИЯ ДЕКОДЕР. Декодер команд в основном берет ваш код операции и генерирует ВСЕ ваши сигналы «подтверждения», необходимые для работы вашего оборудования. Однако декодеры команд различаются по реализации между архитектурами и в некоторых случаях являются программируемыми. Микрокод влияет на программируемый раздел декодера команд.

Я пришел к выводу, что прошивка является общим термином для любой информации, встроенной в аппаратное обеспечение. В некоторых случаях это также относится к микрокоду, поскольку его битовый поток может быть закодирован и сохранен в аппаратном обеспечении, таком как EEPROM и флэш-память. Однако в большинстве случаев это скомпилированный код, asm или даже битовые потоки VHDL / Verilog, используемые в FPGA. Мне кажется, что микрокод - это семантика, используемая для определения «сигналов подтверждения» в выбранном процессоре.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.