Что такое микрокод Intel?

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

У кого-то больше информации о них? Есть ли какая-либо документация относительно того, что можно сделать с помощью микрокодов и как их можно использовать?


EDIT: Я прочитал статью в википедии: не понял, как я могу написать ее самостоятельно, и что она будет использовать.

Ответ 1

В более ранние времена микрокод был сильно использован в процессоре: каждая отдельная инструкция была разделена на микрокод. Это позволило относительно сложным наборам инструкций в скромном CPU (считают, что Motorola 68000, с его многочисленными режимами операндов и восемью 32-битными регистрами, подходит к 40000 транзисторы, тогда как одноядерный современный x86 будет иметь более ста миллионов). Это уже не так. По соображениям производительности большинство инструкций теперь "жестко связаны": их интерпретация выполняется негибкой схемой, вне любого микрокода.

В недавнем x86 можно предположить, что некоторые сложные инструкции, такие как fsin (который вычисляет синусоидальную функцию по значению с плавающей точкой), реализуются с помощью микрокода, но простые инструкции (включая целочисленное умножение с imul) не. Это ограничивает возможности пользовательского микрокода.

При этом формат микрокода не только очень специфичен для конкретной модели процессора (например, микрокод для Pentium III и Pentium IV не может свободно обмениваться друг с другом) и, конечно же, с использованием микрокода Intel для процессора AMD не может быть и речи), но это также строго охраняемая тайна. Intel опубликовала метод, с помощью которого операционная система или BIOS материнской платы могут обновлять микрокод (это должно быть сделано после каждого жесткого reset, обновление хранится в энергозависимой ОЗУ), но содержимое микрокода недокументировано. Руководство разработчика программного обеспечения Intel® 64 и IA-32 (том 3a) описывает процедуру обновления (раздел 9.11 "Средства обновления микрокода" ), но состояния что фактический микрокод "зашифрован" и заполнен часами контрольных сумм. Формулировка достаточно расплывчата, что практически любая криптографическая защита может быть скрыта, но нижняя строка заключается в том, что в настоящее время невозможно, чтобы люди, кроме Intel, могли написать и попробовать какой-то пользовательский микрокод.

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

Ответ 2

Подумайте свободно о виртуальной машине или симуляторе, где, например, qemu-arm может имитировать процессор руки на хосте x86, в идеале программное обеспечение, работающее на моделируемом плече, не знает, что это не настоящая рука. Возьмите эту идею до уровня, где весь чип разработан таким образом, что он всегда выглядит так, как будто вы x86, программное обеспечение никогда не знает, что внутри чипа есть некоторые программируемые элементы. И что некоторый другой процессор внутри несколько разработан с целью реализации/моделирования x86. Предположительно популярная линейка продуктов AMD 29000 просто ушла, потому что аппаратная команда и, возможно, процессор/ядро ​​стали кишками раннего x86-клона. Transmeta, где работал Linus, имел процессор, который был сделан с низкой мощностью x86. В этом случае уровень перевода не был (как много) секретом. Vliw, очень длинное командное слово, RISC доведено до крайности, это то, что вы строите для такого рода задач.

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

Нехитрые процессоры типа x86, не большие. Возьмите ARM, например, жестко, без микрокода. Микроконтроллеры, PIC, MSP430, AVR, предположите, что они не являются микрокодированными. В принципе, не предполагайте, что все процессоры микрокодированы, мало, если какие-либо семейства процессоров. Дело в том, что те, с которыми мы имеем дело на ПК, были и могут быть, поэтому может показаться, что все они есть.

Как бы забавно это ни звучало, чтобы играть с этим микрокодом, это, скорее всего, очень специфично для семейства процессоров, и вы, вероятно, никогда не получите доступ к тому, как он работает, если вы не работаете на Intel или AMD, у каждого из которых, вероятно, есть свои собственных внутренних органов. Таким образом, вам нужно будет устроиться на работу в одну из двух, а затем проложить себе путь через окопы, чтобы стать одним из тех, кто, вероятно, является элитной командой, которая выполняет эту работу. И как только вы доберетесь до такой степени, ваша карьера окажется в ловушке, ваши навыки могут быть ограничены одной работой в одной компании. У вас может быть более интересное программирование отдельного gpus на видеокарте, что-то, что документировано или, по крайней мере, имеет инструменты, что вы можете сделать сегодня, не тратя 10 лет на AMD или Intel, чтобы, возможно, никуда не пропасть.

Ответ 3

Обычно вы не пишете микрокод. Для этого требуется глубокое знание микро-архитектуры процессора. Корпорация Intel не выпускает никакой информации ни о своей микроархитектуре, ни об их микрокоде.