Мне было интересно, если регистры процессора и регистры ввода-вывода - это одно и то же понятие?
Регистрируются ли они в процессоре или в некоторых устройствах ввода-вывода?
Я поднял регистры ввода-вывода из этого вопроса о супер-пользователе.
Мне было интересно, если регистры процессора и регистры ввода-вывода - это одно и то же понятие?
Регистрируются ли они в процессоре или в некоторых устройствах ввода-вывода?
Я поднял регистры ввода-вывода из этого вопроса о супер-пользователе.
Вы можете сравнить концепцию регистра ввода-вывода с общим аппаратным регистром, поскольку регистр - это произвольный термин, используемый для обозначения области цифрового хранения. Регистр может действовать как аккумулятор, хранить информацию о выполнении, обеспечивать буфер ввода-вывода между устройствами и т.д. Это также означает, что регистр процессора - это просто тип аппаратного регистра.
Таким образом, регистр ввода / вывода также является абстракцией регистра - он содержит промежуточные данные, перемещающиеся между компонентами. Процессоры не имеют определенных регистров ввода-вывода, а, скорее, различных общих регистров, которые могут выполнять одну и ту же задачу (которые используются, например, когда система использует ввод-вывод с отображением памяти). Они используются для обеспечения общей интерфейсной шины между процессором и памятью системы, но в случае MMIO разрешают доступ к памяти внешних устройств вне фактической адресной шины.
Как бы на самом деле программист сделал это? Им нужно будет определить, как внешнее устройство отображается на адресную шину системы, а затем использовать один из различных регистров x86 для сохранения адреса (в регистре указателя / указателя). Этот регистр затем может быть использован (с машинными инструкциями) для передачи данных в / из другого регистра в процессоре в регистр на устройстве.
Если процессор не поддерживает MMIO (или программист решает не использовать его), то в случае x86 также могут существовать специальные инструкции для ввода / вывода из порта (который по сути является другой шиной). Эти инструкции (IN
и OUT
) работают аналогично инструкции MOV
- они даже используют одни и те же регистры процессора. Единственное отличие состоит в том, что означает адрес в регистрах индекса / указателя (поскольку эти регистры используют другую карту адресов ввода / вывода).
Вот почему я говорю, что регистры ввода / вывода являются абстракцией любого другого регистра ЦП - это одно и то же. Данные все еще поступают и выходят из процессора в одни и те же регистры, независимо от того, используются ли они для промежуточных результатов, передачи данных в / из ОЗУ или для доступа к внешнему оборудованию.
В зависимости от конфигурации материнской платы ЦП может обращаться к памяти внешних устройств через саму фактическую адресную шину или другую шину, подключенную к порту на ЦП. Однако все это обычно регулируется северным мостом материнской платы для доступа к памяти и южным мостом для периферийного доступа (например, видеокарты, мышь / клавиатура).
Наконец, если вы знакомы с концепцией DMA, сами внешние периферийные устройства могут иметь регистры, специально предназначенные для целей ввода / вывода из оперативной памяти компьютера. Обратите внимание, что DMA в основном обходит любое вмешательство процессора, поэтому концепция регистра процессора здесь не применима.
Заключительное слово: каждое устройство на вашем компьютере имеет какой-либо регистр, так как ни одно устройство не подключено напрямую к ЦП - и если бы это было так, то вы бы тратили впустую такты ЦП, сохраняя данные на шине, пока у устройства не было достаточно времени использовать его (процессор обычно имеет самые быстрые часы в любой системе). Это только одна из причин, почему устройствам нужно место для хранения данных, прежде чем они смогут работать с ним - и это, по сути, все регистры.
Концептуально регистры ввода / вывода и регистры процессора - это одно и то же. Они оба являются хранилищами данных для операций обработки.
Разница в одном месте. Регистры ввода / вывода и регистры ЦП являются частью одного семейства; Аппаратные регистры. Регистры ЦП живут в ЦП, регистры ввода / вывода живут вне ЦП на собственных цифровых процессорах ваших устройств ввода / вывода.
Для получения более подробной информации:Аппаратные регистры, в общих чертах объясняются аппаратные регистры, упоминаются их различные типы.
Регистры процессора - как правило, что-то связанное с любой операцией, которую выполняет процессор, должно быть в одном из его регистров.
Например, посмотрите на это. Это различные формы инструкции Intel x86 ADD
. Вы заметите, что вы можете добавить два регистра вместе или добавить регистр вместе с содержимым ячейки памяти ("аккумулятор" - это просто другой регистр, "немедленный" означает, что данные находятся непосредственно в ячейке памяти, или "немедленно"). "после фактического кода операции ADD). Там нет ADD mem,mem
.
Процессоры RISC, такие как ARM, еще менее гибки. Данные из памяти всегда должны быть скопированы в регистр как отдельная операция, прежде чем ЦП сможет что-либо сделать с ним, например ADD
, SUB
и т.д. У них есть еще много регистров, чтобы восполнить это.
Регистры ввода / вывода - как правило, что-то связанное с любой операцией, выполняемой набором микросхем или устройством ввода-вывода, должно быть в одном из его регистров.
Например, посмотрите на это. Подробно о стандарте VGA "CRTC регистры". Особый интерес представляют регистры "Начальный адрес высокого уровня" и "Начальный адрес низкого уровня". Значения в этих регистрах сообщают VGA, с чего начать чтение памяти для отображения.
Есть много способов сделать регистры ввода / вывода доступными из CPU. Обычно это не похоже на регистры процессора выше. Различные методы включают в себя:
IN
и OUT
для ввода / вывода. Они указывают адреса, но не те, к которым может быть подключено ОЗУ. Устройства ввода / вывода могут подключаться к этим адресам (обычно называемым "портами", их не следует путать с портами TCP) и таким образом сделать свои регистры доступными.Продолжая с примером регистров VGA CRTC выше, с тем, как я объяснил выше «порты ввода / вывода», вы теперь обладаете знаниями, чтобы понять это и понять, что, выполняя конкретные инструкции OUT
ЦПУ затем изменяет значение в VGA I Регистр / O, который сохраняется и используется чипсетом VGA.
Не все устройства ввода / вывода имеют регистры. Некоторые из них действительно просты, и им просто нужен какой-то сигнал, чтобы сделать свое дело, а также "чтение" устройства просто сообщает о текущем состоянии. Старый компьютер "игровой порт" является примером. На самом деле хранения данных не происходит, поэтому технически некорректно называть это регистром. Тем не менее, большая часть технической документации не делает этого различия.