Архитектуры процессоров и их свойства

❯ Введение
Любой человек хоть как то связанный с техникой вероятно имеет понимание о базовых принципах работы процессора (то что он состоит из транзисторов, о том что память хранит все в бинарной форме и т.п.)
Также я почти уверен что каждый где-то видел или слышал x86, ARM и подобные. Да и скорее всего у меня не у одного вставал вопрос «А почему игра/софтина не идет на ARM, а только на x86?»
❯ О том как работает x86 (CISC) процессор
Схема 6×86 32-битного процессора Cyrix 1995 года

На схеме вы можете увидеть схему архитектуры x86 процессора
На изображении представлена схема архитектуры процессора, включающая различные компоненты и их взаимодействие. Давайте разберем каждый элемент:
Блок управления шиной :
Блок отвечающий за управление передачей данных между различными компонентами системы через шины.
Кэш-память :
Включает две части:
256 байтовая кэш-память : Предназначена для хранения часто используемых данных или инструкций.
16 Кб унифицированная кэш-память : Более крупный объем памяти для хранения как данных, так и инструкций.
Integer Unit (Целочисленное ядро) :
Содержит две линии (X Pipe и Y Pipe), каждая из которых имеет несколько стадий:
IF (Instruction Fetch) : Загрузка инструкции.
ID (Instruction Decode) : Декодирование инструкции.
AC (Address Calculation) : Вычисление адреса.
EX (Execute) : Выполнение инструкции.
WB (Write Back) : Запись результата обратно в регистры или память.
Такая линейная структура позволяет параллельно обрабатывать несколько инструкций, что повышает производительность.
FPU (Floating Point Unit, Процессор чисел с плавающей точкой) :
Отвечает за выполнение операций с числами с плавающей точкой. (Капитан очевидность)
Включает очередь для обработки таких операций. (Очередь плавающей точки)
Блок управления памятью :
Обеспечивает доступ к основной памяти и координирует работу с кэш-памятью. (Опять капитан очевидность)
Взаимодействие компонентов:
Блок управления шиной взаимодействует с кэш-памятью для передачи данных.
Кэш-память предоставляет данные и инструкции для Integer Unit и FPU .
Integer Unit выполняет целочисленные операции и взаимодействует с кэш-памятью и блоком управления памятью.
FPU выполняет операции с числами с плавающей точкой и также взаимодействует с кэш-памятью и блоком управления памятью.
Блок управления памятью координирует доступ к основной памяти и обеспечивает корректную работу всей системы.
CISC (англ. Complex Instruction Set Computer — «компьютер с полным набором команд») — тип процессорной архитектуры.
Для CISC характерны нефиксированная длина команд, кодирование арифметических действий в одной команде и небольшое число регистров, многие из которых выполняют строго определённую функцию.
RISC (от англ. reduced instruction set computer) переводится на русский язык как «сокращённое (ограниченное) число команд (инструкций)».
Это архитектура процессора, в которой быстродействие увеличивается за счёт упрощения инструкций: их декодирование становится более простым, а время выполнения — меньшим.
x86 процессоры используют стандартный CISC, а вот на примере CISC Intel x86 ASM я приведу примеры работы процессора
ENTER 16, 0 ; Выделяет 16 байт под локальные переменные.
ENTER 16, 0
в ассемблере x86 используется для создания стековой рамки (stack frame) при входе в подпрограмму. Она выполняет следующие действия:
Уменьшает значение регистра
ESP
на заданное количество байт (в данном случае на 16 байт), создавая пространство для локальных переменных.Сохраняет текущее значение регистра
EBP
на стек .Загружает новое значение в регистр
EBP
, указывающее на старое значениеEBP
на стеке , что позволяет использоватьEBP
для доступа к параметрам и локальным переменным.
Ход выполнения
Изначально код загрузится из кэш памяти (или основной) и попадает в «конвейер» X pipe и Y pipe, на схеме этап IF (Instruction Fetch).
В этапе ID (indstruction decode) процессор декодирует скомпилированную ASM команду и определяет что она создает стековую рамку.
Далее мы переходим в AC (Address Calculation). Вычисляется адрес для обновления регистра
ESP
. В данном случае, вычитается 16 байт из текущего значенияESP
.Далее, в EX уже уменьшение регистра
ESP
, что собственно мы и хотели сделать.И финальное, WB (Write back) — Новые значения регистров
ESP
иEBP
записываются обратно
То есть сам процессор и все действия (за исключением подгрузки в начале) происходят в числовом формате в Integer Unit. А когда они происходят в FPU?
Что логично FPU учавствует в работе реже IU так как в основном вычисления целочисленные, но вот пример в котором будет задействован он
FADD st(0), st(1) ; Сложение чисел с плавающей точкой
Вообще все действия с процессором происходят в таком формате как бы это не казалось нереальным.

