7

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

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

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

3 ответа3

2

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

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

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

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

2

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

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

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

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

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

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

-1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .