Gymterview
middle

Как CPU выполняет инструкции? Опишите цикл fetch-decode-execute

Цикл fetch-decode-execute (выборка-декодирование-выполнение) — это базовый цикл работы процессора, в ходе которого каждая машинная инструкция последовательно проходит этапы извлечения из памяти, разбора и выполнения.

Аналогия: представьте, что вы готовите по рецепту. Fetch — вы читаете следующий шаг рецепта. Decode — вы понимаете, что нужно сделать («нарезать лук»). Execute — вы нарезаете лук. И переходите к следующему шагу.

Этапы цикла

1. Fetch (Выборка)

  • Процессор считывает следующую инструкцию из памяти по адресу, хранящемуся в Program Counter (PC) / Instruction Pointer (IP).
  • Инструкция загружается из кэша L1i (или из RAM, если её нет в кэше) в регистр инструкции (IR).
  • PC увеличивается, чтобы указывать на следующую инструкцию.

2. Decode (Декодирование)

  • Блок декодирования разбирает инструкцию: определяет тип операции (сложение, загрузка из памяти, переход и т.д.), операнды (регистры, адреса памяти, константы).
  • В современных процессорах (x86) сложные CISC-инструкции декодируются в более простые внутренние микрооперации (μops).

3. Execute (Выполнение)

  • Инструкция отправляется в соответствующий исполнительный блок:
    • ALU (Arithmetic Logic Unit) — для арифметических и логических операций.
    • FPU (Floating Point Unit) — для операций с числами с плавающей запятой.
    • AGU (Address Generation Unit) — для вычисления адресов памяти.
  • Выполняется операция над данными.

4. Memory Access (Доступ к памяти)

  • Если инструкция работает с памятью (load/store), происходит чтение или запись данных через иерархию кэшей.

5. Write-back (Запись результата)

  • Результат записывается обратно в регистр или в память.

Оптимизации в современных процессорах

В действительности современные процессоры не выполняют инструкции строго по одной. Они используют ряд техник для увеличения пропускной способности:

  • Конвейеризация (pipeline) — разные стадии разных инструкций выполняются одновременно (подробнее — в следующем вопросе).
  • Суперскалярность — несколько инструкций выполняются параллельно на разных исполнительных блоках в одном такте.
  • Out-of-order execution (OoO) — инструкции выполняются не в порядке программы, а по мере готовности данных, что повышает загрузку исполнительных блоков. Результаты «возвращаются» в правильном порядке (reorder buffer).
  • Спекулятивное выполнение — процессор предсказывает направление условного перехода и начинает выполнять инструкции заранее. Если предсказание ошибочно — результат отбрасывается.

Вывод

Базовый цикл CPU состоит из пяти этапов: fetch, decode, execute, memory access, write-back. Современные процессоры выполняют несколько инструкций одновременно благодаря конвейеризации, суперскалярности и внеочередному выполнению, что многократно повышает пропускную способность.

На собеседовании: junior-вопрос на базовое понимание работы процессора. Достаточно назвать три основных этапа (fetch, decode, execute) и упомянуть, что современные CPU конвейеризированы. Если спросят глубже — расскажите про out-of-order execution и спекулятивное выполнение, это покажет более зрелое понимание.