Що таке мікрокод Intel?


78

З того, що я прочитав, він використовується для виправлення помилок в центральному процесорі без зміни BIOS. З моїх базових знань про складання я знаю, що інструкції з монтажу розділяються на мікрокоди центральним процесором і виконуються відповідно. Але Intel якось надає доступ до деяких оновлень, поки система працює і працює.

Хтось має більше інформації про них? Чи існує якась документація щодо того, що можна зробити з мікрокодами та як їх можна використовувати?


РЕДАГУВАТИ: Я прочитав статтю wikipedia: не зрозумів, як я можу написати деякі самостійно, і яке використання це мало б використовувати.


4
навіщо вам це потрібно? Це може бути найкращим можливим способом остаточно пошкодити ваш процесор.
ruslik

4
Він може бути використаний для виправлення помилок в центральному процесорі або введення помилок. Intel робить перше за вас, тому, якщо ви не хочете робити друге, дуже мало сенсу возитися з ним.
jalf

2
Вас це може зацікавити: downloadcenter.intel.com/… . Будь ласка, перегляньте "Детальний опис", наведений у цьому посиланні.
yasouser

1
Чому Intel не відкриває його: stackoverflow.com/questions/5806589/... Схема, що запускає мікрокод, також відома як "ядро RISC".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Відповіді:


77

У старі часи мікрокод активно використовувався в процесорі: кожна окрема інструкція була розділена на мікрокод. Це дозволило порівняно складні набори команд у скромному центральному процесорі (врахуйте, що Motorola 68000 із багатьма режимами операндів та вісьмома 32-розрядними регістрами вміщує 40000 транзисторів, тоді як одноядерний сучасний x86 матиме більше ста мільйонів ). Це вже неправда. З міркувань продуктивності більшість інструкцій зараз "жорстко підключені": їх інтерпретація виконується за гнучкими схемами поза будь-яким мікрокодом.

В недавньому x86 правдоподібно, що деякі складні інструкції, такі як fsin(яка обчислює функцію синуса для значення з плаваючою комою), реалізовані з мікрокодом, але прості інструкції (включаючи ціле множення з imul) - ні. Це обмежує можливості досягти за допомогою власного мікрокоду.

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

Якщо "шифрування" не включає цифровий (асиметричний) підпис та / або якщо люди в Intel якось зіпсували систему захисту, то цілком можливо, що якісь значні зусилля з зворотного проектування можуть потенційно дозволити виробляти такий мікрокод, але , враховуючи, ймовірно, обмежену застосовність (оскільки більшість інструкцій жорстко підключені), є ймовірність, що це не принесе великої користі, що стосується потужності програмування.


43
"Це вже не відповідає дійсності. З міркувань продуктивності більшість інструкцій зараз" жорстко підключені ": їх інтерпретація виконується за допомогою гнучких схем, поза будь-яким мікрокодом." Я не думаю, що це правильно. Агнор Фог зробив багато зворотного проектування сучасних процесорів x86 і часто згадує мікрокоди, насправді я думаю, що мікрокод - це те, що конвеєрується і OOE замість звичайних інструкцій, і звичайні речі, такі як використання адреси пам'яті замість реєстру для операції, генерують зайві u-ops. Посібник Agnor Fog тут: agner.org/optimize/microarchitecture.pdf
Джозеф Гарвін,

5
Крім того, pltsim, який намагається виконати повне моделювання процесора x86-64, спеціально емулює мікрокод: ptlsim.org
Джозеф Гарвін,

2
@JosephGarvin: ще одним показовим фактом є те, що Pentium IV мав кеш-пам’ять замість звичайного L1-іше .
ninjalj

5
Це звучить як багато спекуляцій і жодних посилань.
әɹsәɹoɈ

2
Здається, ptlsim.org більше не існує, але Marss86 базується на ptlsim.
Jordan Miner

18

