Що таке мікрокод і чим він відрізняється від прошивки?


50

Якщо термінологія, що таке "мікрокод", і якщо її можна оновити, чим вона відрізняється від прошивки?

Це питання не є дублікатом цього питання (наскільки я можу сказати), яке я також запитував щодо зміни мікрокоду. Тут я строго хочу знати, як правильно використовувати ці терміни.

Оновлення

У мене обрана відповідь, але я не особливо задоволений нею. Я відповів дуже багато відповідей, і я вважаю, що багато цих відповідей однаково незадовільні. Тож дозвольте представити вам два мої кадри,

  1. "Мікрокод процесора схожий на програмне забезпечення процесора." Коли я все більше і більше читаю це, я так сприймаю. "Мікрокод" в цьому контексті є лише маркетингом через "прошивку процесора". Ведміть мене, ..
  2. Або я помиляюся, і я знаю, що це відбувається! У цьому випадку мені потрібно набагато більш ретельне уявлення про те, чому я помиляюся. У цих відповідях, які я читаю, вказуючи на те, що я помиляюся, я намагаюся їх зрозуміти,
    • У цій парадигмі використовується велика кількість відповідей "Виконання проти даних", але для процесора це не має для мене особливого сенсу. Деякі прошивки затверджують, але що? Якщо мова йде про центральний процесор, чи програмні інструкції чи дані?
    • Якщо прошивка мостить програмне та апаратне забезпечення (читайте: електротехнічні матеріали Богів), то як мікрокод також не задовольняє цій відмінності.
    • "Інтерпретація", як йде час, це навіть має менший сенс. Що означає говорити "апаратні інструкції інтерпретуються" з мікрокодом. Якби це було правдою, чи було б щось настільки ефективним, якби його не інтерпретували, а заздалегідь компілювали до різних апаратних інструкцій і просто "виконували"? Крім того, як General MIDI не інтерпретується в одному світлі? Це мова, яку інтерпретують "мікрокодом MIDI" і працює на апаратному забезпеченні. Або тупі термінали, які інтерпретують інструкції телепринтеру для візуального відображення?
    • Чи застосовується "мікрокод" до коду, який працює на звукових картах та відеокартах (GPU) ?

Я не фахівець, але я б сказав, що мікрокод - це прошивка процесора. Я уявляю, що всі дані про те, як виконується мікрокод, є власником Intel / AMD, але я можу здогадатися, як це буде працювати. У вас є простий набір процесора, основні речі, такі як отримання даних з операторів пам'яті та математики. Тоді у вас є складний набір інструкцій (наприклад, x86 / intel). Процесор отримує інструкцію з пам'яті і використовує мікрокод для перетворення складної інструкції в більш просту. Одним із прикладів може бути множення. Більшість процесорів мають інструкцію множення, але насправді множення складається з декількох зсувів бітів.
Programmdude

Термін Microcode позначає той факт, що він використовує / лежить в основі багатьох інструкцій з кодового процесора. Це в основному розповідає процесору, як емулювати інструкції та функції. Звідси його назва. З точки зору власника комп’ютера, це ще один набір коду, що постачається постачальником апаратних засобів, тому його можна альтернативно резюмувати як програмне забезпечення.
eckes

ІМО, найкраща проста відповідь: "Кожен раз, коли процесор виконує інструкцію, він фактично виконує програму мікрокодування". Як вам здається, одна інструкція процесора - це певна послідовність інструкцій мікрокодування, «програма мікрокодування». Кожна інструкція має свою програму мікрокодування. Індивідуальні інструкції з мікрокодування включають / вимикають / тощо різні внутрішні біти процесора.
Ethan Reesor

Відповіді:


57

Походження слова прошивки - це середина між апаратним та програмним забезпеченням - програмним забезпеченням, вбудованим у апаратне забезпечення. Це програмне забезпечення стосується програмного забезпечення, яке зберігається в енергонезалежній пам'яті на апаратному пристрої. Прикладами є EEPROM та Flash-пам’ять, вбудовані в апаратні пристрої, коли вони використовуються для зберігання коду, який працює самим пристроєм.

