stringtranslate.com

Счетчик команд

Передняя панель компьютера IBM 701 , представленного в 1952 году. Индикаторы посередине отображают содержимое различных регистров. Счетчик команд находится в левом нижнем углу.

Счетчик программ ( PC ), [1] обычно называемый указателем команд ( IP ) в микропроцессорах Intel x86 и Itanium , а иногда называемый регистром адреса команд ( IAR ), [2] [1] счетчиком команд , [3] или Это всего лишь часть секвенсора команд, [4] — это регистр процессора , который указывает, где находится компьютер в последовательности своей программы . [номер 1]

Обычно значение PC увеличивается после получения инструкции и сохраняет адрес памятиуказывает на») следующей инструкции, которая будет выполнена. [5] [количество 2]

Процессоры обычно извлекают инструкции из памяти последовательно, но инструкции по передаче управления меняют последовательность, помещая новое значение в ПК. К ним относятся ветвления (иногда называемые переходами), вызовы подпрограмм и возвраты . Передача, обусловленная истинностью некоторого утверждения, позволяет компьютеру следовать другой последовательности в разных условиях.

Ветвление обеспечивает выборку следующей инструкции из другого места в памяти. Вызов подпрограммы не только разветвляет, но и сохраняет где-то предыдущее содержимое ПК. При возврате извлекается сохраненное содержимое ПК и помещается обратно в ПК, возобновляя последовательное выполнение с инструкцией, следующей за вызовом подпрограммы.

Аппаратная реализация

В простом центральном процессоре (ЦП) ПК представляет собой цифровой счетчик (от которого произошел термин «счетчик программ»), который может быть одним из нескольких аппаратных регистров . Цикл команд [7] начинается с выборки , при которой ЦП помещает значение ПК на адресную шину , чтобы отправить его в память. Память отвечает, отправляя содержимое этой ячейки памяти по шине данных . (Это модель компьютера с хранимой программой , в которой одно пространство памяти содержит как исполняемые инструкции, так и обычные данные. [8] ) После выборки ЦП приступает к выполнению , предпринимая некоторые действия в зависимости от полученного содержимого памяти. В какой-то момент этого цикла ПК будет изменен так, что следующая выполняемая инструкция будет другой (обычно увеличивается так, что следующая инструкция начинается с адреса памяти, следующего сразу за последней ячейкой памяти текущей инструкции). .

Как и другие регистры процессора, ПК может представлять собой банк двоичных защелок, каждая из которых представляет один бит значения ПК. [9] Число битов (ширина ПК) зависит от архитектуры процессора. Например, «32-битный» ЦП может использовать 32 бита для адресации 2–32 единиц памяти. На некоторых процессорах ширина счетчика программ зависит от адресуемой памяти; например, некоторые микроконтроллеры AVR имеют ПК, который выполняет циклическую обработку после 12 бит. [10]

Если ПК является двоичным счетчиком, он может увеличиваться при подаче импульса на его вход СЧЕТ ВВЕРХ, или ЦП может вычислить какое-то другое значение и загрузить его в ПК с помощью импульса на его вход ЗАГРУЗКА. [11]

Чтобы идентифицировать текущую инструкцию, ПК может быть объединен с другими регистрами, идентифицирующими сегмент или страницу . Этот подход позволяет использовать ПК с меньшим количеством битов, предполагая, что большинство интересующих единиц памяти находятся в пределах текущей близости.

Последствия в машинной архитектуре

Использование ПК, который обычно выполняет приращение, предполагает, что компьютер выполняет обычно линейную последовательность инструкций. Такой ПК занимает центральное место в архитектуре фон Неймана . Таким образом, программисты пишут последовательный поток управления даже для алгоритмов, которые не обязательно должны быть последовательными. Возникшее « узкое место фон Неймана » привело к исследованиям в области параллельных вычислений , [12] включая не-фон Неймановские модели или модели потоков данных , которые не использовали ПК; например, вместо указания последовательных шагов программист высокого уровня может указать желаемую функцию , а программист низкого уровня может указать ее, используя комбинаторную логику .

Это исследование также привело к поиску способов ускорения работы обычных процессоров на базе ПК, в том числе:

Последствия в программировании высокого уровня

