Где хранится номер адреса следующей инструкции, которую должен выполнить процессор
Обновлено: 24.11.2024
Компьютер представляет собой сложную систему, состоящую из множества различных компонентов. Но в сердце — или, если хотите, в мозгу — компьютера находится единственный компонент, который выполняет фактические вычисления. Это центральный процессор или центральный процессор. В современном настольном компьютере ЦП представляет собой один «чип» размером порядка одного квадратного дюйма. Работа процессора заключается в выполнении программ.
Программа – это просто список недвусмысленных инструкций, которым компьютер должен следовать автоматически. Компьютер создан для выполнения инструкций, написанных на очень простом языке, называемом машинным языком. Каждый тип компьютера имеет свой собственный машинный язык, и компьютер может напрямую выполнять программу только в том случае, если программа написана на этом языке. (Он может выполнять программы, написанные на других языках, если они сначала переведены на машинный язык.)
Когда ЦП выполняет программу, эта программа сохраняется в основной памяти компьютера (также называемой ОЗУ или оперативной памятью). В дополнение к программе в памяти также могут храниться данные, которые используются или обрабатываются программой. Основная память состоит из последовательности ячеек. Эти местоположения пронумерованы, а порядковый номер местоположения называется его адресом. Адрес обеспечивает способ выбора одной конкретной части информации из миллионов, хранящихся в памяти. Когда ЦП необходимо получить доступ к программной инструкции или данным в определенном месте, он отправляет адрес этой информации в качестве сигнала в память; память отвечает, отправляя обратно значение, содержащееся в указанном месте. ЦП также может хранить информацию в памяти, указав информацию, которая должна быть сохранена, и адрес места, где она должна быть сохранена.
На уровне машинного языка работа ЦП довольно проста (хотя и очень сложна в деталях). ЦП выполняет программу, которая хранится в основной памяти в виде последовательности инструкций машинного языка. Он делает это, многократно считывая или извлекая инструкцию из памяти, а затем выполняя или выполняя эту инструкцию. Этот процесс — выборка инструкции, ее выполнение, выборка другой инструкции, ее выполнение и так далее до бесконечности — называется циклом выборки-и-выполнения. За одним исключением, которое будет рассмотрено в следующем разделе, это все, что когда-либо делал ЦП. (На самом деле все это несколько сложнее в современных компьютерах. Типичный процессорный чип в наши дни содержит несколько «ядер» ЦП, что позволяет ему выполнять несколько инструкций одновременно. А доступ к основной памяти ускоряется за счет «кэшей» памяти, которые могут доступ к ним осуществляется быстрее, чем к основной памяти, и они предназначены для хранения данных и инструкций, которые, вероятно, скоро потребуются ЦП. Однако эти сложности не меняют основной операции.)
ЦП содержит арифметико-логическое устройство или АЛУ, которое является частью процессора и выполняет такие операции, как сложение и вычитание. Он также содержит небольшое количество регистров, которые представляют собой небольшие блоки памяти, способные хранить одно число. Типичный ЦП может иметь 16 или 32 регистра «общего назначения», в которых хранятся значения данных, которые сразу доступны для обработки, и многие инструкции машинного языка ссылаются на эти регистры. Например, может быть инструкция, которая берет два числа из двух указанных регистров, складывает эти числа (используя АЛУ) и сохраняет результат обратно в регистр. И могут быть инструкции для копирования значения данных из основной памяти в регистр или из регистра в основную память.
ЦП также включает регистры специального назначения. Наиболее важным из них является счетчик программ, или ПК. ЦП использует ПК, чтобы отслеживать, где он находится в программе, которую он выполняет. ПК просто сохраняет адрес памяти следующей инструкции, которую должен выполнить ЦП. В начале каждого цикла выборки и выполнения ЦП проверяет ПК, чтобы узнать, какую инструкцию он должен получить. В ходе цикла выборки и выполнения число в ПК обновляется, чтобы указать инструкцию, которая должна быть выполнена в следующем цикле. Обычно, но не всегда, это просто инструкция, которая последовательно следует за текущей инструкцией в программе. Некоторые инструкции машинного языка изменяют значение, хранящееся в ПК. Это позволяет компьютеру «прыгать» с одной точки программы на другую, что необходимо для реализации функций программы, известных как циклы и переходы, которые обсуждаются в разделе 1.4.
Компьютер выполняет программы на машинном языке механически, то есть не понимая их и не думая о них, просто из-за того, как он физически устроен. Это не простая концепция.Компьютер представляет собой машину, состоящую из миллионов крошечных переключателей, называемых транзисторами, которые обладают тем свойством, что их можно соединять вместе таким образом, что выходной сигнал одного переключателя может включать или выключать другой переключатель. Когда компьютер выполняет вычисления, эти переключатели включают или выключают друг друга по шаблону, определяемому как способом их соединения, так и программой, которую выполняет компьютер.
Инструкции машинного языка выражаются в виде двоичных чисел. Двоичное число состоит всего из двух возможных цифр, нуля и единицы. Каждый ноль или единица называется битом. Итак, инструкция машинного языка — это просто последовательность нулей и единиц. Каждая конкретная последовательность кодирует определенную инструкцию. Данные, которыми манипулирует компьютер, также кодируются в виде двоичных чисел. В современных компьютерах каждая ячейка памяти содержит байт, представляющий собой последовательность из восьми битов. Инструкция машинного языка или часть данных обычно состоит из нескольких байтов, хранящихся в последовательных ячейках памяти. Например, когда ЦП читает инструкцию из памяти, он может фактически прочитать четыре или восемь байтов из четырех или восьми ячеек памяти; адрес памяти инструкции — это адрес первого из этих байтов.
Компьютер может работать напрямую с двоичными числами, поскольку переключатели могут легко представлять такие числа: включите переключатель, чтобы представить единицу; выключите его, чтобы представить ноль. Инструкции на машинном языке хранятся в памяти в виде комбинаций включенных и выключенных переключателей. Когда инструкция машинного языка загружается в ЦП, все, что происходит, это то, что определенные переключатели включаются или выключаются в шаблоне, кодирующем эту инструкцию. ЦП устроен так, чтобы реагировать на этот шаблон, выполняя закодированную им инструкцию; он делает это просто из-за того, что все остальные переключатели в ЦП соединены вместе.
Итак, вы должны понимать, как работают компьютеры: основная память содержит программы и данные на машинном языке. Они кодируются как двоичные числа. ЦП извлекает инструкции машинного языка из памяти одну за другой и выполняет их. Каждая инструкция заставляет ЦП выполнять какую-то очень небольшую задачу, например сложение двух чисел или перемещение данных в память или из памяти. Процессор делает все это механически, не задумываясь и не понимая, что он делает, и поэтому исполняемая им программа должна быть совершенной, завершенной во всех деталях и однозначной, потому что процессор не может ничего сделать, кроме как выполнить ее точно так, как она написана. Вот схематическое изображение этого первого этапа понимания компьютера:
-
Темы, обсуждаемые в этой веб-заметке:
- Функция каждого компонента ЦП
- Работа процессора (цикл выполнения инструкций)
-
Структура процессора:
Компоненты ЦП:
<УЛ> <УЛ>-
<УЛ>
- Содержит текущую инструкцию, выполняемую процессором.
- ЦП выполнит операцию, указанную кодом инструкции, содержащимся в регистре инструкций
-
<УЛ>
- Этот регистр содержит различную информацию о процессоре.
- Среди информации, содержащейся в PSR, есть:
Результат операции сравнения позволит ЦП определить следующий факт между a и b :
-
Центральный процессор многократно выполняет следующую последовательность операций:
-
После выполнения инструкции ЦП получает («выбирает») (следующую) инструкцию по адресу (местоположению), указанному в программном счетчике
-
<УЛ>
Предположим, ЦП только что завершил выполнение инструкции (код инструкции 0) в регистре инструкций:
(Код инструкции 0 в регистре инструкций означает "добавить" и она только что была выполнена)
-
ЦП сначала отправляет запрос на получение (восстановление) данных, хранящихся в ячейке памяти, заданной программным счетчиком (ПК) (на рисунке значение ПК = 1):
ЦП заставит память извлекать (вызывать) значение, хранящееся по адресу памяти (местоположению) 1
Это число (4) будет интерпретироваться как код компьютерной инструкции.
Старый код инструкции (0) будет заменен новым кодом инструкции
Обратите внимание, что ЦП теперь готов к выборке следующей инструкции при обработке текущей инструкции (хранящейся в регистре инструкций).
Сердцем компьютера является центральный процессор или ЦП. Это устройство содержит все схемы, необходимые компьютеру для обработки данных и выполнения инструкций. Процессор удивительно мал, учитывая огромное количество схем, которые он содержит. Мы уже видели, что схемы компьютера состоят из вентилей. Затворы, однако, также состоят из другого крошечного компонента, называемого транзистором, а современный процессор имеет миллионы и миллионы транзисторов в своей схеме. Изображение справа [Intel 2000] показывает, насколько компактным может быть ЦП. ЦП представляет собой процессор Pentium® III для мобильных ПК.
ЦП состоит из пяти основных компонентов: регистров общего назначения, регистров специального назначения, шин, АЛУ и блока управления. Каждый из этих компонентов изображен на диаграмме ниже. На диаграмме показан вид сверху на простой ЦП с 16 байтами ОЗУ. Чтобы лучше понять основные компоненты ЦП, мы подробно рассмотрим каждый из них.
-
Регистры общего назначения: эти компоненты представляют собой хранилище памяти общего назначения в ЦП, к которому можно получить очень быстрый доступ (по сравнению с ОЗУ); они созданы из комбинации защелок с дешифратором. Защелки создают схему, которая может запоминать, в то время как декодер создает способ выбора отдельных ячеек памяти.
Чтобы процессор мог выполнять значимую работу, он должен иметь два входа: инструкции и данные. Инструкции сообщают ЦП, какие действия необходимо выполнить с данными. Мы уже видели, как данные представлены в компьютере, но как мы представляем инструкции? Ответ заключается в том, что мы представляем инструкции в двоичном коде точно так же, как и данные. Фактически, ЦП не делает различий в том, хранит ли он инструкции или данные в ОЗУ. Эта концепция называется концепцией хранимой программы. Брукшир [1997] объясняет:
"Ранние вычислительные устройства не были известны своей гибкостью, поскольку программа, которую выполняло каждое устройство, как правило, была встроена в блок управления как часть машины. Один из подходов, использовавшийся для Повышение гибкости в первых электронных компьютерах заключалось в разработке блоков управления таким образом, чтобы их можно было удобно перемонтировать. Прорыв произошел с осознанием того, что программа, как и данные, может быть закодирована и сохранена в оперативной памяти. Если блок управления предназначен для извлечения программу из памяти, декодировать инструкции и выполнять их, программа компьютера может быть изменена просто путем изменения содержимого памяти компьютера вместо перемонтажа блока управления. Эта концепция хранимой программы стала стандартным подходом, используемым сегодня. Это означает, что машина предназначена для распознавания определенных битовых комбинаций как представляющих определенные инструкции. Этот набор инструкций вместе с системой кодирования называется машинным языком, поскольку он определяет средство, с помощью которого мы передаем алгоритмы машине».
Таким образом, оба входа в ЦП хранятся в памяти, и ЦП функционирует, следуя циклу выборки инструкции (и увеличения счетчика программ), расшифровать его и выполнить. Этот процесс известен как цикл выборка-декодирование-выполнение. Цикл начинается, когда инструкция передается из адреса памяти (идентифицируемого программным счетчиком) в регистр команд (IR) по шине данных. В IR уникальные битовые комбинации, составляющие машинную инструкцию, извлекаются и отправляются в декодер. Этот компонент отвечает за второй этап цикла, то есть за распознавание того, какую операцию представляет битовая последовательность, и активацию правильной схемы для выполнения операции. Иногда это включает чтение данных из памяти, сохранение данных в памяти или активацию АЛУ для выполнения математической операции. После выполнения операции цикл начинается снова со следующей инструкции.ЦП всегда знает, где найти следующую инструкцию, потому что счетчик программ (ПК) содержит адрес следующей выполняемой инструкции. Каждый раз, когда извлекается инструкция, счетчик команд переводится на следующий адрес памяти инструкции.
Каждая машинная инструкция состоит из двух частей: кода операции и операндов. Согласно Brookshear [1997], «битовая комбинация, появляющаяся в поле кода операции, указывает, какая из элементарных операций, таких как STORE или JUMP, запрашивается инструкцией. Битовые комбинации, найденные в поле поля операндов, предоставляют более подробную информацию. об операции, указанной кодом операции. Например, в случае операции STORE информация в поле операнда указывает, какой регистр содержит данные для сохранения и какая ячейка памяти должна принимать данные. На изображении справа показан формат инструкции для нашего процессора. Первые три бита представляют код операции, а последние шесть битов представляют операнд. Средний бит различает операнды, являющиеся адресами памяти, и операнды, являющиеся числами. Когда бит установлен на «1», операнд представляет собой число. Простой набор машинных инструкций для нашего ЦП приведен в таблице ниже. Обратите внимание, что всем кодам операций присвоена английская мнемоника для упрощения программирования. Вместе эти мнемоники называются языком ассемблера. Программы, написанные на языке ассемблера, должны быть преобразованы в их двоичное представление, прежде чем ЦП сможет их понять. Обычно это делается другой программой, называемой ассемблером, отсюда и название.
Вторая программа называется Count. Эта программа считает до числа, указанного программистом в первой инструкции. Обратите внимание, что в этой программе используется конструкция цикла с использованием инструкций JUMP и EQUAL. Каждый раз, когда значение в аккумуляторе увеличивается, счетчик проверяется, достиг ли он указанной суммы. Прочтите программу, а затем просмотрите анимацию этой программы, щелкнув ссылку «Просмотреть анимацию».
Небольшое количество регистров общего назначения:
Инструкции, которые работают непосредственно с памятью, и только ограниченное количество места в микросхеме выделено для регистров общего назначения.
Несколько регистров специального назначения:
Многие конструкции CISC выделяют специальные регистры для указателя стека, обработки прерываний и т. д. Это может несколько упростить конструкцию оборудования за счет усложнения набора инструкций.
Конвейерная обработка: метод, позволяющий одновременно выполнять части или этапы инструкций для более эффективной обработки инструкций.
Несколько типов данных
Поддерживает простые типы данных, такие как целые числа/символы, для сложных структур данных, таких как записи
Простые режимы адресации
Используйте простые режимы адресации и инструкции фиксированной длины для упрощения конвейерной обработки. Косвенная адресация памяти не предусмотрена.
Идентичные регистры общего назначения
Разрешить использование любого регистра в любом контексте
Простое оборудование. Поскольку набор инструкций RISC-процессора настолько прост, он занимает гораздо меньше места на кристалле. Чипы меньшего размера позволяют производителям полупроводников размещать больше деталей на одной кремниевой пластине, что может значительно снизить стоимость чипа.
Сокращенный цикл проектирования. Поскольку процессоры RISC проще, чем соответствующие процессоры CISC, их можно разрабатывать быстрее, и они могут использовать преимущества других технологических разработок раньше, чем соответствующие процессоры CISC, что приводит к большему скачку производительности между поколениями.
Эффективный код. Компиляторы языков более высокого уровня производят более эффективный код, чем раньше, потому что они всегда имели тенденцию использовать меньший набор инструкций, который можно найти в компьютере RISC.
Расширение кода. CISC-машины выполняют сложные действия с помощью одной инструкции; Компьютерам RISC может потребоваться несколько инструкций для одного и того же действия, расширение кода может быть проблемой.
Расширение кода означает увеличение размера, которое вы получаете, когда берете программу, скомпилированную для компьютера CISC, и перекомпилируете ее для компьютера RISC. Точное расширение зависит прежде всего от качества компилятора и характера набора инструкций машины.
Читайте также: