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

7516
Evan Carroll

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

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

Обновить

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

  1. «Микрокод процессора сродни микропрограммному обеспечению процессора». Когда я читаю это все больше и больше, вот как я это воспринимаю. «Микрокод» в этом контексте просто рекламирует «прошивку процессора». Потерпите меня,..
  2. Или я ошибаюсь, и я знаю, что это происходит! В этом случае мне нужно гораздо более полное представление о том, почему я не прав. В этих ответах, которые я прочитал, чтобы показать, что я неправ, я изо всех сил пытаюсь понять их,
    • «Выполнение против данных» многие ответы используют эту парадигму, но для процессора это не имеет особого смысла для меня. Какая-то прошивка assert выполнена, но чем? Когда дело доходит до процессора, это инструкции программ или данные?
    • Если микропрограмма соединяет программное и аппаратное обеспечение (читай: электротехническое дело Богов), то как микрокод также не удовлетворяет этому различию?
    • «Интерпретировать» с течением времени это даже имеет все меньше и меньше смысла. Что значит сказать «аппаратные инструкции интерпретируются» с помощью микрокода. Если бы это было правдой, было бы что-то столь же производительным, если бы оно не интерпретировалось, а предварительно компилировалось с другими аппаратными инструкциями и просто «выполнялось»? Кроме того, как General MIDI не интерпретируется в том же свете? Это язык, который интерпретируется как «MIDI-микрокод» и работает на оборудовании. Или тупые терминалы, которые интерпретируют инструкции телепринтера для визуального отображения?
    • Применяется ли «микрокод» к коду, который работает на звуковых картах и видеокартах (графических процессорах) ?
44
Я не эксперт, но я бы сказал, что микрокод - это прошивка процессора. Я полагаю, что все данные о том, как выполняется микрокод, были бы запатентованы Intel / AMD, но я могу догадаться, как это будет работать. У вас есть простой набор процессоров, базовые вещи, такие как выборка из памяти и математические операторы. Тогда у вас есть сложный набор инструкций (например, x86 / intel). Процессор получает инструкцию из памяти и использует микрокод для преобразования сложных команд в более простые. Одним из примеров будет умножение. Большинство процессоров имеют инструкцию умножения, но на самом деле умножение состоит из нескольких битовых сдвигов. Programmdude 6 лет назад 0
Термин «микрокод» относится к тому факту, что он использует / лежит в основе многих инструкций «кода» процессора. Это в основном говорит процессору, как эмулировать инструкции и функции. Отсюда и название. С точки зрения владельца компьютера, это еще один набор кода, поставляемый поставщиком оборудования, поэтому его можно альтернативно обобщить как прошивку. eckes 6 лет назад 0
IMO, лучший простой ответ: «Каждый раз, когда процессор выполняет инструкцию, он фактически выполняет программу микрокода». То, что вам кажется инструкцией с одним процессором, представляет собой особую последовательность инструкций микрокода, «программу микрокода». Каждая инструкция имеет свою собственную программу микрокода. Отдельные инструкции микрокода включают / отключают / и т. Д. Различные внутренние биты процессора. Ethan Reesor 6 лет назад 0

12 ответов на вопрос

50
thomasrutter

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

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

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

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

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

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


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

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

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

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

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

