💻 Архітектура комп'ютерів
📅 Березень 2026⏱ 10 хв читання🟡 Середній · Останнє оновлення: 23 червня 2026 р.

Як працює процесор: вибірка, декодування, виконання

Ваш процесор виконує 3–5 мільярдів тактів за секунду. У кожному такті він може одночасно обробляти десятки інструкцій на різних стадіях завершення, передбачати майбутній шлях вашого коду, переупорядковувати операції «на льоту» та діставати дані з ієрархії кешів — і все це щоб подолати фундаментальне обмеження: пам'ять у тисячі разів повільніша за арифметику.

1. Архітектура фон Неймана

Джон фон Нейман (1945) описав архітектуру, якої й досі дотримуються всі магістральні процесори: єдина спільна пам'ять зберігає і програмні інструкції, і дані. Процесор послідовно зчитує інструкції з пам'яті, виконує їх і зберігає результати назад у пам'ять.

Основні компоненти:

2. Базовий цикл: вибірка → декодування → виконання

  1. Вибірка (fetch): зчитування байтів наступної інструкції з пам'яті (через кеш інструкцій) до регістра інструкцій. Інкремент PC.
  2. Декодування (decode): розбір коду операції та операндів. Визначення, яка операція потрібна, які регістри є джерелами/призначеннями, який режим адресації використовується.
  3. Виконання (execute): передача операндів до ALU/FPU. Виконання операції. Для інструкцій, що звертаються до пам'яті, обчислення ефективної адреси та читання/запис даних.
  4. Запис результату (write-back): збереження результату назад у регістр призначення.

Неконвеєризований процесор виконує 1 інструкцію за 4 такти. На частоті 1 ГГц: 250 мільйонів інструкцій/с. Сучасні процесори виконують 4–8 інструкцій за такт — поліпшення у 800×, досягнуте завдяки конвеєризації та суперскалярному виконанню.

3. Конвеєризація

Так само як автомобільний конвеєр накладає стадії виробництва, конвеєризація накладає стадії інструкцій. Поки інструкція N виконується, інструкція N+1 декодується, а N+2 одночасно вибирається:

Такт:
1
2
3
4
5
6
Інстр 1
IF
ID
EX
WB
Інстр 2
IF
ID
EX
WB
Інстр 3
IF
ID
EX
WB

5-стадійний конвеєр може виконувати у 5× більше роботи за такт. Сучасні конвеєри x86 мають глибину 14–19 стадій (Intel Skylake: 14). Глибші конвеєри дозволяють вищі тактові частоти, але збільшують ціну скидання конвеєра через помилкові передбачення переходів.

Конфлікти (hazards), що зупиняють конвеєр:

4. Передбачення переходів

~20% інструкцій — це переходи. Без передбачення кожен перехід зупиняє конвеєр на 14+ тактів. Сучасні процесори використовують складні передбачувачі з точністю >99% на типових навантаженнях:

Коли стається помилкове передбачення, процесор мусить скинути конвеєр — відкинути всі інструкції в обробці після переходу й перевибрати з правильного шляху. Штраф: 14–20 тактів. Для тісних циклів із непередбачуваними умовами помилкове передбачення на кожній ітерації серйозно обмежує IPC.

Spectre (2018): передбачення переходів кешує стан зі спекулятивного виконання. Контрольовані зловмисником переходи можуть спекулятивно звертатися до забороненої пам'яті ще до виявлення помилкового передбачення — дані вже в кеші й вимірюються за таймінгом. Перша мікроархітектурна атака побічним каналом, що вразила практично всі процесори.

5. Позачергове виконання

Виконання за порядком зупиняється щоразу, коли інструкція чекає на дані (наприклад, завантаження з пам'яті триває 200 тактів). Позачергове виконання (OOO) дозволяє процесору виконувати готові інструкції, поки інші чекають.

Реалізація використовує буфер переупорядкування (ROB) — кільцевий буфер, що містить інструкції в обробці у програмному порядку. Інструкції входять у ROB за порядком, можуть виконуватися позачергово, коли їхні входи готові, і фіксують результати в архітектурному стані за порядком (зберігаючи семантику винятків).

Сучасне ядро (Intel Core Ultra, AMD Zen 5) може відстежувати 300–500+ інструкцій в обробці у ROB одночасно. Це «вікно» інструкцій дозволяє апаратурі знаходити незалежні операції та виконувати їх паралельно на кількох виконавчих блоках.

6. Ієрархія кешу

Затримка пам'яті: основна DRAM потребує ~60–100 нс (~200 тактів). Без кешів процесор витрачав би 98% часу на очікування. Ієрархія кешу зберігає нещодавно використані дані поблизу процесора:

L1-I + L1-D
по 32–64 КБ, на кожне ядро. Затримка 4–5 тактів. Пропускна здатність ~256 ГБ/с.
Кеш L2
256 КБ – 1 МБ на ядро (Zen 4: 1 МБ). Затримка 12–14 тактів.
Кеш L3 (LLC)
6–192 МБ спільні. Затримка 30–50 тактів. Zen 4 для ПК: 96 МБ.
DRAM
гігабайти. 60–100 нс (~200 тактів). Пропускна здатність 50–100 ГБ/с.

Штраф за промах кешу: промах L1 → L2: ~10 додаткових тактів. L2 → L3: ~30 тактів. L3 → DRAM: ~170 тактів. Написання дружнього до кешу коду (лінійні шаблони доступу, малі робочі набори, уникання хибного спільного доступу у багатопотоковому коді) часто є найбільшою доступною оптимізацією продуктивності.

Рядки кешу мають розмір 64 байти. Коли звертаються до будь-якого байта, завантажується весь 64-байтний рядок. Послідовна обробка масиву на 1 ГБ дає передбачувані шаблони доступу, які добре опрацьовують апаратні попереджувальні завантажувачі (prefetchers). Випадковий доступ катастрофічний для продуктивності.

7. Сучасні процесори: ядра, потоки та інше