Деякі типи апаратного забезпечення стають все більш поширеними, оскільки його «прошивка» зберігається у драйвері та завантажується на пристрій під час завантаження / ініціалізації, замість того, щоб залишати його постійно на пристрої. На сьогодні не велика справа, наприклад, зберігати кілька сотень КБ коду програмного забезпечення у драйвері програмного забезпечення, завантаженому на хост ОС, та відправляти його на пристрій, як це ініціалізовано драйвером.

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

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

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

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


Щоб відповісти на деякі ваші конкретні запитання після редагування:

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

    Зауважте, що, як я обговорював вище, він не зберігається на процесорі, поки він вимкнений, але завантажується на нього щоразу, коли ви завантажуєтесь так, у певному сенсі це не працює як традиційна прошивка. Однак багато обладнання зараз це робить, і досі його називають "прошивкою", тому називати його прошивкою прийнятно.

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

    Термін "мікрокод", як правило, використовується лише для основних процесорів, а не для відеокарт або іншого обладнання, навіть якщо ці інші пристрої можуть завантажувати на них такий самий код.


1
Ваше друге речення неправильне; Прошивка включає програмне забезпечення, що зберігається в ПЗУ. Колись найбільше програмне забезпечення було в ПЗУ, перш ніж альтернативи стали доступними.
Гаррі Джонстон

1
Зрозуміло, що "мікрокод" характерний для процесора. Питання інше, ніж конкретний, чи це робить інакше. Видаляючи сферу застосування ("процесор"), ви отримуєте майже пряму цитату "перекладацького шару між інструкціями вищого рівня та операціями нижчого рівня". Це майже просто визначення прошивки. Це не все, що робить прошивка? Це багато слів, але я думаю, що найбільш описовим і лаконічним є опис вище: "Мікрокод процесора схожий на програмне забезпечення процесора".
Еван Керролл

@Evan, більшість пристроїв отримують свої вказівки опосередковано, надіслані з коду, який працює на процесорі. Лише ЦП безпосередньо обробляє код, наданий користувачем. Також врахуйте, що більшість пристроїв містять вбудований процесор якогось типу, на якому працює мікропрограмне забезпечення, і цей процесор може мати власний мікрокод. Відмінність може мати значення лише для розробників обладнання та програмістів ядра, але це не є довільним.
Гаррі Джонстон

"Більшість пристроїв містять якийсь вбудований процесор, який запускає мікропрограмне забезпечення, і цей процесор може мати власний мікрокод". Тож код, який обробляє потік міді на звуковій карті, також є "мікрокодом"? Або код, який малює / надає відображення символів на тупому терміналі?
Еван Керролл

Ні. Код, який працює на звуковій карті для обробки потоку MIDI, - це лише звичайна прошивка. Код, який обробляє код, який працює на звуковій карті для обробки потоку MIDI, буде мікрокодом. (На практиці я не впевнений, що вбудованому процесору на щось таке просте, як звукова карта, в першу чергу знадобиться мікрокод, але це поруч із пунктом.) Ключовим моментом є те, що MIDI-потік або символи, що надсилаються німий термінал, не код. Вони просто дані.
Гаррі Джонстон

23

https://wiki.debian.org/Microcode

Мікрокод CPU

Мікрокод процесора подібний до програмного забезпечення процесора. Ядро може оновити прошивку процесора без необхідності оновлювати його за допомогою оновлення BIOS. Оновлення мікрокоду зберігається в енергонезалежній пам'яті, таким чином BIOS / UEFI або ядро ​​оновлює мікрокод під час кожного завантаження.

Для коректної роботи процесорів від Intel та AMD можуть знадобитися оновлення мікрокоду. Ці оновлення виправляють помилки / помилки, які можуть спричинити щось від неправильної обробки, пошкодження коду та даних та блокування системи.

