Архитектура компьютера

Цикл инструкции: Fetch-Decode-Execute

Цели урока

  • Понимать три основные стадии цикла: Fetch, Decode, Execute
  • Знать что происходит на каждой стадии
  • Понимать расширенный 5-стадийный цикл
  • Уметь прослеживать выполнение инструкции по шагам

Предварительные знания

  • Структура CPU
  • АЛУ
  • Регистры
  • Структура CPU
  • АЛУ

Каждую наносекунду, триллионы раз в день, ваш процессор выполняет один и тот же ритуал: достать инструкцию, понять её, выполнить. Понимание этого цикла - ключ к пониманию производительности.

  • Оптимизация кода под конвейер
  • Понимание branch prediction
  • Анализ производительности
  • Написание эффективных циклов

Три шага вечного цикла

**Цикл инструкции** - фундаментальный алгоритм работы любого процессора. Каждая инструкция проходит три стадии:

Это **бесконечный цикл**. CPU выполняет его миллиарды раз в секунду, пока не выключен.

СтадияАнглийскийДействие
1. ВыборкаFetchЗагрузить инструкцию из памяти
2. ДекодированиеDecodeОпределить операцию и операнды
3. ИсполнениеExecuteВыполнить операцию

**Расширенные циклы:** Современные CPU добавляют стадии Memory (доступ к памяти) и Write Back (запись результата). Получается 5-стадийный цикл.

В каком порядке выполняются стадии цикла инструкции?

Fetch: Выборка инструкции

**Fetch** - CPU читает инструкцию из памяти по адресу в Program Counter (PC).

**Prefetch:** Современные CPU загружают инструкции заранее (instruction prefetch), пока выполняются предыдущие. Это часть конвейера.

Откуда CPU берёт адрес следующей инструкции на стадии Fetch?

Decode: Декодирование

**Decode** - Control Unit разбирает инструкцию: какая операция, какие операнды.

**Результат декодирования - управляющие сигналы:**

СигналЗначениеНазначение
ALUOpADDКакую операцию выполнить
RegRead1R2Первый операнд из R2
RegRead2R3Второй операнд из R3
RegWriteR1Записать результат в R1
MemRead0Не читать из памяти
MemWrite0Не писать в память

**Сложность x86:** Инструкции от 1 до 15 байт. Декодер - огромная часть CPU. ARM (RISC) проще: все инструкции по 4 байта.

Что определяет стадия Decode?

Execute: Исполнение

**Execute** - АЛУ выполняет операцию, определённую на стадии Decode.

**Разные инструкции - разные действия Execute:**

ИнструкцияExecute делает
ADD R1, R2, R3R1 = R2 + R3 (АЛУ)
LOAD R1, [addr]Вычисляет адрес (АЛУ)
JUMP addrPC = addr (не АЛУ)
CMP R1, R2R1 - R2, только флаги (АЛУ)
NOPНичего (пропуск такта)

**Branch:** Для JMP/CALL Execute изменяет PC вместо записи в регистр. Это нарушает последовательность - проблема для конвейера!

Какой блок CPU выполняет операцию на стадии Execute?

Memory и Write Back

В 5-стадийном цикле после Execute идут ещё две стадии:

**Memory (MEM):** Доступ к памяти для LOAD/STORE

**Write Back (WB):** Запись результата в регистр

СтадияADD R1,R2,R3LOAD R1,[addr]STORE [addr],R1
IFFetchFetchFetch
IDDecodeDecodeDecode
EXR2 + R3Calc addrCalc addr
MEM-Read memWrite mem
WBR1 ← resultR1 ← data-

Для какой инструкции стадия Memory активна?

Полный пример: цикл по шагам

Проследим выполнение `ADD R3, R1, R2` (R3 = R1 + R2):

**5 тактов на инструкцию?** Без конвейера - да. С конвейером - по 1 такту на инструкцию (после заполнения).

CPU выполняет одну инструкцию за такт

Без конвейера - несколько тактов на инструкцию. С конвейером - в среднем ~1 инструкция за такт.

Конвейер позволяет выполнять стадии разных инструкций параллельно, достигая CPI (cycles per instruction) близкого к 1.

Сколько тактов занимает одна инструкция в 5-стадийном цикле БЕЗ конвейера?

Ключевые идеи

  • Fetch: загрузка инструкции из памяти по адресу PC
  • Decode: разбор opcode и операндов, генерация сигналов
  • Execute: выполнение операции в АЛУ
  • Memory: чтение/запись данных (для LOAD/STORE)
  • Write Back: сохранение результата в регистр
  • Без конвейера: 5 тактов на инструкцию

Связанные темы

Цикл инструкции - основа для конвейеризации.

  • Конвейеризация — Параллельное выполнение стадий
  • Суперскалярность — Несколько инструкций одновременно

Связанные уроки

  • os-01-intro
Цикл инструкции: Fetch-Decode-Execute

0

1

Войти