В чем разница между аппаратным регистром и регистром с отображением в памяти?

8940

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

Когда вы говорите «регистр с отображением в памяти», вы не имеете в виду адрес, с которого байт данных перенаправляется на определенный адрес внутри этого устройства (например, теоретический: адрес GPU 0x500 предназначен для регистра TEXTURE_BUFFER). Однако устройство с отображением в памяти не может отобразить физический регистр в оперативной памяти.

В общем, в чем разница между регистром, отображаемым в памяти, и просто аппаратным регистром?

7
Если это тот случай, когда этот вопрос не подходит, я предлагаю перенести его на http://cs.stackexchange.com/ или чтобы постер разместил его там. barlop 10 лет назад 0

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

2
Daniel R Hicks

Регистры ввода-вывода с отображением в память и регистры с отображением в памяти не одно и то же и не так тесно связаны.

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

«Регистры с отображением в памяти» могут означать несколько вещей. Одним из них может быть приведенный выше пример контроллера дисковода с отображаемыми в памяти управляющими регистрами. Другой, совершенно другой случай - это процессор, который на самом деле имеет свои регистры в оперативной памяти. Это было довольно распространенным явлением на ранних (с 50-х до начала 70-х) процессорах, поскольку оно значительно уменьшало количество деталей, а также допускало некоторые «умные» практики программирования. В некоторых случаях процессор был доступен в двух моделях: одна с отображаемыми в памяти регистрами, а другая с (более быстрыми) «аппаратными» регистрами.

И в некоторых случаях это было неоднозначно относительно того, что было регистром, а что нет, как в «стековых» машинах Берроуза, где вместо стандартных регистров использовался «стек» (в IIRC есть несколько различных схем для « слежка за "регистрами в оперативной памяти".

2
LawrenceC

Аппаратные регистры с отображением в памяти доступны как RAM. Все процессоры имеют специальные инструкции для чтения / записи в ОЗУ, и эти же инструкции используются для доступа к отображенным в памяти регистрам.

Аппаратные регистры в общем случае не должны отображаться в памяти, это просто общее соглашение.

x86 обеспечивает два адресных пространств, в которых две отдельные группы инструкции используются для чтения и записи - это первое ОЗУ или пространство памяти (все MOVинструкции), во - вторых, пространство ввода / вывода ( с помощью INи OUTинструкции). На x86 аппаратные регистры могут появляться в любом месте.

Вам также может понадобиться пройти через уровень косвенности, чтобы действительно достичь аппаратного регистра. Устройство может отображать только «порт» в памяти или пространстве ввода / вывода. Затем вам нужно записать регистрационный номер на адрес, а затем данные, которые вы хотите записать на другой адрес. Затем происходит запись. Старый 8563 VDC в Commodore 128 работал так. ОЗУ CMOS и некоторые регистры PCI также работают следующим образом.

Аппаратные регистры ЦП, разумеется, не отображены в памяти (ни в x86, ни в любом другом обычном ЦП), что является еще одним примером аппаратного регистра.

Современные ЦП имеют «регистры, специфичные для модели» (MSR), и они считываются / записываются с использованием своих собственных инструкций ( RDMSR, WRMSR). Другие регистры процессора имеют свою собственную команду ( LGDT, MOV xx, CR2, основной EAX / RAX и т.д.)

-1
barlop

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

Чтобы быть более конкретным в вашем вопросе. Регистр находится в CPU или в аппаратном периферийном устройстве. Не в ОЗУ / основной памяти. Местоположение в ОЗУ / основной памяти просто называется местоположением, а не регистром. Местоположение в CPU или периферийном устройстве обычно не называется местоположением или местом в памяти и всегда называется регистром, это его специальное и правильное имя. Если регистр сопоставлен с памятью, как, без сомнения, многие регистры аппаратного периферийного устройства, то я был бы совершенно уверен, что это означает регистр с отображением в памяти.

Итак, если аппаратный регистр не сопоставлен с памятью, например, если процессор записывает в него данные напрямую, он не сопоставляется с памятью. Из этой статьи в Википедии видно, что, возможно, если эти адреса расположены в специальном пространстве и требуют специальных выводов или специальной шины, то эти места могут находиться в памяти, но не в MMIO, а не в отображаемой памяти.

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

Похожие вопросы