BIOS (або UEFI) оновлює мікрокод процесора під час завантаження, однак більшість часу або постачальник материнської плати не видаватиме часті оновлення BIOS / UEFI, або користувач не буде встановлювати такі оновлення. З цих причин системний процесор, ймовірно, працює із застарілим мікрокодом на величезній кількості систем.

Приклади:

https://www.win-raid.com/t3355f47-Intel-AMD-amp-VIA-CPU-Microcode-Repositories.html


9
Це не так просто: Мікрокод - це "техніка, яка накладає інтерпретатора між апаратним та архітектурним рівнем комп'ютера". Як такий, мікрокод є шаром інструкцій на апаратному рівні, що реалізують інструкції машинного коду вищого рівня або послідовність внутрішнього машинного стану в багатьох елементах цифрової обробки. Джерело: en.wikipedia.org/wiki/Microcode

17
Тож зачекайте ... "човен" - це просто особливий вид "транспортного засобу"? Яке марне слово! :-)
Гаррі Джонстон

4
@HarryJohnston Ну, я вважаю досить корисним відрізнити "човен" від інших типів транспортних засобів у певних контекстах ... а "мікрокод" - це дуже специфічний тип "чогось", який присутній у багатьох сучасних процесорах ... ( тому бажано мати термін для цього).
Радован Гарабік

4
@ RadovanGarabík: Це саме точка Гаррі, зроблена з сарказмом.
Пітер Кордес

4
Я не розумію. Якщо "ядро вміє оновлювати прошивку процесора без необхідності оновлювати його за допомогою оновлення BIOS", то чому факт, що "постачальник материнської плати не випускатиме часті оновлення BIOS / UEFI" означає, що "системний процесор ймовірно, працює з застарілим мікрокодом на величезній кількості систем "? Чому ядро ​​просто не переклеює мікрокод? Навіщо покладатися на BIOS, якщо BIOS ніколи не оновлюється, і є більш часто оновлювана альтернатива?
Ajedi32

6

Що ж, "оновлення мікрокодів" від Intel - це фактично оновлення мікропрограми в тому сенсі, що вони оновлюють набагато більше, ніж просто блок перекладу мікрокоду процесора.

Ці оновлені пакети процесорних оновлень, які ми називаємо «оновленнями мікрокоду» для Intel, також оновлюють інші вбудовані мікроконтролери (наприклад, PMU та ядро ​​управління живленням), а також декілька таблиць параметрів для різних підсистем процесорних процесорів. Вони досить складні.

Ця інформація доступна для кількох патентів Intel, пов'язаних з оновленнями мікрокоду та мікрокоду.


4

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

Між іншим, ідея мікрокоду сходить до Моріса Вілкеса в 1951 році, десятиліттями до того, як комп'ютерні процесори були вбудовані в кремній.


3

Прошивка зазвичай посилається на код для пристроїв, що містять процесор, а не сам процесор, наприклад, мікропрограмне забезпечення для андроїд телефону.

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


Але хіба це не правда про всі прошивки. Інструкції ABI, які можуть бути реалізовані в Silicon, але не є і іншим чином оновлюються через програмне забезпечення?
Еван Керролл

1
"Оновлення мікрокодів" від Intel можуть зробити набагато більше, ніж змінити, як розшифровуються мікрокодовані інструкції . наприклад, вони можуть відключити буфер циклу (у Skylake для виправлення помилки SKL150), оскільки, коли це можливо, ЦП призначений зробити це можливим у разі виявлення апаратних помилок.
Пітер Кордес

3

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

Але з часом, з багатьма варіаціями в схемах впровадження, відмінність, така, як вона була, стає все більш невиразною. Спочатку був горизонтальний проти вертикальний мікрокод, потім різні схеми написання "мікрокоду" (для реалізації, скажімо, інструкцій вводу / виводу) у "основний" набір інструкцій процесора. Тоді виникла потреба розрізняти код, який легко завантажувався за допомогою звичайних операцій «запуску» програми, проти коду (для BIOS, наприклад), який було збережено в ПЗУ чи іншому захищеному та відносно незмінному сховищі. Таким чином, термін "прошивка" був придуманий для посилання на ці інструкції, які були якось більш стійкими (і менш доступними для модифікації користувача) на зберіганні.

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


