Что такое микрокод Intel?
Из того, что я прочитал, он используется для исправления ошибок в процессоре без изменения BIOS. Исходя из своих базовых знаний по сборке, я знаю, что инструкции по сборке разделяются на микрокоды внутренним процессором и выполняются соответствующим образом. Но Intel каким-то образом дает доступ к некоторым обновлениям, пока система работает.
У кого-нибудь есть больше информации о них? Есть ли документация относительно того, что можно сделать с микрокодами и как их можно использовать?
РЕДАКТИРОВАТЬ: Я прочитал статью в Википедии: не выяснил, как я могу написать некоторые самостоятельно, и какие использования это будет иметь.
3 ответа
В прежние времена микрокод активно использовался в ЦП: каждая отдельная инструкция была разбита на микрокод. Это позволило использовать относительно сложные наборы команд в скромном процессоре (учтите, что Motorola 68000 с его множеством операндов и восемью 32-разрядными регистрами умещается в 40000 транзисторов, тогда как в одноядерном современном x86 будет более ста миллионов). Это больше не правда. Из соображений производительности большинство инструкций теперь "зашито": их интерпретация выполняется негибкими схемами вне микрокода.
В недавнем x86 вполне вероятно, что некоторые сложные инструкции, такие как fsin
(которая вычисляет синусоидальную функцию по значению с плавающей запятой) реализована с помощью микрокода, но с простыми инструкциями (включая целочисленное умножение с imul
) не. Это ограничивает то, что может быть достигнуто с помощью пользовательского микрокода.
При этом формат микрокода не только очень специфичен для конкретной модели процессора (например, микрокод для Pentium III и Pentium IV не может свободно заменяться друг с другом - и, конечно, использование микрокода Intel для процессора AMD не подходит вопрос), но это тоже строго охраняемый секрет. Intel опубликовала метод, с помощью которого операционная система или BIOS материнской платы могут обновлять микрокод (это необходимо делать после каждого жесткого сброса; обновление хранится в энергозависимой памяти), но содержимое микрокода не документировано. В Руководстве разработчика программного обеспечения Intel® 64 и IA-32 для архитектуры (том 3а) описана процедура обновления (раздел 9.11 "Средства обновления микрокода"), но в нем говорится, что фактический микрокод "зашифрован" и содержит контрольные суммы с тактовой частотой. Формулировка достаточно расплывчата, так что практически любая криптографическая защита может быть скрыта, но суть в том, что в настоящее время для других людей, кроме Intel, невозможно написать и попробовать какой-то собственный микрокод.
Если "шифрование" не включает цифровую (асимметричную) подпись и / или если сотрудники Intel каким-то образом испортили систему защиты, то вполне возможно, что некоторые замечательные усилия по обратному инжинирингу потенциально могут позволить создать такой микрокод, но Принимая во внимание, вероятно, ограниченную применимость (поскольку большинство инструкций являются аппаратными), есть вероятность, что это не слишком дорого с точки зрения возможностей программирования.
Подумайте свободно о виртуальной машине или симуляторе, где, например, qemu-arm может симулировать процессор arm на хосте x86, в идеале программное обеспечение, работающее на симулированном arm, не подозревает, что оно не является реальным arm. Возьмите эту идею до уровня, когда весь чип сконструирован так, что он всегда выглядит так, будто вы x86, программное обеспечение никогда не знает, что внутри чипа есть какие-то программируемые элементы. И что какой-то другой процессор внутри спроектирован с целью реализации / симуляции x86. Предположительно, популярная линейка продуктов AMD 29000 просто исчезла, потому что команда аппаратного обеспечения и, возможно, процессор / ядро стали основой раннего клона x86. У Transmeta, где работал Линус, был процессор vliw, который был сделан для маломощного x86. В этом случае слой перевода не был (как большая часть) секретом. Vliw, очень длинное обучающее слово, RISC, доведенное до крайности, - это то, что вы создаете для такого рода задач.
Нет, это не столько уровень эмуляции, сколько я намекаю, там не работает какой-то linux с программой qemu внутри каждого чипа. Это где-то между аппаратной частью, где нет программного обеспечения / микрокода в середине, и полной эмуляцией удара. Программируемые биты могут быть похожими на FPGA, программируемые вентили, или это могут быть программные или программируемые конечные автоматы, то есть непрограммируемые вентили, то, что работает на вентилях, является программируемым.
Ваши не-x86, не большие железные процессоры. Возьмите ARM, например, зашитый, без микрокода. Микроконтроллеры, PIC, MSP430, AVR, предполагают, что они не микрокодированы. По сути, не стоит предполагать, что все процессоры имеют микрокодирование, лишь немногие из них являются семействами процессоров. Просто те, с которыми мы имеем дело с ПК, были и могут быть, так что может показаться, что они все.
Как бы забавно это ни звучало для игры с этим микрокодом, он, скорее всего, очень специфичен для семейства процессоров, и вы, вероятно, никогда не получите доступ к его работе, если не будете работать на Intel или AMD, у каждого из которых, вероятно, есть свои собственные внутренние компоненты. Таким образом, вам нужно будет устроиться на работу в одном из двух, а затем прокладывать свой путь через окопы, чтобы стать одной из, вероятно, элитной команды, которая выполняет эту работу. И как только вы продвинетесь так далеко, ваша карьера окажется в ловушке, ваши навыки могут быть ограничены одной работой в одной компании. Вам может быть интереснее программировать отдельные графические процессоры на видеокарте, что-то, что задокументировано или, по крайней мере, содержит инструменты, то, что вы можете сделать сегодня, не тратя 10 лет в AMD или Intel, и, возможно, ничего не получите.
Вы обычно не пишете микрокод. Для этого необходимы глубокие знания микроархитектуры процессора. Корпорация Intel не публикует никакой информации ни об их микроархитектуре, ни о микрокоде.