Микрокод¶
Микрокод — это низкоуровневое программное обеспечение (или аппаратно-реализованная логика), которое управляет выполнением элементарных операций процессора, выступая промежуточным слоем между машинными инструкциями и физической схемой устройства. В отличие от обычных программ, микрокод исполняется непосредственно внутри микропроцессора и определяет, каким образом декодируются и выполняются команды архитектуры набора инструкций (ISA). Микрокод хранится в специальной памяти (обычно в ПЗУ или перепрограммируемой флеш-памяти) и позволяет изменять поведение процессора без изменения его аппаратной части.
¶История и причины появления
Идея микропрограммирования была предложена в 1951 году Морисом Уилксом в ходе работы над компьютером EDSAC. Уилкс предложил заменить жёсткую аппаратную логику управления на последовательность микроинструкций, хранящихся в памяти. Это упростило проектирование сложных процессоров и позволило исправлять ошибки в логике без физической переделки схем.
В 1960–1970-х годах микропрограммирование стало стандартом для мейнфреймов (например, IBM System/360) и первых мини-компьютеров. Процессоры с сокращённым набором команд (RISC), появившиеся в 1980-х, отказались от микрокода в пользу простых аппаратных конвейеров, однако сложные CISC-процессоры (например, x86) продолжают использовать микрокод для трансляции сложных инструкций в простые внутренние микрооперации.
¶Устройство и принцип работы
Микрокод представляет собой последовательность микроинструкций, каждая из которых управляет элементарными действиями: чтением из регистров, арифметическими операциями, записью в память, переключением шин. Совокупность микроинструкций для выполнения одной машинной команды называется микропрограммой.
Существует два основных подхода к реализации микрокода:
- Горизонтальный микрокод — каждая микроинструкция напрямую управляет отдельными управляющими линиями процессора. Обеспечивает максимальный параллелизм, но требует широких полей и сложной разработки.
- Вертикальный микрокод — микроинструкции кодируются компактно и интерпретируются специальным микропрограммным интерпретатором. Проще в разработке, но медленнее из-за дополнительного уровня декодирования.
Микрокод хранится в управляющей памяти (control store). В современных процессорах она реализована на основе ПЗУ, но для исправления ошибок используется перезаписываемая область (patch RAM), которая загружается при инициализации системы.
¶Применение
Основные области использования микрокода:
- Процессоры x86 (Intel, AMD) — для декодирования сложных инструкций CISC в простые микрооперации (uops), которые затем исполняются суперскалярным ядром.
- Микроконтроллеры и DSP — для реализации специализированных команд обработки сигналов.
- Эмуляция и обратная совместимость — микрокод позволяет одному аппаратному ядру исполнять инструкции разных архитектур (например, эмуляция старших моделей на младших).
- Исправление ошибок (errata) — производители выпускают обновления микрокода для устранения аппаратных ошибок, например, уязвимостей Spectre и Meltdown в процессорах Intel и AMD.
¶Обновление микрокода
В отличие от BIOS/UEFI, микрокод процессора может обновляться операционной системой при каждой загрузке. Операционные системы (Windows, Linux, macOS) загружают свежий микрокод из своих обновлений безопасности. В Linux это реализовано через пакеты linux-firmware и механизм загрузки микрокода в ранней стадии загрузки (early microcode). Обновления микрокода позволяют исправлять ошибки и закрывать уязвимости без замены процессора.
¶Критика и ограничения
Микрокод подвергается критике за увеличение сложности процессора и потенциальную возможность внедрения скрытых функций («чёрных ходов»). Исследователи неоднократно демонстрировали теоретическую возможность модификации микрокода для внедрения вредоносных функций, недоступных для обнаружения программными средствами. Кроме того, микрокод увеличивает задержку исполнения инструкций по сравнению с аппаратной реализацией, что стало одной из причин перехода RISC-архитектур на жёсткую логику.
¶Интересные факты
- Микрокод процессоров Intel и AMD является коммерческой тайной и не публикуется.
- В процессорах с архитектурой VLIW (например, Itanium) микрокод частично заменяется программным планированием инструкций компилятором.
- Термин «микрокод» также используется для обозначения встроенного ПО жёстких дисков, контроллеров и сетевых устройств, хотя в этих случаях корректнее говорить о прошивке (firmware).
¶Источники
- Уилкс М. В. «Микропрограммирование» (оригинальная статья 1951 года).
- Паттерсон Д., Хеннесси Дж. «Архитектура компьютера и проектирование компьютерных систем».
- Документация Intel и AMD по обновлению микрокода (Intel SDM, AMD PPR).
- Материалы проекта Linux kernel (linux-firmware, early microcode).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