Современные языки программирования высокого уровня по-прежнему следуют модели последовательного выполнения, и действительно, распространенным способом идентификации ошибок программирования является «выполнение процедуры», при котором палец программиста определяет точку выполнения, как это сделал бы ПК. Язык высокого уровня — это, по сути, машинный язык виртуальной машины, [13] слишком сложный, чтобы его можно было построить на аппаратном уровне, но вместо этого он эмулируется или интерпретируется программным обеспечением.

Однако новые модели программирования выходят за рамки программирования последовательного выполнения:

Смотрите также

Примечания

  1. ^ Для современных процессоров концепция «где это находится в своей последовательности» слишком упрощена, поскольку может возникнуть параллелизм на уровне инструкций и выполнение вне порядка .
  2. ^ В процессоре, где приращение предшествует выборке, ПК указывает на текущую выполняемую инструкцию. В некоторых процессорах ПК указывает на некоторое расстояние за пределами текущей инструкции; например, в ARM7 значение PC, видимое программисту, указывает за пределы текущей инструкции и за пределы слота задержки . [6]

Рекомендации

  1. ^ аб Хейс, Джон П. (1978). Компьютерная архитектура и организация . п. 245. ИСБН 0-07-027363-4.
  2. ^ Мид, Карвер ; Конвей, Линн (1980). Введение в системы СБИС . Ридинг, США: Аддисон-Уэсли . ISBN 0-201-04358-0.
  3. ^ Принципы работы, тип 701 и сопутствующее оборудование (PDF) . ИБМ . 1953.
  4. Гарри Кацан (1971), Компьютерная организация и система / 370 , Van Nostrand Reinhold Company , Нью-Йорк, США, LCCCN 72-153191
  5. ^ Зильбершац, Авраам ; Ганье, Грег; Гэлвин, Питер Б. (апрель 2018 г.). Концепции операционной системы. США: Уайли . стр. 27, Г-29. ISBN 978-1-119-32091-3.
  6. ^ «ARM Developer Suite, Руководство по ассемблеру. Версия 1.2» . АРМ Лимитед . 2001 . Проверено 18 октября 2019 г.
  7. ^ Джон Л. Хеннесси и Дэвид А. Паттерсон (1990), Компьютерная архитектура: количественный подход , Morgan Kaufmann Publishers , Пало-Альто, США, ISBN 1-55860-069-8 
  8. ^ Б. Рэндалл (1982), Истоки цифровых компьютеров , Springer-Verlag , Берлин, D
  9. ^ К. Гордон Белл и Аллен Ньюэлл (1971), Компьютерные структуры: материалы для чтения и примеры , McGraw-Hill Book Company , Нью-Йорк, США
  10. ^ Арнольд, Альфред (2020) [1996, 1989]. «E. Предопределенные символы». Макро Ассемблер AS – Руководство пользователя. В1.42. Перевод Арнольда, Альфреда; Хильзе, Стефан; Кантак, Стефан; Селлке, Оливер; Де Томази, Витторио. п. Таблица E.3: Предопределенные символы – Часть 3. Архивировано из оригинала 28 февраля 2020 г. Проверено 28 февраля 2020 г. 3.2.12. WRAPMODE […] AS будет считать, что программный счетчик процессора имеет не полную длину в 16 бит, заданную архитектурой, а длину, достаточную для обращения к внутреннему ПЗУ. Например, в случае AT90S8515 это означает 12 бит, что соответствует 4 Ксловам или 8 Кбайтам. Это предположение допускает относительные ответвления от начала ПЗУ к концу и наоборот, что может привести к ошибке вне ветвления при использовании строгой арифметики. Здесь они работают, потому что биты переноса, возникающие в результате вычисления целевого адреса, отбрасываются. […] В случае вышеупомянутого AT90S8515 эта опция даже необходима, поскольку это единственный способ выполнить прямой переход через всё адресное пространство […]
  11. ^ Уокер, Б.С. (1967). Введение в компьютерную инженерию . Лондон, Великобритания: Издательство Лондонского университета . ISBN 0-340-06831-0.
  12. ^ Ф. Б. Чемберс, Д. А. Дуче и Г. П. Джонс (1984), Распределенные вычисления , Academic Press , Орландо, США, ISBN 0-12-167350-2 
  13. ^ Дуглас Хофштадтер (1980), Гёдель, Эшер, Бах: вечная золотая коса , Penguin Books , Хармондсворт, Великобритания, ISBN 0-14-005579-7