❯ А теперь MIPS
MIPS (Microprocessor without Interlocked Pipeline Stages) — это архитектура процессоров которую по сути заменил ARM, первые процессоры PlayStation (PS1 MIPS R3000), телефонов, планшетов, бытовой технике, встраиваемых системах и других сферах. Не смотря на то что они используются в одних сегментах они не совсем одинаковы.
ARM:
ARM (Advanced RISC Machine) стал более популярным в мобильных устройствах, таких как смартфоны и планшеты, благодаря своей энергоэффективности и высокой производительности.
ARM также широко используется в встраиваемых системах, IoT-устройствах и даже в некоторых серверных решениях.
MIPS:
MIPS использовался в различных встраиваемых системах, сетевых устройствах и игровых консолях. Но его популярность крайне упала по сравнению с ARM в последние годы.
MIPS все еще применяется в некоторых «нишевых» областях, , но все-таки ARM стал доминирующей архитектурой в мобильных и встраиваемых системах.
Таким образом, можно сказать, что ARM в значительной степени «заменил» MIPS, не смотря на их различия.
MIPS использует RISC команд — то есть использует упрощённый набор команд. Он не просто использует RISC, он один из его основоположников.
Следует уточнить что MIPS — не только микропроцессоры, есть и обычные такие как IDT RC32438, ATI Xilleon, Alchemy Au1000, 1100, 1200, Broadcom Sentry5 и др.

На схеме мы тоже видим обозначения, ее я перевести не взялся по этому опишу их тут.
Дальше описывал в формате
Заголовок
Определение с википедии
Тезисное объяснение
Тезис2
1. PC (Program Counter/Программный счетчик) :
Счётчик кома́нд (также PC
= program counter, IP
= instruction pointer, IAR
= instruction address register, СчАК
= счётчик адреса (машинных) команд) — регистр процессора, который указывает, какую команду нужно выполнять следующей[1].
В большинстве процессоров после выполнения команды, если она не нарушает последовательности команд (например, команда перехода), счётчик автоматически увеличивается (постинкремент). Понятие счётчика команд тесно связано с архитектурой фон Неймана, одним из принципов которой является выполнение команд друг за другом в определённой последовательности.
Содержит адрес текущей выполняемой инструкции.
Обновляется после каждой инструкции для перехода к следующей.
2. IR (Instruction Register/Регистр команд) :
Регистр команд — часть блока управления центрального процессора, который содержит инструкцию, выполняемую в настоящий момент или декодированную
Хранит текущую инструкцию, загруженную из памяти.
Разделяется на поля для различных частей инструкции (
opcode
,rs
,rt
,rd
,immediate
).
3. Control Unit (Блок управления) :

Управляющий автомат, устройство управления процессором — блок, устройство, компонент аппаратного обеспечения компьютеров. Представляет собой конечный дискретный автомат. Структурно устройство управления состоит из: дешифратора команд (операций), регистра команд, узла формирования (вычисления) текущего исполнительного адреса, счётчика команд.
Генерирует сигналы управления для других компонентов в зависимости от opcode инструкции.
Определяет, какие операции должны быть выполнены (например,
ALU operation
,memory access
).
4. Regfile (Register File/Регистрационный файл) :
Регистровый файл — модуль микропроцессора, содержащий в себе реализацию регистров процессора. Современные регистровые файлы, используемые в СБИС, обычно реализованы как многопортовый массив быстрой статической памяти SRAM
Набор регистров, используемых для хранения данных.
Поддерживает чтение и запись данных по указанным адресам.
5. ALU (Arithmetic Logic Unit/Арифметическо-логическое устройство) :