+1, ключовим тут є те, що в терміні "мікрокод" існує багато значень, і я думаю, що ОП дуже хоче знати про "оновлення мікрокоду", а не про інші значення.
Пітер Кордес

3

[Примітка: ця відповідь спеціально призначена для вирішення останнього редагування, інакше не додає до кількох надійних відповідей, які вже були опубліковані.]

Отже, ще раз повторюю: мікрокод (принаймні до першого наближення) - це специфічний вид прошивки.

"Мікрокод" в цьому контексті є лише маркетингом через "прошивку процесора".

Ну, це не маркетинг. Маркетинг називав би це XBoost Pro (TM) або щось подібне. Скоріше, це інженерний термін; якщо ви розробляєте процесори, для вас важливо розмежування мікрокоду та іншої мікропрограми процесора (і типу прошивки, характерної для інших пристроїв). Якщо ні, то, ймовірно, це не так.

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

Кінцевому користувачеві не потрібно знати або піклуватися про різницю, і в ідеальному світі взагалі ніколи не почуєш слово "мікрокод".

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


Тож, навіть усвідомлюючи, що вам, мабуть, не потрібно знати чи дбати, ви все ще можете зацікавити з чистої цікавості: як ви можете розібратися з мікрокодом від інших мікропрограм?

Ну, перше, що слід визнати, це те, що не обов'язково є єдине тверде і швидке визначення, це більше ситуація з Блеггом і Рубесом . Однак ми можемо сказати про мікрокод:

  • Мікрокод, як правило, працює всередині процесора, а не в процесорі. Це вигляд на високому рівні.

  • Архітектура мікрокоду зазвичай виглядає зовсім інакше, ніж архітектура звичайного коду, включаючи звичайну прошивку. Це, ймовірно, буде дуже паралельним і буде реалізовано набагато ближче до обладнання. Кілька існуючих відповідей (включаючи власну відповідь) обговорюють це, хоча слід зазначити, що деталі можуть відрізнятися залежно від дизайну процесора.

  • Хоча апаратне забезпечення часто призначене для роботи лише з прошивкою, що надається виробником, це не є рідкістю для використання сторонніх мікропрограмних програм - хоча це, мабуть, скасує гарантію! Сторонній мікрокод набагато рідше, хоча я вважаю, що в стародавні часи (я говорю про те, коли процесор мав розмір хлібопекарської скриньки) деякі кінцеві користувачі змінювали б мікрокод у своїх процесорах. Наскільки мені відомо, це неможливо у вигляді процесорів, що використовуються на ПК.

  • Мікрокод зазвичай перекладає або допомагає реалізувати загальнодоступну архітектуру набору інструкцій, тобто він запускає машинний код, який використовують дизайнер операційної системи та прикладні програмісти. Детальніше про це у наступному розділі.


У цій парадигмі використовується велика кількість відповідей "Виконання проти даних"

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

Привід SATA слідує інструкціям з комп’ютера, які знаходяться у рядку "зчитування даних із сектору 5,123" та "записування цих даних у сектор 1,321". Прошивка диска відповідає за те, щоб апаратне забезпечення цього відбулося, і це, як правило, досить звичайний код, який працює на якомусь вбудованому процесорі. Інструкції накопичувача надходять послідовно, хоча вони можуть не оброблятися в тому порядку, в якому вони прибули. Ці інструкції не є програмою, вони надсилаються програмою, що працює на основному процесорі. Зокрема, немає потоку управління, тобто немає вказівок, які слід вказувати SATA-диску, які вказівки виконувати далі.

