Понимание соответствия адресов PCI

Я изучаю архитектуру ПК и чувствую, что не понимаю основ PCI-адресов.

У нас есть три адресных пространства в PCI: память, входные и выходные порты и конфигурация. Я знаю, что процессор может различать память и порты с помощью разных команд, но что происходит в PCI? У нас есть несколько команд в шине (чтение / запись в эти места, обработка прерываний и т. Д.). Я думал, что при чтении пространства памяти мы обращаемся к физическому адресу ОЗУ, но после прочтения некоторых руководств похоже, что мы обращаемся к памяти внутренних устройств.

  1. Зачем использовать отображение памяти? Означает ли это, что когда какая-либо программа записывает в ОЗУ адрес, сопоставленный с каким-либо устройством PCI, она фактически записывает в память устройства? Почему бы не использовать стандартную запись портов ввода-вывода?
  2. Как получить доступ к реальной памяти при необходимости? Например, если устройство хочет сохранить некоторые данные в оперативной памяти, как этот запрос будет отличаться от доступа к "пространству памяти"?

2 ответа

Конечное устройство PCI, которое имеет собственную память (на самом устройстве конечной точки), за исключением 256 байтов пространства конфигурации, определенного в спецификации PCI. Эта память должна быть перенесена в адресное пространство системы, чтобы система могла получить к ней доступ. Есть два способа перенести эту память в системное адресное пространство -

  1. Port Mapped IO - адресное пространство, предназначенное для доступа к устройству ввода-вывода и доступ к которому осуществляется через специальные инструкции IN & OUT (на платформе x86). x86 использует 0xCFC(порт данных конфигурации) и 0xCF8(порт адреса конфигурации) для доступа к устройству оконечной точки PCI.

  2. IO с отображением в память - область физического адресного пространства зарезервирована для области с отображением в памяти и будет доступна для инструкций памяти, таких как LOAD & STORE. Доступ к этому региону MMIO будет направлен на соответствующее конечное устройство.

Поэтому, когда инструкция выходит из процессора, она либо попадает в память, либо будет операцией ввода-вывода. В системах у нас очень ограниченное адресное пространство ввода-вывода (64 КБ для компьютеров x86), но очень большой объем физического адресного пространства. Также доступ к оконечному устройству PCI через IO, сопоставленный с портом, сравнительно медленнее, поскольку требует больше циклов ЦП. Доступ к памяти быстрее, так как он требует меньшего количества циклов ЦП, поэтому MMIO является лучшим подходом, чем порт Mapped IO.

Примечание: во время процесса перечисления BIOS должен получить доступ к пространству конфигурации устройства, чтобы выполнить инициализацию. На данный момент в PCI существует только один способ доступа к устройству, который называется механизмом доступа к пространству конфигурации PCI, который использует порт 0xCFC и 0xCF8 для доступа к пространству конфигурации. Затем позднее BIOS устанавливает диапазон MMIO, запрошенный конечной точкой. устройство.

Примечание. Когда мы говорим "Физическое адресное пространство", это означает, что диапазон адресов, к которому может обращаться ЦП. например, 64-битный процессор может иметь до 2^64 = 16EB (зависит от используемых адресных линий), что является огромной величиной диапазона адресов. "Физическое адресное пространство" не означает, что его адрес находится в пределах ОЗУ.

Примечание. Спецификация PCI Express PCI-SIG(PCI - Специальная группа по интересам) предлагает не реализовывать адресное пространство ввода-вывода, адресное пространство ввода-вывода может быть полностью удалено в будущих версиях / спецификациях PCIe.

Не думайте об адресах памяти как о "адресах памяти". Пространство памяти, занимаемое ОЗУ, составляет небольшую часть общего адресного пространства ЦП. Остальная часть адресного пространства памяти используется для MMIO, включая устройства PCI. Любой доступ ЦП к этим адресам направляется процессором в соответствующие регистры устройства.

Ответ Питера относительно причины использования MMIO является правильным: инструкции ввода-вывода сериализуются, а доступ к памяти внутри ЦП высоко оптимизирован, поэтому при доступе к пространству памяти значительно меньше накладных расходов, чем при доступе к пространству ввода-вывода.

Доступ устройства к пространству памяти (DMA) маршрутизируется аналогично обращению к процессору - если доступ находится в диапазоне адресов памяти RAM, доступ направляется в RAM, и если доступ находится в диапазоне адресов другого устройства, он направляется на это устройство.

Другие вопросы по тегам