Цикл виконання інструкцій

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Схема циклу команд

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

У простих процесорах команди у циклі виконуються послідовно, кожна команда обробляється до початку наступної. У більшості сучасних процесорів цикли команд, натомість виконуються одночасно, і часто паралельно, з використанням конвеєра інструкцій: наступна команда починає оброблятися до завершення попередньої інструкції. Таке виконання уможливлене розбиттям циклу на окремі етапи.

Компоненти[ред. | ред. код]

Лічильник команд (також відомий як PC, «program counter»)
Регістр процесора, що вказує на адресу інструкції, що виконуватиметься наступною
Регістр адресації пам'яті[en] (MAR)
Зберігає адресу блоку пам'яті для читання або запису.
Регістр даних пам'яті[en] (MDR)
Двосторонній регістр, який зберігає дані, завантажені з пам'яті і готові до обробки процесором, або дані, які буде записано до пам'яті. (Він також відомий як буферний регістр пам'яті, MBR).)
Регістр команд (IR)
У цьому регістрі зберігається команда, щойно отримана з пам'яті.
Пристрій керування процесором (CU, Control Unit)
Здійснює декодування інструкції, що знаходиться в IR. Під час декодування вибираються ресурсіи машини (наприклад, регістри джерел даних і результату) і арифметична чи логічна операція, а також координується активація цих ресурсів.
Арифметико-логічний пристрій (ALU)
Виконує математичні та логічні операції.
Математичний співпроцесор (FPU)
Виконання операцій з рухомою комою.

Кроки[ред. | ред. код]

Процесор кожного комп'ютера може мати різні цикли на основі різних наборів команд, але він буде аналогічним наступному:

  1. Вибірка інструкції: Команда зчитується з адреси пам'яті, яка в даний час зберігається в лічильнику інструкцій (PC), і зберігається в регістрі команд (IR). Після завершення операції вибірки PC вказує на адресу інструкції, яка буде зчитуватися в наступному циклі.
  2. Декодування інструкції: На цьому етапі кодована інструкція, присутня в регістрі команд (IR), інтерпретується за допомогою декодера.
  3. Читання результативної адреси: У разі інструкції пам'яті (прямої або непрямої) фаза виконання запускається наступним тактовим імпульсом. Якщо команда має непряму адресу, результативна адреса зчитується з основної пам'яті, як і дані, що підлягають обробці (вони записуються в регістри даних). У випадку прямої інструкції, на даному етапі робиться нічого. Якщо це інструкція вводу-виводу, або проста регістрова інструкція, вона виконується негайно.
  4. Виконання команди: Блок керування процесором CPU передає декодовану інформацію у вигляді послідовності сигналів керування до відповідних функціональних блоків процесора для виконання потрібних дій (таких як: читання значень з регістрів, передавання їх до АЛП для виконання математичних або логічних обчислень, і запис результату назад в регістр). Якщо АЛП задіяний, він може встановлювати ознаки (такі, як переповнення), що також використовуються блоком керування. Результат, згенерований операцією, зберігається в оперативній пам'яті, або надсилається на пристрій виведення. Виходячи з даних, отриманих від АЛП, лічильник команд може бути оновлений іншою адресою, з якої буде зчитуватись наступна інструкція.

Потім цикл повторюється.

Цикл ініціалізації[ред. | ред. код]

Ініціалізація процесора починається після подачі на нього напруги живлення. Найперше значення лічильника команд індивідуальне для кожної архітектури ЕОМ (наприклад, процесори архітектури IA-32 починають виконання з адреси 0xfffffff0). Зазвичай перші команди виконуються з області BIOS чи firmware, що записані у постійній пам'яті. BIOS ініціалізує апаратуру машини і переходить до завантаження операційної системи.

Вибірка інструкції[ред. | ред. код]

Крок 1 циклу — вибірка інструкції. Він є однаковим для всіх команд:

  1. ЦП посилає лічильник команд PC в MAR і посилає команду читання на шину керування
  2. У відповідь на команду читання (з адресою, рівною PC), пам'ять виставляє затребувані дані на шину даних
  3. Процесор копіює дані з шини даних в свій MDR
  4. Процесор копіює дані з MDR в регістр команд (IR)
  5. PC збільшується так, що він вказує на наступну команду в пам'яті. На цьому етапі виконується підготовка ЦП до наступного циклу.

Розшифровка інструкції[ред. | ред. код]

Крок 2 з циклу команд називається циклом розшифровки. Процес декодування дозволяє процесору визначити, скільки операндів потрібно зчитати з пам'яті, щоб виконати команду. Код операції, зчитаний з пам'яті, декодується для подальших кроків і переміщується у відповідні регістри. Декодування здійснюється блоком керування.

Читання результативної адреси[ред. | ред. код]

Крок 3 оцінює, що це за операція. У випадку операції з пам'яттю перевіряється, чи є вона прямою або непрямою:

  • Пряма інструкція пам'яті - Нічого не робиться.
  • Непряма інструкція пам'яті - результативна адреса зчитується з пам'яті.

Якщо це проста регістрова інструкція або команда вводу/виводу, процесор виконує її негайно.

Виконання інструкції[ред. | ред. код]

Крок 4 є етапом виконання функції, яку задає інструкція. Якщо команда кодує арифметичну чи логічну дію, використовується АЛП. Це єдиний етап циклу інструкції, протягом якого виконується «корисна» з точки зору кінцевого користувача робота. Все інше — накладні витрати, потрібні, для забезпечення функціонування ЦП.

Див. також[ред. | ред. код]