Процесор відповідає за комп'ютер. Після завершення ініціалізації він виконує інструкції ("машинний код"), надані материнською платою (BIOS, інший тип вбудованого програмного забезпечення), які спрямовують його на запуск машинного коду, наданого операційною системою, що спрямовує його на виконання наданого машинного коду. від постачальників додатків. Сам процесор отримує машинний код з EEPROM (у випадку BIOS) або RAM (у випадку операційної системи та додатків). Зокрема, машинний код має потік управління: машинний код повідомляє ЦП, який машинний код виконувати далі. Ви можете повторно перебирати один і той же машинний код, ви можете запускати різні біти коду залежно від даних, над якими працює код - інструкції на мові інтерфейсу пристрою, як код SATA, можуть виконувати обмежений набір простих завдань, але машинний код може робитищо завгодно . (Див. Також повноту Тьюрінга .)

Ми можемо переписати цю кінцеву точку кулі вище: мікрокод, як правило, реалізує мову Turing Complete; звичайна прошивка зазвичай ні.


Що означає говорити "інструкції по апаратній інтерпретації" з мікрокодом.

Правда, але, ймовірно, заплутано; Важливим моментом є відмінність між машинним кодом, який має потік управління і є Turing Complete, та інструкціями, визначеними інтерфейсом пристрою, таким як SATA, який не є і не є.


Чи застосовується "мікрокод" до коду, який працює на звукових картах

Ні, звукові карти отримують інструкції, а не код, як і диски SATA. Інструкції можуть виглядати як "грати різко" або "інтерпретувати ці дані як форму хвилі та грати на ній". Ще дуже просто.

та відеокарти (GPU)?

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

... Графічні процесори складні і сидять десь між двома світами, які я намагався описати вище. Напевно, найпростіше думати про них як про спеціалізований комп'ютер, що сидить усередині основного комп'ютера, у якого є свої ЦП. Це правда, що такі пристрої, як SATA-накопичувачі, також мають вбудовані процесори, але різниця полягає в тому, що вбудований процесор на приводі SATA працює лише з кодом, наданим виробником диска, тоді як графічні процесори також виконують код, наданий операційною системою та / або постачальником додатків. Дійсно, це зовсім окреме питання.


TL; DR: мікрокод - це специфічний вид вбудованого програмного забезпечення, який допомагає апаратному забезпечити реалізацію набору інструкцій Turing Complete.


1

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

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

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

Мікрокод може бути реалізований у мікропрограмі / мікропрограмі, можуть містити мікрокоди, але вони не є однаковими.


1
Сучасні процесори x86 набагато більш жорсткі, ніж ви описуєте; це звучить так, ніби ви описуєте не-конвеєрний 386, а не Haswell / Skylake. "Оновлення мікрокодів" від Intel можуть зробити набагато більше, ніж змінити, як розшифровуються мікрокодовані інструкції . наприклад, вони можуть відключити буфер циклу (у Skylake для виправлення помилки SKL150), оскільки, коли це можливо, ЦП призначений зробити це можливим у разі виявлення апаратних помилок.
Пітер Кордес

@PeterCordes 1) Архітектура x86 не має значення для представлення концепції мікрокоду 2) якби ви зрозуміли мою відповідь, ми були б згодні, що вона послідовно керує сигналами, як ви

1
Ні, Intel Uops насправді не управляє сигналами. Вони безпосередньо не програмують логічні блоки, як у класичному конвеєрі MIPS. uops зчитується планувальником поза замовленням, щоб з'ясувати, які uops мають залежність від даних, від яких інших. Це дуже відрізняється внутрішня модель від чогось типу 6502, де кілька кроків виконання однієї інструкції зчитуються з дешифрувального ПЗУ. Те, що ви описуєте, - це одне історичне значення терміна мікрокод, але це не те, що стосується "оновлення мікрокоду" для сучасних процесорів.
Пітер Кордес

Де я (або питання з цього приводу) згадав мікро-операції Intel або x86 (що НЕ те ж саме, що "мікропрограма" в контрольному магазині)? Крім того, буквально все, що надається з магазину управління, є керуючим сигналом, незалежно від того, чи є сигнал секвенсованим чи статичним, логічним чи провідним. Я описую - це буквальне визначення мікрокоду, "оновлення мікрокоду" теж. Ви затримали аспект послідовності моєї відповіді, оскільки багато сказаних сигналів у Haswell будуть статичними. Для запису багато є послідовними, послідовність абсолютно не є взаємовиключною для конвеєрного або OoOE.

