48

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

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

Обновить

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

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

12 ответов12

54

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

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

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

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

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

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


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

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

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

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

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

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

6

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

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

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

4

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

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

3

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

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

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

2

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

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

2

[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 в этой позиции".

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


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

1

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

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

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

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

0

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

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

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

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

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

0

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

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

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


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

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

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

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

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

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


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

0

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

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

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

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

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

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

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

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

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

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

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

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

-2

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

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