Арифме́тико-логи́ческое устройство — блок процессора, который под управлением устройства управления служит для выполнения арифметических и логических преобразований (начиная от элементарных) над данными, называемыми в этом случае операндами. Разрядность операндов обычно называют размером или длиной машинного слова.
Выполняет арифметические и логические операции над данными.
Принимает два операнда (
OP1
иOP2
) и генерирует результат (ALU_out
).
6. Load/Store Units (Единицы погрузки/хранения):
Обеспечивают доступ к памяти для загрузки и сохранения данных.
Load unit читает данные из памяти, Store unit записывает данные в память.
7. State Machine:
В вычислительной технике блок хранения нагрузки (LSU
) представляет собой специализированный исполнительный блок, отвечающий за выполнение всех инструкций по нагрузке и хранению, генерацию виртуальных адресов операций с нагрузкой и хранением и загрузкой данных из памяти или хранением их обратно в память из регистров.
Блок нагрузочного магазина обычно включает в себя очередь, которая действует как зона ожидания для инструкций памяти, а само устройство работает независимо от других процессорных блоков.
Блоки Load-store также могут использоваться в векторной обработке, и в таких случаях может использоваться термин «вектор нагрузок-магазин»
Управляет состоянием процессора, обрабатывая различные события (например,
reset
,stall
).
А теперь пример RISC ассемблерной команды и ее выполнения.
ADD $t0, $t1, $t2 ;Сложение регистров t0, t1 в регистр t2
В первом этапе IF (Instruction Fetch) PC загружает инструкцию из памяти в IR
Далеепереходим в ID (Instruction Decode) где Control Unit декодирует инструкцию, определяя, что это команда
ADD
В execute (EX) Regfile считывает значения из регистров
$t1
и$t2
, а после чегоALU
выполняет сложение этих значений. Результат сохраняется вALU_out
MEM (Memory Access): Для команды ADD этот этап не требуется, так как она не взаимодействует с памятью.
Результат из
ALU_out
записывается обратно в регистр$t0
через Regfile. (Этап WB — Write back)
Разницу видно хреновенько, давайте еще раз только наглядно
В CISC архитектуре одна команда может выполнять несколько операций. Например, команда MOV
для адресного смещения
MOV AX, [BX + SI + 8] ; Загрузить данные из памяти по адресу BX + SI + 8 в AX
Что делает:
Вычисляет адрес (BX + SI + 8).
Загружает данные из памяти по этому адресу.
Записывает их в регистр AX.
В RISC архитектуре каждая команда выполняет только одну операцию. Например, загрузка данных из памяти разбивается на несколько простых команд
LW $t0, 8($t1) ; Загрузить слово из памяти по адресу t1 + 8 в t0
Характеристика | CISC | RISC |
Длина команд | Разная (например, 1–15 байт) | Фиксированная (например, 32 бита) |
Количество операций | Одна команда выполняет несколько | Одна комманда — одна операция |
Скорость выполнения | Могут требовать несколько тактов | Обычно за один такт |
Примеры архитектур | x86 (Intel/AMD), Motorola 68000 | MIPS, ARM, RISC-V, SPARC |
Так вот, все игры/софты как правило скомпилированы в исполняемый файл. А теперь не много в другое русло, все те кто качал iso образы операционных систем как правило видели множество вариаций ее сборки, как раз таки подо все архитектуры PowerPC, AMD64, i368, aarch64 и другие. Так вот все это нужно менять и рекомпилировать для того чтобы оно работало на ARM, который в настоящий момент достаточно новый сегмент для desktop сессий. То есть софта на него мало. Как правило компаниям это не принесет большого дохода, а следовательно зачем тогда парится и что-то оптимизировать за «бесценок»? Особенно кстати такое работает с играми. Так вот и не зачем проводить лишнюю работу.
Это так, если кто-то все-таки не догадался.
❯ Введение
Статья вроде вышла интересной, но помоему что-то не так, вот уже два дня не публиковал пытался понять что. Так и не понял, увы. Ну если что буду чинить. Спасибо за прочтение! Если заинтересовало прошу подписаться на мой телеграм канал.