«Регистр процессора» и «Регистр ввода-вывода»

2254
Tim

Мне было интересно, если регистры процессора и регистры ввода-вывода - это одно и то же понятие?

Регистрируются ли они в процессоре или в некоторых устройствах ввода-вывода?

Я поднял регистры ввода-вывода из этого вопроса о супер-пользователе .

3
я бы добавил немного к вопросу .. где они? процессор? устройство? или только что нанесенные на карту места оперативной памяти? barlop 12 лет назад 0
Сейчас у меня нет времени, чтобы написать реальный ответ, но регистры - это фрагменты памяти внутри ЦП, в которых хранятся данные, которые обрабатываются в данный момент. Одним из типов регистров являются регистры ввода / вывода. AndrejaKo 12 лет назад 0
@AndrejaKo Многие говорят о регистрах ввода-вывода в устройстве, а не в процессоре. Так что, может быть, они - в устройстве, (они, вероятно, должны быть), но они иногда или всегда в процессоре? будет ли процессор просто использовать тот же регистр, когда у него есть что-то для устройства, который он будет использовать, когда у него будет что-то для оперативной памяти. Я мог бы догадаться, и тогда в ЦП нет регистра ввода-вывода. Это просто регистр данных MBR / MDR (буфер памяти / регистр данных). Тот, с которого шина данных читает. barlop 12 лет назад 0
@barlop Вы правы, процессор использует те же регистры, когда у него есть что-то для устройства, и когда у него есть что-то для оперативной памяти. Почему это? Потому что он обращается к ним таким же образом! Иногда они сопоставляют оборудование с действительной картой памяти или используют другую «карту оборудования» с другими инструкциями. НО, как вы сказали, они используют одни и те же регистры в ЦП, поэтому «особых» регистров ввода / вывода нет. Breakthrough 12 лет назад 2

3 ответа на вопрос

4
Breakthrough

Вы можете сравнить концепцию регистра ввода-вывода с общим аппаратным регистром, поскольку регистр - это произвольный термин, используемый для обозначения области цифрового хранения. Регистр может действовать как аккумулятор, хранить информацию об исполнении, обеспечивать буфер ввода-вывода между устройствами и т. Д. Это также означает, что регистр процессора - это просто тип аппаратного регистра.

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

Как бы на самом деле программист сделал это? Им нужно будет определить, как внешнее устройство отображается на адресную шину системы, а затем использовать один из различных регистров x86 для сохранения адреса (в регистре указателя / указателя). Этот регистр может затем использоваться (с машинными инструкциями ) для передачи данных в / из другого регистра в процессоре в регистр на устройстве.

Если процессор не поддерживает MMIO (или программист решает не использовать его), то в случае x86 также могут существовать специальные инструкции для ввода / вывода из порта (который по сути является другой шиной). Эти инструкции ( INи OUT) работают аналогично MOVинструкции - они даже используют одни и те же регистры процессора. Единственное отличие состоит в том, что означает адрес в регистрах индекса / указателя (поскольку эти регистры используют другую карту адресов ввода / вывода ).


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

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

Наконец, если вы знакомы с концепцией DMA, сами внешние периферийные устройства могут иметь регистры, специально предназначенные для целей ввода / вывода из оперативной памяти компьютера. Обратите внимание, что DMA в основном обходит любое вмешательство процессора, поэтому концепция регистра процессора здесь не применима.


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

2
LawrenceC

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

Например, посмотрите на это . Это различные формы ADDинструкции Intel x86 . Вы заметите, что вы можете добавить два регистра вместе или добавить регистр вместе с содержимым ячейки памяти («аккумулятор» - это просто еще один регистр, «немедленный» означает, что данные находятся непосредственно в ячейке памяти, или «немедленно»). "после фактического кода операции ADD). Нет ADD mem,mem.

Процессоры RISC, такие как ARM, еще менее гибки. Данные из памяти всегда должны быть скопированы в регистр в качестве отдельной операции перед CPU может сделать что - нибудь подобное ADD, SUBи т.д. к нему. У них есть еще много регистров, чтобы восполнить это.

Регистры ввода / вывода - как правило, что-то связанное с любой операцией, выполняемой набором микросхем или устройством ввода-вывода, должно быть в одном из его регистров.

Например, посмотрите на это . Подробно о стандарте VGA «CRTC регистры». Особый интерес представляют регистры «Начальный адрес высокого уровня» и «Начальный адрес низкого уровня». Значения в этих регистрах сообщают VGA, с чего начать чтение памяти для отображения.

Есть много способов сделать регистры ввода / вывода доступными из CPU. Обычно это не похоже на регистры процессора выше. Различные методы включают в себя:

  • Одним из способов является создание устройства ввода-вывода, чтобы оно отвечало на аппаратном уровне так же, как и на ОЗУ, но только по определенным адресам. Чтение / запись по этим адресам идет не в ОЗУ, а в устройство ввода-вывода. Устройства ввода / вывода могут затем сделать свои регистры доступными по определенным адресам. Затем процессор читает или записывает регистры, используя те же, что и для оперативной памяти. Очень часто встречается на 8-битной архитектуре и архитектуре ARM.
  • В x86 есть специальные инструкции INи OUTинструкции для ввода / вывода. Они указывают адреса, но не те, к которым может быть подключено ОЗУ. Устройства ввода / вывода могут подключаться к этим адресам (обычно называемым «портами», их не следует путать с портами TCP) и таким образом сделать свои регистры доступными.

Продолжая с примером регистров VGA CRTC выше, с тем, как я объяснил выше «порты ввода / вывода», вы теперь обладаете знаниями, чтобы понять это и понять, что, выполняя конкретные OUTинструкции, ЦП затем изменяет значение в I / VGA V / I. О регистр, который сохраняется и используется чипсетом VGA.

Не все устройства ввода / вывода имеют регистры. Некоторые из них действительно просты, и им просто нужен какой-то сигнал, чтобы сделать свое дело, а также «чтение» устройства просто сообщает о текущем состоянии. Старый компьютер "игровой порт" является примером. На самом деле хранения данных не происходит, поэтому технически некорректно называть это регистром. Тем не менее, большая часть технической документации не делает этого различия.

2
A Dwarf

Концептуально регистры ввода / вывода и регистры процессора - это одно и то же. Они оба являются хранилищами данных для операций обработки.

Разница в одном месте. Регистры ввода / вывода и регистры ЦП являются частью одного семейства; Аппаратные регистры. Регистры ЦП живут в ЦП, регистры ввода / вывода живут вне ЦП на собственных цифровых процессорах ваших устройств ввода / вывода.

Для получения более подробной информации: Аппаратные регистры, в общих чертах объясняются аппаратные регистры, упоминаются их различные типы.

Я бы добавил, что ячейки памяти (места основной памяти / ОЗУ) также являются блоками хранения данных для операций обработки, но не называются ли они регистрами? barlop 12 лет назад 0
Ну, если вы хотите быть строгими, ячейки памяти являются регистрами. A Dwarf 12 лет назад 0
@ Гном может быть в описательном смысле, но что касается терминологии, я не думаю, что они называются регистрами. barlop 12 лет назад 0
Точно. Это не так. :) A Dwarf 12 лет назад 1