Что такое регистры процессора?

27

Этот вопрос беспокоит меня в течение некоторого времени, и сегодня я решил, что я буду Google это. Я читал кое-что об этом, и это казалось очень похожим на то, что я всегда называл кешем процессора .

Есть ли разница между двумя или я прав, когда думаю, что они одинаковы? Действительно ли регистр должен быть внутри процессора, чтобы он работал?

Согласно Википедии, регистр - это место в ЦП, где можно быстро получить доступ к памяти и изменить ее перед отправкой обратно в ОЗУ. Я правильно понял или кеш и регистр на самом деле одинаковые?

Йерун
источник
13
Регистр процессора - это организация, которая отслеживает ваш процессор для вас. АНБ является примером регистра ЦП.
Джимми Хоффа
3
Кэш 1-го уровня ЦП часто состоит из кремниевых элементов того же типа, что и регистры. Это не так быстро, потому что требуются дополнительные поиски, чтобы связать кэшированные адреса с местоположениями кэша. Но регистры и кеш - это, безусловно, разные места на чипах.
Zan Lynx
3
@JimmyHoffa: Боюсь, что ваш комментарий будет очень запутанным для ОП, в ущерб знаниям информатики.
Руонг
3
@ rwong Нет, я понял, я подумал, что это довольно забавно. : P
Jeroen
1
И еще одно отличие заключается в размере: размер файла реестра редко превышает пару сотен слов, а размер кеша L1 может составлять до 64 КБ.
SK-logic

Ответы:

61

Они не совсем одинаковые. Регистры - это места, где находятся значения, над которыми ЦП фактически работает. Конструкция ЦП такова, что он может реально изменять или иным образом воздействовать на значение только тогда, когда оно находится в регистре. Таким образом, регистры могут работать с логикой, тогда как память (включая кэш) может содержать только значения, из которых процессор читает и записывает.

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

РЕДАКТИРОВАТЬ: Вот простое объяснение того, как работает логика регистра.

Давайте представим, что у нас есть четыре регистра с именем R1..R4. Если вы скомпилируете утверждение, которое выглядит так:

x = y + z * 3;

компилятор выведет машинный код, который (при разборке) будет выглядеть примерно так:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Поскольку большинство современных процессоров имеют регистры шириной 32 или 64 бита, они могут выполнять математические операции с любым значением вплоть до размера, который они могут содержать. Им не нужны специальные регистры для меньших значений; они просто используют специальные инструкции ASM, которые говорят ему использовать только часть регистра. И, как и плотник с двумя руками, регистры могут хранить только небольшое количество данных одновременно, но их можно использовать повторно, передавая активные данные в них и из них, что означает, что «много регистров» не в конечном итоге нужно (Конечно, наличие большого количества ресурсов позволяет компиляторам генерировать более быстрый код, но это не является строго обязательным.)

Мейсон Уилер
источник
26
И еще кое-что на складе в городе (диск) и другие вещи, которые он может иметь в Fedex'd (сеть) :-)
Дэн Пичелман
2
Очень сильно зависит от рассматриваемой архитектуры системы.
Мировой инженер
5
@Binero в 16-битном процессоре x86 у вас есть регистры с именами Ax, Bx и так далее. Когда они перешли на 32-битные процессоры, они расширили регистры до 32-битного EAx, EBx, если вы обращаетесь к Ax, вы получите младшие 16 битов EAx. В 64-битном режиме они назвали регистры RAx, причем младшие 32 бита - EAx, а младшие 16 бит - Ax. Посмотрите на эти диаграммы, чтобы увидеть, как вы попадаете в другие части байтов, такие как AH, чтобы получить старший байт 16-битного регистра Ax: en.wikipedia.org/wiki/X86#Structure
stonemetal
2
И в современных процессорах этот тип также выходит из строя из-за того, что регистры представляют собой просто временные отображения в основной банк Really Fast Memory, изменяющийся в зависимости от потока команд и от того, насколько близко он следует прогнозируемому потоку команд.
Ватин
2
@MasonWheeler Хороший выбор с вашей стороны.
Vatine
3

