Цикл инструкций (также известный как цикл выборки-декодирования-выполнения или просто цикл выборки-выполнения ) — это цикл, который центральный процессор (ЦП) выполняет с момента загрузки до выключения компьютера для обработки инструкций. Он состоит из трех основных этапов: этап выборки, этап декодирования и этап выполнения.
В более простых процессорах цикл инструкций выполняется последовательно, каждая инструкция обрабатывается до того, как начнется следующая. В большинстве современных процессоров циклы инструкций выполняются одновременно , а часто и параллельно , через конвейер инструкций : следующая инструкция начинает обрабатываться до того, как завершится предыдущая, что возможно, поскольку цикл разбит на отдельные шаги. [1]
Счетчик программ (PC) — это специальный регистр , который хранит адрес памяти следующей инструкции, которая должна быть выполнена. На этапе выборки адрес, сохраненный в PC, копируется в регистр адреса памяти (MAR) , а затем PC увеличивается, чтобы «указать» на адрес памяти следующей инструкции, которая должна быть выполнена. Затем ЦП берет инструкцию по адресу памяти, описанному MAR, и копирует ее в регистр данных памяти (MDR) . MDR также действует как двусторонний регистр, который хранит данные, извлеченные из памяти, или данные, ожидающие сохранения в памяти (из-за этого он также известен как регистр буфера памяти (MBR)). В конечном итоге инструкция в MDR копируется в текущий регистр инструкций (CIR) , который действует как временное удерживающее основание для инструкции, которая только что была извлечена из памяти.
На этапе декодирования блок управления (CU) декодирует инструкцию в CIR. Затем CU посылает сигналы другим компонентам в CPU, таким как арифметико-логическое устройство (ALU) и устройство с плавающей точкой (FPU) . ALU выполняет арифметические операции, такие как сложение и вычитание, а также умножение посредством повторного сложения и деление посредством повторного вычитания. [ dubious – discussion ] Он также выполняет логические операции, такие как AND , OR , NOT , а также двоичные сдвиги . FPU зарезервирован для выполнения операций с плавающей точкой .
Процессор каждого компьютера может иметь разные циклы, основанные на разных наборах инструкций, но они будут похожи на следующий цикл:
Кроме того, на большинстве процессоров могут возникать прерывания . Это заставит ЦП перейти к процедуре обслуживания прерывания, выполнить ее и вернуться. В некоторых случаях инструкция может быть прервана в середине, инструкция не будет иметь никакого эффекта, но будет повторно выполнена после возврата из прерывания.
Первый цикл инструкций начинается сразу после подачи питания на систему с начальным значением PC, которое предопределено архитектурой системы (например, в процессорах Intel IA-32 предопределенное значение PC равно 0xfffffff0
). Обычно этот адрес указывает на набор инструкций в постоянном запоминающем устройстве (ПЗУ), который начинает процесс загрузки (или старта ) операционной системы . [2]
Шаг выборки одинаков для каждой инструкции:
Блок управления извлекает адрес инструкции из блока памяти .
Процесс декодирования позволяет процессору определить, какая инструкция должна быть выполнена, чтобы ЦП мог определить, сколько операндов ему нужно извлечь для выполнения инструкции. Код операции, извлеченный из памяти, декодируется для следующих шагов и перемещается в соответствующие регистры. Декодирование обычно выполняется двоичными декодерами в блоке управления ЦП .
На этом этапе оценивается, какой тип операции должен быть выполнен, и если это операция памяти, компьютер определяет эффективный адрес памяти, который будет использоваться на следующем этапе Execute. Существуют различные возможные способы, которые архитектура компьютера может указать для определения адреса, обычно называемые режимами адресации .
Вот несколько распространенных способов узнать фактический адрес:
Центральный процессор отправляет декодированную инструкцию в виде набора управляющих сигналов соответствующим компонентам компьютера. Если инструкция включает арифметику или логику, используется АЛУ. Это единственный этап цикла инструкций, который полезен с точки зрения конечного пользователя. Все остальное — накладные расходы, необходимые для выполнения шага.