Этот вопрос беспокоит меня в течение некоторого времени, и сегодня я решил, что я буду Google это. Я читал кое-что об этом, и это казалось очень похожим на то, что я всегда называл кешем процессора .
Есть ли разница между двумя или я прав, когда думаю, что они одинаковы? Действительно ли регистр должен быть внутри процессора, чтобы он работал?
Согласно Википедии, регистр - это место в ЦП, где можно быстро получить доступ к памяти и изменить ее перед отправкой обратно в ОЗУ. Я правильно понял или кеш и регистр на самом деле одинаковые?
terminology
memory
cpu
register
Йерун
источник
источник
Ответы:
Они не совсем одинаковые. Регистры - это места, где находятся значения, над которыми ЦП фактически работает. Конструкция ЦП такова, что он может реально изменять или иным образом воздействовать на значение только тогда, когда оно находится в регистре. Таким образом, регистры могут работать с логикой, тогда как память (включая кэш) может содержать только значения, из которых процессор читает и записывает.
Представьте себе плотника за работой. У него в руках есть несколько предметов (регистров), а затем, совсем рядом, на его рабочем месте (в кеше) вещи, над которыми он часто работает, но не использует их прямо сейчас, а затем в мастерской (основной памяти) вещи, которые относятся к проект под рукой, но это не так важно, чтобы быть на рабочем месте.
РЕДАКТИРОВАТЬ: Вот простое объяснение того, как работает логика регистра.
Давайте представим, что у нас есть четыре регистра с именем R1..R4. Если вы скомпилируете утверждение, которое выглядит так:
компилятор выведет машинный код, который (при разборке) будет выглядеть примерно так:
Поскольку большинство современных процессоров имеют регистры шириной 32 или 64 бита, они могут выполнять математические операции с любым значением вплоть до размера, который они могут содержать. Им не нужны специальные регистры для меньших значений; они просто используют специальные инструкции ASM, которые говорят ему использовать только часть регистра. И, как и плотник с двумя руками, регистры могут хранить только небольшое количество данных одновременно, но их можно использовать повторно, передавая активные данные в них и из них, что означает, что «много регистров» не в конечном итоге нужно (Конечно, наличие большого количества ресурсов позволяет компиляторам генерировать более быстрый код, но это не является строго обязательным.)
источник
На самом деле регистр в терминологии ЦП является маленьким Именованный кусок памяти, доступный внутри микропроцессора (ЦП), регистры имеют определенные имена, размеры и функции различаются в зависимости от процессора, например, если взять 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 для арифметических операций ...
Вы можете увидеть Мейсон Уилер объяснения для изгнанников
источник
Я думаю, это помогает думать, что регистры не являются памятью и не должны рассматриваться как таковые.
Думайте больше как OO - Register - это класс, не производный от Memory, а Memory - это класс, не производный от регистра, но класс Register имеет методы (коды машинной операции) для преобразования своих данных в память и из нее. С другой стороны, память ничего не знает о регистрах и не может вызывать действия над ними. В результате все операции ЦП выполняются регистрами, которые часто обращаются к памяти.
Нередко можно видеть запись только регистров - едва ли атрибут памяти. Также возможно изменение значения регистра без записи в него - опять же, не то поведение, которое вы ожидаете от памяти.
источник
Ответ, предоставленный @Mason Wheeler, был точным, но я думаю, что можно поставить ваш вопрос под другим углом зрения. Судя по вашему вопросу, для меня звучит идея, что для полного понимания разницы между кешем и регистром - это путь к данным . Как правильно указал Мейсон, логика ЦП (т. Е. Его путь данных) спроектирована таким образом, что информация о памяти не может напрямую обрабатываться ЦП, и поэтому существуют регистры. Фактически, ЦП даже не способен декодировать текущую инструкцию программы, которую он выполняет, если эта инструкция не была загружена сначала в соответствующий регистр (обычно тот, который называется IR, «регистр инструкций»).
Это связано с тем, как подключен процессор. Нет физического пути между памятью и АЛУ; все данные, поступающие в АЛУ, должны быть как-то буферизованы в каком-либо регистре. Это может быть по-другому, но схема, необходимая для непосредственного подключения памяти к ALU, будет слишком сложной: проще и эффективнее поддерживать все коммуникации между памятью и ALU через файл регистров , как определено вышеупомянутым путем данных. , Фактически, даже когда данная инструкция указывает позицию памяти в качестве операнда (режим адресации, известный как прямая адресация ), соответствующий блок данных загружается в регистр, известный как MBR (регистр буфера памяти, иногда называемый MDR, буфер данных памяти). ).
Обратите внимание, что с точки зрения ЦП, на самом деле не имеет значения, поступает ли информация (данные или код) из основной памяти или из кеша, но последняя намного быстрее. Кэши существуют по соображениям производительности, регистры существуют из-за структуры ЦП (т. Е. Из-за пути данных). Умные программисты (на самом деле умные компиляторы) стараются максимально использовать регистры, чтобы минимизировать доступ к памяти (регистры работают быстрее, чем кеш или память). Это оправданно, поскольку информация, хранящаяся в регистрах, как правило, используется многократно, и фактически это один из принципов философии RISC.
источник