Архитектура компьютера
Структура CPU: Мозг компьютера
2007 год. Apple выпускает iPhone. Внутри - ARM CPU с тактовой частотой 412 МГц. Это в 10 раз медленнее настольных Intel Core 2 Duo того же года. Но iPhone работал быстрее, чем Windows Mobile на 600 МГц. Причина - другая микроархитектура и другие инструкции. Частота - не скорость. Понимание структуры CPU объясняет, почему Apple M1 на 3 ГГц бьёт Intel на 5 ГГц.
- **Оптимизация кода**: cache-friendly алгоритмы в 10 раз быстрее за счёт правильной работы с шинами
- **Embedded системы**: ARM vs RISC-V выбор зависит от структуры регистров и CU
- **Security**: Spectre и Meltdown атаки эксплуатируют спекулятивное исполнение в CU
- **Компиляторы**: распределение регистров - ключевая задача backend компилятора
Рождение архитектуры: Манхэттен, 1945
В июне 1945 года Джон фон Нейман написал отчёт 'First Draft of a Report on the EDVAC' - 101 страницу, изменившую вычисления навсегда. Идея: программа хранится в той же памяти, что и данные. До этого машины перепрограммировались физической перекоммутацией. ENIAC, предшественник EDVAC, весил 30 тонн и требовал нескольких дней для смены программы. Архитектура фон Неймана позволила загружать программы как данные. Она до сих пор используется в каждом современном процессоре.
Архитектура фон Неймана
**1945 год.** Джон фон Нейман публикует идею: программа хранится в той же памяти, что и данные. Революция!
**Гарвардская архитектура:** Отдельная память для кода и данных. Используется в микроконтроллерах (Arduino). Быстрее для real-time задач, но менее гибкая.
Главное отличие архитектуры фон Неймана:
Регистры: Память внутри CPU
**Регистр** - крошечная ячейка памяти прямо в процессоре. Доступ за 1 такт (~0.3 нс), в отличие от RAM (~50-100 нс).
| Регистр (x86-64) | Размер | Назначение |
|---|---|---|
| RAX | 64 бита | Аккумулятор, результат операций |
| RBX | 64 бита | Базовый регистр |
| RCX | 64 бита | Счётчик (циклы) |
| RDX | 64 бита | Данные (I/O, умножение) |
| RSI | 64 бита | Source Index (строки) |
| RDI | 64 бита | Destination Index (строки) |
| RSP | 64 бита | Stack Pointer |
| RBP | 64 бита | Base Pointer (стек) |
| R8-R15 | 64 бита | Дополнительные регистры |
Почему регистры быстрее RAM?
Специальные регистры
Некоторые регистры имеют **специальное назначение** и управляются автоматически CPU:
| Регистр | Название | Функция |
|---|---|---|
| PC / RIP | Program Counter | Адрес следующей инструкции |
| IR | Instruction Register | Текущая инструкция |
| FLAGS / RFLAGS | Status Register | Флаги Z, N, C, V и другие |
| SP / RSP | Stack Pointer | Вершина стека |
| MAR | Memory Address Register | Адрес для чтения/записи |
| MDR | Memory Data Register | Данные для чтения/записи |
**FLAGS регистр:** Бит 6 = Zero Flag (ZF), Бит 7 = Sign Flag (SF), Бит 0 = Carry Flag (CF), Бит 11 = Overflow Flag (OF). Каждая арифметическая операция обновляет FLAGS автоматически.
Что хранит Program Counter (PC)?
Устройство управления
**Control Unit (CU)** - дирижёр процессора. Декодирует инструкции и генерирует управляющие сигналы для всех компонентов.
| Тип | Описание | Примеры |
|---|---|---|
| Hardwired | Логические схемы напрямую | MIPS, ARM (простые ISA) |
| Microprogrammed | Микрокод в ROM | x86 (сложные инструкции) |
**Микрокод x86:** Сложные инструкции (REP MOVSB, CPUID) транслируются в последовательность микроопераций. Баги в CU можно патчить обновлением микрокода через BIOS - именно так исправляли Spectre/Meltdown.
Что делает Control Unit?
Шины: Дороги данных
**Шина (Bus)** - набор проводов для передачи сигналов между компонентами. Ширина шины определяет пропускную способность.
| Шина | Функция | Ширина (типично) |
|---|---|---|
| Data Bus | Передача данных | 64 бита |
| Address Bus | Передача адресов | 48-64 бита |
| Control Bus | Управляющие сигналы | ~20 линий |
**Bottleneck шины:** FSB (Front Side Bus) в старых Intel CPU давал ~10 ГБ/с. Современный Infinity Fabric в AMD Ryzen - до 100 ГБ/с. Шина часто является узким местом производительности.
Если Address Bus имеет 32 линии, какой максимальный объём памяти можно адресовать?
Тактовый генератор
**Clock** - сердцебиение CPU. Кварцевый генератор создаёт периодический сигнал, синхронизирующий все операции.
**Физический предел:** Чем выше частота, тем больше тепловыделение (P ~ f^3). 4-5 ГГц - практический потолок для кремния при разумном охлаждении. Дальше - только параллелизм (многоядерность).
**Turbo Boost:** CPU может временно повышать частоту (до +500 МГц), если позволяет охлаждение и TDP. При перегреве частота автоматически снижается (thermal throttling).
Частота CPU определяет его скорость однозначно
Скорость зависит от IPC (инструкций за такт), размера кэша, ширины конвейера и ISA.
M1 Apple на 3 ГГц быстрее многих Intel на 5 ГГц благодаря лучшей микроархитектуре и IPC ~8 против ~4.
Почему производители CPU перешли к многоядерным процессорам вместо повышения частоты?
Ключевые идеи
- Архитектура фон Неймана: код и данные в одной памяти - фундамент всех CPU
- Регистры - сверхбыстрая память внутри CPU (1 такт vs 50-100 тактов для RAM)
- PC указывает на следующую инструкцию, FLAGS хранит результаты сравнений
- Control Unit декодирует инструкции и генерирует управляющие сигналы
- Шины: Data Bus, Address Bus, Control Bus - дороги для данных
- Clock синхронизирует всё - физический потолок 4-5 ГГц из-за тепловыделения
Вопросы для размышления
- Почему Apple M1 на 3 ГГц быстрее Intel на 5 ГГц - что именно в структуре CPU влияет на IPC?
- Как ширина Address Bus определяет максимальный объём RAM, который может поддерживать система?
- Почему Spectre/Meltdown стали возможны - какой компонент CPU (CU, спекулятивное выполнение) создал эту уязвимость?