На самом деле регистр в терминологии ЦП является маленьким Именованный кусок памяти, доступный внутри микропроцессора (ЦП), регистры имеют определенные имена, размеры и функции различаются в зависимости от процессора, например, если взять 8085, то микропроцессор является 8-разрядным процессором, который имеет 8 -битные регистры (A: Аккумуляторные, регистры B, C, D, E, H и L и один флаговый регистр - все 8-битные). Два 16-битных регистра ПК и SP имеют специальную функцию, и эти функции появляются на рисунке во время программирования сборки. Управление несколькими регистрами находится за пределами возможностей программиста.

Если вы выберете другой процессор, регистры будут различаться, скажем, 8086 - это 16-битный процессор, и он имеет AX, BX, CX и DX, все это 16-битные регистры, PC, SP и Flag.

как вы цитировали в вопросе, они предназначены для ускорения выполнения программы и действуют как кэш-память процессора, но теперь процессорная архитектура дня изменилась, и они (Intel) добавляют много памяти, вызывая кэш-память процессора

но есть небольшая разница между кэш-памятью процессора (ЦП) и регистрами процессора (ЦП), регистры, фактически необходимые для некоторых специальных действий, таких как указатель памяти, состояние программы и т. д. Например: ПК: счетчик программ, который выполняет указатель памяти в памяти программы, SP: указатель стека, который действует в памяти стека. и аккумулятор является буфером и основным регистром для доступа к ALU для арифметических операций ...

Вы можете увидеть Мейсон Уилер объяснения для изгнанников

Мохан ПАКАЛАПАТИ
источник
1

Я думаю, это помогает думать, что регистры не являются памятью и не должны рассматриваться как таковые.

Думайте больше как OO - Register - это класс, не производный от Memory, а Memory - это класс, не производный от регистра, но класс Register имеет методы (коды машинной операции) для преобразования своих данных в память и из нее. С другой стороны, память ничего не знает о регистрах и не может вызывать действия над ними. В результате все операции ЦП выполняются регистрами, которые часто обращаются к памяти.

Нередко можно видеть запись только регистров - едва ли атрибут памяти. Также возможно изменение значения регистра без записи в него - опять же, не то поведение, которое вы ожидаете от памяти.

mattnz
источник
В отображаемых в память ввода-вывода области «памяти», предназначенные только для записи, не являются чем-то необычным.
SK-logic
@ SK-logic - Правильно - однако контекст вопроса, заданного четко, ОП воспринимает память как нечто, из чего вы читаете и пишете. Не нужно больше его путать :)
mattnz
0

Ответ, предоставленный @Mason Wheeler, был точным, но я думаю, что можно поставить ваш вопрос под другим углом зрения. Судя по вашему вопросу, для меня звучит идея, что для полного понимания разницы между кешем и регистром - это путь к данным . Как правильно указал Мейсон, логика ЦП (т. Е. Его путь данных) спроектирована таким образом, что информация о памяти не может напрямую обрабатываться ЦП, и поэтому существуют регистры. Фактически, ЦП даже не способен декодировать текущую инструкцию программы, которую он выполняет, если эта инструкция не была загружена сначала в соответствующий регистр (обычно тот, который называется IR, «регистр инструкций»).

Это связано с тем, как подключен процессор. Нет физического пути между памятью и АЛУ; все данные, поступающие в АЛУ, должны быть как-то буферизованы в каком-либо регистре. Это может быть по-другому, но схема, необходимая для непосредственного подключения памяти к ALU, будет слишком сложной: проще и эффективнее поддерживать все коммуникации между памятью и ALU через файл регистров , как определено вышеупомянутым путем данных. , Фактически, даже когда данная инструкция указывает позицию памяти в качестве операнда (режим адресации, известный как прямая адресация ), соответствующий блок данных загружается в регистр, известный как MBR (регистр буфера памяти, иногда называемый MDR, буфер данных памяти). ).

Обратите внимание, что с точки зрения ЦП, на самом деле не имеет значения, поступает ли информация (данные или код) из основной памяти или из кеша, но последняя намного быстрее. Кэши существуют по соображениям производительности, регистры существуют из-за структуры ЦП (т. Е. Из-за пути данных). Умные программисты (на самом деле умные компиляторы) стараются максимально использовать регистры, чтобы минимизировать доступ к памяти (регистры работают быстрее, чем кеш или память). Это оправданно, поскольку информация, хранящаяся в регистрах, как правило, используется многократно, и фактически это один из принципов философии RISC.

Умберто Фиораванте Ферро
источник