Как 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 и спекулятивное выполнение, это покажет более зрелое понимание.