1
Отже, ви правильно відповідаєте на питання "що таке мікрокодування" , але "оновлення мікрокоду" для центрального процесора не має однакового технічного значення слова "мікрокод". Це важливий момент, який слід зробити чітко, оскільки я думаю, що це коріння плутанини ОП.
Пітер Кордес

0

Прошивка - це виконуваний код, розміщений в ПЗУ або іншій енергонезалежній пам'яті.

Початкова і основна мета вбудованого програмного забезпечення - це існування при запуску процесора, тому він має код для запуску або завантаження будь-якої системи, до якої входить процесор. Що стосується ПК, то вбудоване програмне забезпечення також використовується для надання послуг операційній системі, а також містить код вбудованих контролерів, які керують вентиляторами, живленням та кількома іншими речами, та код для ME / PSP, який працює у фоновому режимі .

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


Мікрокод - це не виконавчий код, а код, який використовується внутрішніми можливостями пристрою.

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

Оновлення мікропрограмного забезпечення та мікрокоду відносяться до подібної категорії - те, що вам потрібно зробити, щоб апаратне забезпечення працювало і може знадобитися час від часу оновлення - але це дуже різні речі.

Складні інструкції в багатьох процесорах не підключаються безпосередньо до апаратних засобів, а "виконуються" меншим процесором, подібним до основного процесора. Мікрокод контролює ці операції. Це повертається щонайменше до Motorola 68000, який мав "MicroROM", що містить мікрокод.

Ніхто, крім процесорів Intel або AMD, не знає, що мікрокод насправді контролює або робить, оскільки вони не випускають деталей. Є спроби його зламати. Довідково .

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


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


1
"Оновлення мікрокодів" від Intel можуть зробити набагато більше, ніж змінити, як розшифровуються мікрокодовані інструкції . наприклад, вони можуть відключити буфер циклу (у Skylake для виправлення помилки SKL150), оскільки, коли це можливо, ЦП призначений зробити це можливим у разі виявлення апаратних помилок.
Пітер Кордес

1
Цікавий момент щодо 6502 PLA, але конвеєрні процесори повинні бути більш жорсткими, ніж це. Класичний MIPS використовував різні поля вказувального слова, щоб безпосередньо керувати внутрішньою логікою таким чином, дещо подібним до того, але, звичайно, конвеєрний процесор має декілька інструкцій у польоті, потенційно по одній для кожного етапу конвеєра, якщо немає стійлів. (Або для суперскалярних, 2 або більше на кожній стадії конвеєра, а для виходу з ладу це ще складніше.) Багато внутрішніх процесорів сучасних процесорів є провідними, але з ручками, які оновлюють мікрокоди, можна налаштувати.
Пітер Кордес

0

Термінологія

Я відповім на це сам, використовуючи лише контекст використання в цьому PDF-файлі .

  • Firmware - мікрокод буде оновлений через шлях , наданий прошивкою процесора.

    "Зазвичай патч мікрокоду завантажується в процесор за допомогою мікропрограмного забезпечення материнської плати (наприклад, BIOS або UEFI) або операційної системи під час процесу раннього завантаження."

  • Мікрокод - це самі дані, що використовуються "Інструкційним блоком декодування (СІН)". СІН може бути провідним або мікрокодованим . Мікрокодування в цьому контексті просто означає запрограмоване. ТАКОЖ означає "множина мікрокоду". СІН

    СІН відіграє центральну роль в блоці управління і генерує керуючі сигнали на основі вмісту реєстру інструкцій.

  • Макроінструкція Одна інструкція, що надсилається до СІН для розшифровки, може повернути будь-яку кількість мікроінструкцій .

  • Мікроінструкція, одне попередньо обчислене "контрольне слово", весь стан та вказівки для виконання за один тактовий цикл. Надіслано до процесора для генерації керуючих сигналів .

