Я считаю, что здесь какая-то путаница, так как есть разница между I/O и не-устройства ввода/вывода.
Из Википедии памяти ввода-вывода (MMIO):
памяти ввода/вывода
использует ту же шину адреса для обращения к памяти и устройствам ввода-вывода -
память и регистры устройств ввода-вывода сопоставляются с (связанными
с) значения адреса. Поэтому, когда к адресу обращается ЦП, он
может относиться к части физической оперативной памяти, но может также ссылаться
память устройства ввода/вывода. Таким образом, инструкции процессора, используемые для доступа
память также может использоваться для доступа к устройству. каждый прибор и / о
контролирует шину адреса ЦП и отвечает на любой доступ ЦП к
адрес, назначенный этому устройству, подключения шины данных в
регистр оборудования нужного устройства. Приспособить приборы I / O,
области адресов, используемых ЦП, должны быть зарезервированы для ввода-вывода и
не должен быть доступен для нормальной физической память.
из вашей статьи :
регистры базового адреса (или бары) могут использоваться для хранения адресов памяти
используется устройством или смещениями для адресов портов. Обычно память
адресные строки должны быть расположены в физической оперативной памяти пока космос I/O
Бары могут находиться на любой адрес памяти (даже за пределами физической памяти).
поле Тип памяти макет бар указывает размер
базовый регистр и где в памяти он может быть сопоставлен. Если он имеет
значение 0x00, то базовый регистр имеет ширину 32 бита и может быть соотнесенные
в любом месте 32-битной памяти. Значение 0x02-базовая
регистр 64-битный и может быть карту везде в 64-битной
Пространство Памяти (64-разрядный регистр базового адреса использует 2 базы
регистры адреса доступные).
таким образом, нет никакого конфликта между двумя, как это все зависит от устройства.
Если устройство перехватывает ссылку на память на шине, то адрес является виртуальным.
Если это не так, то это реальный физический адрес, который используется для связи с устройством
(например, NVRAM).
однако во всех случаях для устройств ввода-вывода используется реальный физический адрес, так как в компьютерных инструкциях к нему могут использоваться только реальные адреса.
Эта память может быть потрачена впустую, если устройство перехватывает ссылки на него.
Чтобы избежать таких отходов, операционная система обычно размещает его за пределами
реальная физическая память (это не вызовет ошибок плохого доступа к памяти,
так как устройство будет перехватывать все ссылки).
Это является причиной хорошо известной проблемы 32-разрядных компьютеров Windows
казалось бы, не в состоянии использовать весь 4 ГБ памяти.
Причина в том, что Windows, будучи 32-битной, выделяет память устройства с помощью реальных адресов,
который затем стал недоступен для обоих случаев:
действительно ли использовалась адресованная память,
или не используется, так как перехватывается устройством.
еще одна полезная статья в Википедии : пространство конфигурации PCI.