Счетчик программ

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