"Регистр процессора" и "Регистр ввода-вывода"
Мне было интересно, если регистры процессора и регистры ввода-вывода - это одно и то же понятие?
Регистрируются ли они в процессоре или в некоторых устройствах ввода-вывода?
Я поднял регистры ввода-вывода из этого вопроса о супер-пользователе.
3 ответа
Регистры процессора - как правило, что-то связанное с любой операцией, которую выполняет процессор, должно быть в одном из его регистров.
Например, посмотрите на это. Это различные формы Intel x86 ADD инструкция. Вы заметите, что вы можете добавить два регистра вместе или добавить регистр вместе с содержимым ячейки памяти ("аккумулятор" - это просто еще один регистр, "немедленный" означает, что данные находятся непосредственно в ячейке памяти, или "немедленно"). "после фактического кода операции ADD). Здесь нет ADD mem,mem,
Процессоры RISC, такие как ARM, еще менее гибки. Данные из памяти всегда должны быть скопированы в регистр как отдельная операция, прежде чем процессор сможет сделать что-то вроде ADD, SUBи т. д. к нему. У них есть еще много регистров, чтобы восполнить это.
Регистры ввода / вывода - как правило, что-то связанное с любой операцией, выполняемой чипсетом или устройством ввода-вывода, должно быть в одном из его регистров.
Например, посмотрите на это. Это подробно о стандарте VGA "CRTC регистры". Особый интерес представляют регистры "Начальный адрес высокого уровня" и "Начальный адрес низкого уровня". Значения в этих регистрах сообщают VGA, с чего начать чтение памяти для визуализации дисплея.
Есть много способов сделать регистры ввода / вывода доступными из CPU. Обычно это не похоже на регистры процессора выше. Различные методы включают в себя:
- Одним из способов является создание устройства ввода-вывода, чтобы оно отвечало на аппаратном уровне так же, как и на ОЗУ, но только по определенным адресам. Чтение / запись по этим адресам идет не в ОЗУ, а на устройство ввода-вывода. Устройства ввода / вывода могут затем сделать свои регистры доступными по определенным адресам. Затем процессор читает или записывает регистры, используя те же, что и для оперативной памяти. Очень часто встречается на 8-битной архитектуре и архитектуре ARM.
- x86 имеет специальные
INа такжеOUTИнструкция по вводу / выводу. Они указывают адреса, но не те, к которым может быть подключено ОЗУ. Устройства ввода / вывода могут подключаться к этим адресам (обычно называемым "портами", их не следует путать с портами TCP) и таким образом сделать свои регистры доступными.
Продолжая с примером регистров VGA CRTC выше, с тем, как я объяснил "порты ввода / вывода" выше, вы теперь вооружены знаниями, чтобы понять это и понять, что, выпуская определенные OUT инструкции CPU затем изменяет значение в регистре ввода / вывода VGA, которое сохраняется и используется чипсетом VGA.
Не все устройства ввода / вывода имеют регистры. Некоторые из них действительно просты, и им просто нужен какой-то сигнал для выполнения своей задачи, а также "чтение" устройства просто сообщает о текущем состоянии. Старый компьютер "игровой порт" является примером. На самом деле хранения данных не происходит, поэтому технически некорректно называть это регистром. Тем не менее, большая часть технической документации не делает этого различия.
Вы можете сравнить концепцию регистра ввода-вывода с общим аппаратным регистром, поскольку регистр - это произвольный термин, используемый для обозначения области цифрового хранения. Регистр может действовать как аккумулятор, хранить информацию о выполнении, обеспечивать буфер ввода-вывода между устройствами и т. Д. Это также означает, что регистр процессора - это просто тип аппаратного регистра.
Таким образом, регистр ввода / вывода также является абстракцией регистра - он содержит промежуточные данные, перемещающиеся между компонентами. Процессоры не имеют конкретных регистров ввода-вывода, а, скорее, различных общих регистров, которые могут выполнять одну и ту же задачу (которые используются, например, когда система использует ввод-вывод с отображением в памяти). Они используются для обеспечения общей интерфейсной шины между процессором и памятью системы, но в случае MMIO разрешают доступ к памяти внешних устройств вне фактической адресной шины.
Как бы на самом деле программист сделал это? Им нужно будет определить, как внешнее устройство отображается на адресную шину системы, а затем использовать один из различных регистров x86 для сохранения адреса (в регистре указателя / указателя). Этот регистр может затем использоваться (с машинными инструкциями) для передачи данных в / из другого регистра в процессоре в регистр на устройстве.
Если процессор не поддерживает MMIO (или программист решает не использовать его), то в случае x86 также могут существовать специальные инструкции для ввода / вывода из порта (который по сути является другой шиной). Эти инструкции (IN а также OUT) работа похожа на MOV инструкция - они даже используют одни и те же регистры процессора. Единственное отличие состоит в том, что означает адрес в регистрах индекса / указателя (поскольку эти регистры используют другую карту адресов ввода / вывода).
Вот почему я говорю, что регистры ввода / вывода являются абстракцией любого другого регистра ЦП - это одно и то же. Данные все еще поступают и выходят из процессора в одни и те же регистры, независимо от того, используются они для промежуточных результатов, для передачи данных в / из ОЗУ или для доступа к внешнему оборудованию.
В зависимости от конфигурации материнской платы ЦП может получать доступ к памяти внешних устройств через саму фактическую адресную шину или другую шину, подключенную к порту на ЦП. Однако все это обычно регулируется северным мостом материнской платы для доступа к памяти и южным мостом для периферийного доступа (например, видеокарты, мышь / клавиатура).
Наконец, если вы знакомы с концепцией DMA, сами внешние периферийные устройства могут иметь регистры, специально предназначенные для целей ввода-вывода из оперативной памяти компьютера. Обратите внимание, что DMA в основном обходит любое вмешательство процессора, поэтому концепция регистра процессора здесь неприменима.
Заключительное слово: каждое устройство на вашем компьютере имеет какой-либо регистр, так как ни одно устройство не подключено напрямую к ЦП - и если бы это было так, то вы бы тратили впустую такты ЦП, сохраняя данные на шине до тех пор, пока у устройства не будет достаточно времени. использовать его (процессор обычно имеет самые быстрые часы в любой системе). Это только одна из причин, почему устройствам нужно место для хранения данных, прежде чем они смогут работать с ним - и это, по сути, регистр.
Концептуально регистры ввода / вывода и регистры процессора - это одно и то же. Они оба являются хранилищами данных для операций обработки.
Разница в одном месте. Регистры ввода / вывода и регистры ЦП являются частью одного семейства; Аппаратные регистры. Регистры ЦП живут в ЦП, регистры ввода / вывода живут вне ЦП на собственных цифровых процессорах ваших устройств ввода / вывода.
Для получения подробной информации: Аппаратные регистры, в общих чертах объясняются аппаратные регистры, упоминаются их различные типы.
При обычном использовании "регистр ввода / вывода" - это регистр, который является частью микропроцессора и физически подключен к контактам ввода / вывода микропроцессора.
Микропроцессорные ЦП могут взаимодействовать с внешним миром только через контакты ввода / вывода. Есть несколько способов, которыми внутренняя логика микропроцессора может сделать это: может быть внутренняя шина, могут быть команды доступа к памяти, которые неявно используют контакты, подключенные к внешнему адресу и шине данных, могут быть явные команды для установки значений конкретных пинов. Один из распространенных способов заключается в том, чтобы иметь логику, представляющую регистры, значения которых управляют значением, состоянием и значением выводов ввода / вывода. Эти "регистры" (которые обычно являются реальными физическими регистрами) являются регистрами ввода-вывода.
Например, см. Таблицу данных для ATtiny261A http://ww1.microchip.com/downloads/en/DeviceDoc/doc8197.pdf
"PortB" является логическим представлением 8 выводов ввода / вывода. Это имя регистра в списке регистров, а в тексте он называется регистром ввода / вывода. "GPIOR1" - это еще один регистр в списке регистров. Это регистр ввода / вывода "общего назначения", не привязанный к физическим контактам, используемый для отправки данных в регистр ввода / вывода, такой как "Порт B"