Ваше второе предложение неверно; прошивка включает в себя программное обеспечение, хранящееся в ПЗУ. Когда-то давно большинство прошивок было в ПЗУ, прежде чем альтернативы стали доступными. Harry Johnston 6 лет назад 1
Понятно, что «микрокод» специфичен для процессора. Вопрос заключается не в том, чтобы быть конкретным, а в том, делает ли это иначе Удалив область («ЦП»), вы получите почти прямую цитату «уровня перевода между инструкциями более высокого уровня и операциями более низкого уровня». Это в значительной степени * просто * определение прошивки. Разве это не то, что делает все прошивки? Это много слов, но я думаю, что наиболее описательное и лаконичное описание выше: «Микрокод процессора сродни микропрограммному обеспечению процессора». Evan Carroll 6 лет назад 1
@Evan, большинство устройств получают свои инструкции косвенно, отправленные из кода, работающего на CPU. Только процессор непосредственно обрабатывает код, предоставленный пользователем. Также учтите, что большинство устройств содержат какой-либо встроенный процессор, на котором выполняется прошивка, и этот процессор может иметь собственный микрокод. Различие может иметь значение только для разработчиков оборудования и программистов ядра, но оно не является произвольным. Harry Johnston 6 лет назад 0
«Большинство устройств содержат какой-то встроенный процессор, который выполняет прошивку, и этот процессор может иметь свой собственный микрокод», вот что я имею в виду. То есть код, обрабатывающий миди-поток на звуковой карте, также является «микрокодом»? Или код, который рисует / отображает отображаемые символы на немом терминале? Evan Carroll 6 лет назад 0
Нет. Код, который работает на звуковой карте для обработки потока MIDI, - это просто обычная прошивка. Код, который * обрабатывает * код, который выполняется на звуковой карте для обработки потока MIDI, будет микрокодом. (На практике я не уверен, что встроенному ЦП на чем-то столь же простом, как звуковая карта, во-первых, понадобится микрокод, но это не относится к делу.) Главное, что MIDI-поток или символы отправляются на тупой терминал, не код. Они просто данные. Harry Johnston 6 лет назад 0
Я попытался сформулировать некоторые из моих вопросов выше, так как в ответах, которые я не получаю, есть много общих тем: https://security.stackexchange.com/q/176998/11447 Evan Carroll 6 лет назад 0
@EvanCarroll Я добавил больше к этому ответу в ответ на дополнительные вопросы, хотя я не знаю, собирался ли я ответить на все это. thomasrutter 6 лет назад 0
Как обновление микрокода могло исправить Призрак, не убивая производительность? Очистка буферов предсказания непрямых ветвлений при переходах между пользователем и ядром может быть не слишком плохой для производительности, но не защитит от атаки JIT-Javascript на процесс браузера, внутри которого он выполняется. Вы думали о другом микроархитектурном механизме? Peter Cordes 6 лет назад 0
И BTW, Meltdown может быть защищен с чистым изменением программного обеспечения (не зависите от бита U / S в таблицах страниц, чтобы мешать пользовательскому пространству использовать их). Это стоит производительности. Ваша формулировка подразумевает, что сочетание обновления микрокода + изменения программного обеспечения требуется или будет работать лучше. Я не думаю, что это правда. Либо вы работаете в программном обеспечении, либо исправляете его в HW, что должно быть возможно [без затрат на производительность] (https://security.stackexchange.com/questions/177100/why-are-amd-processors-not-less- уязвимы к расплавления-и-призрак / 177101 # 177101). например, маскировать результаты загрузки с разрешениями. Peter Cordes 6 лет назад 0
Я не имел в виду, что сочетание микрокода и программного исправления будет работать лучше. Только то, что Meltdown не может быть исправлено простым изменением микрокода, требующего исправления программного обеспечения, которое, вероятно, больше повлияет на производительность. thomasrutter 6 лет назад 0
* На некоторых типах аппаратных средств становится все более распространенным хранить его «прошивку» в программном драйвере и загружать его на устройство при загрузке / инициализации * - это было сделано на IBM S / 38 в конце 70-х годов, и я думаю, что это было сделано на некоторых моделях S / 360-370 до этого. Daniel R Hicks 6 лет назад 0
@ HarryJohnston Я полностью согласен с тем, что когда-то он был бы сохранен в ПЗУ, но я не помню, чтобы люди, использующие термин «прошивка» тогда, называли его «ПЗУ». У меня сложилось впечатление, что люди перешли к тому, чтобы называть это «прошивкой» гораздо позже (это был ранее существовавший термин, но не часто используемый). «ROM» в таких вещах, как EPROM и EEPROM, долгое время был противоречием в терминах. thomasrutter 6 лет назад 0
23
SYS_V

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

Это круто после того, как я узнал, что это может быть записано в процессор, я просто думал, что это просто "прошивка" на тот момент. Я думаю, это так просто. Похоже, бесполезный термин. Evan Carroll 6 лет назад 1
Это не так просто: микрокод - это «метод, который навязывает интерпретатор между аппаратным и архитектурным уровнем компьютера». Как таковой, микрокод представляет собой уровень инструкций аппаратного уровня, которые реализуют высокоуровневые инструкции машинного кода или последовательность внутренних конечных автоматов во многих элементах цифровой обработки. Источник: https://en.wikipedia.org/wiki/Microcode 6 лет назад 9
Так что подождите ... "лодка" - это просто особый вид "транспортного средства"? Какое бесполезное слово! :-) Harry Johnston 6 лет назад 17
@HarryJohnston Ну, я считаю весьма полезным отличать «лодку» от других типов транспортных средств в определенных контекстах ... а «микрокод» - это очень специфический тип «чего-то», присутствующего во многих современных процессорах ... ( таким образом, весьма желательно иметь термин для этого). Radovan Garabík 6 лет назад 4
@ RadovanGarabík: Это точно точка зрения Гарри, сделанная с сарказмом. Peter Cordes 6 лет назад 4
@SYS_V: обратите внимание, что «обновления микрокода» не ограничиваются просто изменением содержимого секвенсора микрокода (например, мопов, в которые декодируется сложная инструкция, такая как `syscall`). Они также могут выполнять такие действия, как отключение буфера петли (в Skylake для исправления ошибки SKL150). Разработчики ЦП встроили элементы управления в свои ЦП, чтобы можно было отключить то, без чего ЦП может работать, в случае обнаружения ошибок позже. Некоторые вещи просто встраиваются в оборудование, поэтому изменение поведения невозможно, кроме как просто отключить. (например, как транзакционная память TSX в Haswell). Peter Cordes 6 лет назад 2
то есть обновление микрокода может сделать больше, чем просто изменить способ [микрокодированные инструкции x86] (https://stackoverflow.com/questions/40366643/what-is-a-microcoded-instruction), например `rep movsd` или` idiv` декодирования. Peter Cordes 6 лет назад 1
@PeterCordes эта информация гораздо интереснее моей работы по быстрому копированию / вставке. Должен ли я включить ваши комментарии в ответ или вы предложите свои собственные? Если вы напишите ответ, я буду голосовать 6 лет назад 1
@PeterCordes я вижу ... ну, мой детектор сарказма, должно быть, был выключен :-) Radovan Garabík 6 лет назад 0
Я не понимаю Если «Ядро может обновлять микропрограмму процессора без необходимости его обновления через обновление BIOS», то почему тот факт, что «производитель материнских плат не будет выпускать частые обновления BIOS / UEFI», означает, что «системный процессор может быть запущен с устаревшим микрокодом на огромном количестве систем? Почему ядро ​​не просто исправляет микрокод? Зачем полагаться на BIOS, если BIOS никогда не обновляется, и есть более часто обновляемая альтернатива? Ajedi32 6 лет назад 4
@ Ajedi32, это хороший вопрос. Я не уверен, предоставляет ли Windows (например) обновления микрокода для процессора - я не думаю, что это так, но я не уверен, почему нет. Потенциальные проблемы совместимости с материнской платой? Harry Johnston 6 лет назад 1
Я уточнил некоторые уточняющие вопросы, но я все еще выбираю их на основе первого предложения, которое в моем нынешнем контексте я считаю удовлетворительным. https://security.stackexchange.com/q/176998/11447 Evan Carroll 6 лет назад 0
@ Гарри Джонстон На самом деле, Windows включает обновления микрокода, и они распространяются через Центр обновления Windows. Фактический файл называется Mcupdate_genuineintel.dll для Intel и mcupdate_AuthenticAMD.dll для AMD. AndrejaKo 6 лет назад 2
@AndrejaKo, приятно знать; но это все еще оставляет вопрос о том, почему [обновления микрокода для недавних спекулятивных уязвимостей выполнения] (https://support.microsoft.com/en-us/help/4073119/protect-against-speculative-execution-side-channel- уязвимости в) не распространяются таким образом. (А также, в более общем смысле, почему этим файлам на моем компьютере Windows Server 2016 18 месяцев. Мне кажется, они обновляются только с каждой новой версией операционной системы?) Harry Johnston 6 лет назад 0
@ Гарри Джонстон. Ну, я не уверен. Я знаю, что новейший микрокод для Intel относится к [8 января] (https://downloadcenter.intel.com/download/27431/Linux-Processor-Microcode-Data-File?v=t), так что это довольно недавно. Пользователи GNU / Linux могут использовать их, но я действительно не уверен, почему Microsoft не распространяет более свежие обновления. AndrejaKo 6 лет назад 0
6

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

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

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

4
Michael Kay

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

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

3
Daniel R Hicks

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

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

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

+1, ключ здесь в том, что существует много значений термина «микрокод», и я думаю, что ОП действительно хочет знать об «обновлениях микрокода», а не о других значениях. Peter Cordes 6 лет назад 0
2
David Waters

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

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

Но разве это не правда для всех прошивок? Инструкции ABI, которые могут быть реализованы в Silicon, но не обновляются и не обновляются с помощью программного обеспечения? Evan Carroll 6 лет назад 0
«Обновления микрокода» от Intel [могут сделать гораздо больше, чем просто изменить способ декодирования микрокодированных инструкций] (https://security.stackexchange.com/questions/176998/what-exactly-is-microcode-and-how-does-it-differ- из-прошивки / 177002? noredirect = 1 # comment341520_177002). Например, они могут отключить буфер петли (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы сделать это возможным в случае обнаружения аппаратных ошибок. Peter Cordes 6 лет назад 1
2
Harry Johnston

[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

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

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

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

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

Современные процессоры x86 гораздо более жесткие, чем вы описали; Похоже, вы описываете не конвейерный 386, а не Haswell / Skylake. «Обновления микрокода» от Intel могут [сделать гораздо больше, чем просто изменить способ декодирования микрокодированных инструкций] (https://security.stackexchange.com/questions/176998/what-exactly-is-microcode-and-how-does-it-differ- из-прошивки / 177002? noredirect = 1 # comment341520_177002). Например, они могут отключить буфер петли (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы сделать это возможным в случае обнаружения аппаратных ошибок. Peter Cordes 6 лет назад 1
@PeterCordes 1) архитектура x86 не имеет отношения к представлению концепции микрокода 2) если бы вы поняли мой ответ, мы были бы согласны с тем, что он упорядочивает управляющие сигналы, как вы намекаете 6 лет назад 0
Нет, Intel Uops не являются управляющими сигналами. Они не программируют логические блоки напрямую, как в классическом конвейере MIPS. мопы считываются планировщиком вне очереди, чтобы выяснить, какие мопы зависят от данных и от каких других мопов. Это очень отличная внутренняя модель от чего-то типа 6502, где несколько этапов выполнения одной инструкции считываются из ПЗУ декодирования. То, что вы описываете, является одним из исторических значений термина «микрокод», но это не то, что представляют собой «обновления микрокода» для современных процессоров. Peter Cordes 6 лет назад 1
Где я (или вопрос в этом отношении) упомянул микрооперации Intel или x86 (которые НЕ совпадают с «микропрограммой» в хранилище элементов управления)? Кроме того, буквально все, что предоставляется из хранилища управления, является управляющим сигналом, независимо от того, является ли сигнал последовательным или статическим, логическим или проводным. То, что я описываю, это буквальное определение микрокода, «обновления микрокода» тоже. Вы одержимы аспектом последовательности моего ответа, потому что многие из упомянутых сигналов в Haswell будут статичными. Для записи, многие * секвенированы, секвенирование абсолютно не является взаимоисключающим для конвейерной или OoOE. 6 лет назад 0
Хорошо, это честно. Я думал, что вопрос задает вопрос об обновлениях микрокода для современных процессоров (и все же я думаю, что это тот контекст, который имел в виду OP). Но, как говорится, на самом деле это довольно общий характер. Но я хочу сказать, что обновления микрокода не ограничиваются изменением способа декодирования инструкций: это не просто содержимое ПЗУ микрокода. И что еще более важно, декодирование наиболее распространенных команд встроено в декодеры большинства современных процессоров и не может быть изменено с помощью обновления микрокода. Peter Cordes 6 лет назад 0
Таким образом, вы правильно отвечаете на вопрос «что такое микрокодированная инструкция» (https://stackoverflow.com/questions/40366643/what-is-a-microcoded-instruction), но «обновление микрокода» для CPU не имеет такого же технического значения слова "микрокод". Это важный момент, который следует четко указать, так как я думаю, что это является причиной путаницы ОП. Peter Cordes 6 лет назад 1
Я ответил на разницу между микрокодом и прошивкой в ​​отношении терминологии. В то время как современные микропроцессорные средства включают в себя обслуживание ** многих ** * программируемых * управляющих хранилищ с целью ошибок, сам микрокод имеет более широкое определение, которое представляет собой «память состояний в [Moore FSM] (https: //en.wikipedia. орг / вики / Moore_machine)». Это могут быть широкие воспоминания, высокие воспоминания или биты из одного регистра. Важной частью является то, что микрокод - это данные, которые осуществляют управление на оборудовании. 6 лет назад 0
0
LawrenceC

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

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

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


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

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

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

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

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

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


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

«Обновления микрокода» от Intel [могут сделать гораздо больше, чем просто изменить способ декодирования микрокодированных инструкций] (https://security.stackexchange.com/questions/176998/what-exactly-is-microcode-and-how-does-it-differ- из-прошивки / 177002? noredirect = 1 # comment341520_177002). Например, они могут отключить буфер петли (в Skylake для исправления ошибки SKL150), потому что, когда это возможно, ЦП предназначен для того, чтобы сделать это возможным в случае обнаружения аппаратных ошибок. Peter Cordes 6 лет назад 1
Интересно отметить 6502 PLA, но конвейерные процессоры должны быть более жесткими, чем это. Классический MIPS использовал разные поля командного слова для непосредственного управления внутренней логикой, что-то вроде этого, но, конечно, конвейерный ЦП имеет несколько команд в полете, возможно, по одной для каждой стадии конвейера, если нет остановок. (Или для суперскалярных, 2 или более на каждой стадии конвейера, а для вышедших из строя это еще более сложно.) Многие внутренние компоненты современных процессоров имеют жесткую проводку, но с ручками, которые могут корректировать обновления микрокода. Peter Cordes 6 лет назад 1
0
Evan Carroll

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

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

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

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

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

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

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

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

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

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

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

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

Linux (и Windows) могут обновлять микрокод процессора независимо от прошивки материнской платы, о которой вы говорите. Микропрограмма материнской платы * содержит * последний микрокод процессора и механизм его применения перед загрузкой любого кода с диска, но если вы некоторое время не обновляли микропрограмму mobo, вы все равно можете получить последний микрокод процессора, просто обновив программное обеспечение , Вы слишком много делаете из-за связи между прошивкой mobo и микрокодом процессора. Полезно, чтобы микропрограмма обновляла микропрограмму при каждой загрузке, но не обязательно (за исключением стабильности иногда). Peter Cordes 6 лет назад 1
Кроме того, не все макрокоманды x86 декодируются путем поиска их в ПЗУ секвенсора микрокода. На процессорах Intel инструкции, которые декодируют до 4 или менее мопов (микроопераций), жестко запрограммированы в декодерах. Большинство инструкций не являются ["микрокодированными"] (https://stackoverflow.com/questions/40366643/what-is-a-microcoded-instruction) в этом смысле этого слова. Целочисленное деление - это (`div` и` idiv`), но даже деление FP является одним мопом (поскольку это более критично для производительности, многошаговая итерационная логика выполняется внутри блока деления, а не с микрокодированными мопами). Peter Cordes 6 лет назад 2
@PeterCordes вы парень, который пишет этот ответ, можете редактировать любой мой ответ, чтобы сделать его более технически правильным. У тебя есть карт-бланш. Хотя я постараюсь свернуть эти изменения сегодня вечером, если у вас мало времени. Evan Carroll 6 лет назад 0
Если я доберусь до этого, я закончу писать ответ, который я начал. На данный момент, [ответ Гарри Джонстона] (https://superuser.com/a/1283798/20798), пожалуй, пока лучший ответ на вопрос, который, я думаю, вы действительно хотите знать (именно это «обновление микрокода» на самом деле обновления, что не то же самое, что делает «микрокод процессора», потому что это слишком упрощенное имя, как это обычно бывает с техническими материалами, которым нужно имя из одного слова, которое может отслеживать широкая публика.) Peter Cordes 6 лет назад 0

Похожие вопросы