Тож у цьому контексті ви б оновили мікрокод за допомогою прошивки. Ви будете надіслати макроінструкції до мікрокодированного СІН, щоб вирішити макроінструкцію в "мікроінструкцію" для виконання на процесорі, що перетворює їх на керуючі сигнали.

Моє читання цього

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

Здається, у нас є спеціальні назви для цих процесів і компонентів в процесорі: "IDU" на процесорі, а також ім'я для конкретної таблиці введення, в якій використовується СІН, яка містить усі "мікроінструкції": "мікрокод". Інформація про цей процес є власною та закритою. Я б припускав, що це аналог будь-якій іншій технології від модемів (з ATDT тощо) на модемах Hayes), до MIDI-карт, але ми не називаємо конкретну таблицю пошуку "мікрокодом", а натомість використовуємо парасольковий термін "прошивка" для процес миготіння та все корисне навантаження, що зберігається на чіпі.


2
Linux (і Windows) можуть оновити мікрокод CPU повністю незалежно від вбудованого програмного забезпечення материнської плати. Материнські плати прошивка робить містить останню версію микрокода процесора і механізм його застосування , перш ніж будь - або код завантажується з диска, але якщо ви не оновили прошивку Mobo деякий час, ви все одно можете мати останню версію микрокода процесора простим оновленням програмного забезпечення. Ви робите занадто велику угоду через зв’язок між мікропрограмою mobo та мікрокодом процесора. Корисно, щоб прошивка оновлювала мікрокод кожного завантаження, але це не обов'язково (за винятком стабільності іноді).
Пітер Кордес

2
Також не всі макро інструкції x86 розшифровуються, шукаючи їх у мікрокодовому послідовному ПЗУ. На процесорних процесорах Intel інструкції, що декодують до 4 або менше уп (мікрооперацій), жорстко кодуються в декодери. Більшість інструкцій у цьому сенсі цього слова не є мікрокодированими . Ціле ділення є ( divі idiv), але навіть поділ FP є одиничним взагалі (оскільки це більш критично для продуктивності, багатоступінчаста ітераційна логіка виконується всередині блоку поділу замість мікрокодованих Uops).
Пітер Кордес

@PeterCordes Ви хлопець, який пише цю відповідь, будь ласка, відредагуйте будь-яку мою відповідь, щоб зробити її більш технічно правильною. У вас карт-бланш. Хоча я спробую внести ці зміни в сьогоднішній день, якщо вам не вистачає часу.
Еван Керролл

Якщо я обійдусь цим, я закінчу писати відповідь, яку я почав. На сьогодні відповідь Гаррі Джонстона - це, мабуть, найкраща відповідь на те, що я думаю, що ви насправді хочете знати (а це те, що "оновлення мікрокоду" насправді оновлюється, що не те саме, що робить "мікрокод процесора", тому що це занадто спрощене ім'я, як це властиво технічним речам, для яких потрібна однословна назва, яку може відстежувати широка громадськість.)
Пітер Кордес

0

Я взяв курс з базового дизайну ISA, головним чином з вивчення та проектування процесора RISC, модельованого концепціями MIPS. Ось що я пригадав

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

З іншого боку, мова асемблера зводиться до опкодів та їх операндів у слові інструкції (в основному ширина вашої шини даних). З точки зору MIPS, перші 6 біт вашого інструкційного слова - ваш опкод. Один лише математичний огляд, ви не можете "запевнити" ваш АЛУ, реєстр, пам'ять, мукси. В основному, решту вашого обладнання лише 6 біт.

За винятком випадків, коли у вас є ... ДЕКОДЕР ЗА ІНСТРУКЦІєю. Декодер інструкцій в основному приймає ваш код і генерує ВСІ ваші "твердження" сигнали, необхідні для роботи вашого обладнання. Однак дешифратори інструкцій відрізняються між собою в реалізації між архітектурами і в деяких випадках є програмованими. Мікрокод впливає на програмований розділ декодера інструкцій.

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


-2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.