[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.