Подумайте вільно про віртуальну машину або тренажер, де, скажімо, qemu-arm може імітувати процесор охорони на хості x86, в ідеалі програмне забезпечення, що працює на змодельованому плечі, не уявляє, що це не справжня рука. Піднесіть цю ідею до рівня, коли весь чіп розроблений таким чином, що завжди здається, що ви x86, програмне забезпечення ніколи не знає, що в мікросхемі є якісь програмовані елементи. І що якийсь інший процесор всередині дещо розроблений з метою реалізації / імітації x86. Імовірно, популярна лінійка продуктів AMD 29000 просто зникла, тому що апаратна команда і, можливо, процесор / ядро ​​стали кишками раннього клону x86. Transmeta, де працював Лінус, мав процесор vliw, який був створений для малої потужності x86. У цьому випадку рівень перекладу не був (стільки) секретом. Vliw, дуже довге вказівне слово,

Ні, це не такий рівень емуляції, як я маю на увазі, там не працює якийсь Linux з програмою qemu всередині кожного чіпа. Це десь між провідними, де в центрі немає програмного забезпечення / мікрокоду, та повною емуляцією удару. Програмовані біти можуть бути як fpga, програмовані ворота, або це може бути програмне забезпечення або програмований автомат стану, тобто непрограмовані ворота, тільки те, що працює на воротах, програмоване.

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

Як би весело не звучало грати з цим мікрокодом, він, швидше за все, дуже специфічний для сімейства процесорів, і ви, ймовірно, ніколи не отримаєте доступу до того, як це працює, якщо ви не працюєте на Intel або AMD, кожна з яких, ймовірно, має власні внутрішні елементи. Тож вам потрібно було б влаштуватися на роботу в одну з двох, а потім прокласти шлях через траншеї, щоб стати однією з імовірно елітної команди, яка виконує цю роботу. І як тільки ви зайдете настільки, що ваша кар’єра опиниться в пастці, ваші навички можуть обмежитися однією роботою в одній компанії. Можливо, ви отримаєте більше задоволення від програмування окремих процесорів на відеокарті, чогось, що задокументовано або, принаймні, має інструменти - те, що ви можете зробити сьогодні, не витрачаючи 10 років на AMD чи Intel, щоб нікуди не дітися.


Дякую за чітку відповідь. Отже, можна сказати, що центральний процесор - це менш спеціалізована форма ПЛІС, і ми можемо думати, що мікрокод є чимось схожим на Verilog?
Вт

1
він не такий загальний всередині, більше схожий на процесор всередині процесора, але внутрішній є більш примітивним, можливо, RISC, але, швидше за все, простішим за цей (простіший тим, що може знадобитися кілька вказівок, щоб зробити щось цікаве або корисне).
old_timer

3
"там не працює якийсь Linux з програмою qemu всередині кожного чіпа." Я б сміявся з цієї перспективи - до кількох днів тому. Потім про це повідомляється: zdnet.com/article/minix-intels-hidden-in-chip-operating-system . Все стало набагато складніше, ніж було раніше.
Euro Micelli

10

Зазвичай ви не пишете мікро-код. Для цього потрібні глибокі знання мікроархітектури процесора. Intel загалом не публікує жодної інформації ні про їх мікроархітектуру, ні про їх мікрокод.


4
чому це може призвести до зламаного процесора, доки мікрокод не зберігається? (я тут не кажу про розгін, я просто запитую, що можна зробити на
центральному

5
@Paul R: мікрокод НЕ постійний :) прочитайте цю вікі ще раз. Крім того, linux продовжує прокладати процесор при кожному перезавантаженні ... Крім того, на wiki він сказав, що зазвичай BIOS відповідає за переміщення процесора на КОЖНУ ініцію.
Quamis

4
Якщо ви хочете пограти з мікрокодом та іншими деталями реалізації процесора, ви можете розглянути можливість придбання програмних процесорів FPGA. Або просто пограти з тренажерами.
Chris Stratton

12
@Paul R: Оновлення мікрокоду Intel не зберігаються при жорстких скиданнях. При апаратному скиданні процесор повертається до заводського мікрокоду.
кафе

5
Існують симулятори мікрокодів, якщо ви хочете дізнатись більше про мікрокоди та спробувати їх, наприклад: mythsim.org , en.wikipedia.org/wiki/MikroSim , naprej.com/archive/jfar/vol3/no3/article1.pdf
ChuckCottrill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.