Откуда ЦП знает адресное пространство PCI

Я понимаю, что устройства PCI и PCIe могут быть настроены ЦП (с помощью кода в BIOS или ОС) для ответа на определенные физические адреса памяти путем записи в определенные области пространства конфигурации устройства.
На самом деле ядро ​​Linux имеет довольно сложный алгоритм для этого, учитывающий множество требований устройства (выравнивание памяти, возможности DMA и т. Д.).

Видя, что программное обеспечение, кажется, контролирует, когда и где эта память отображается, мой вопрос: как часть программного обеспечения может управлять отображением физической памяти?

После этой конфигурации устройство PCI будет знать, что нужно ответить на указанный диапазон адресов, но как ЦП узнает, что он должен перейти на шину PCI для тех конкретных адресов, которые были просто динамически определены?


person Lifesworder    schedule 27.10.2013    source источник
comment
не могли бы вы добавить ссылку на этот алгоритм из исходного кода ядра Linux (веб-просмотр)?   -  person n611x007    schedule 01.08.2014


Ответы (2)


Северный мост запрограммирован с диапазоном адресов, которые должны быть направлены на контроллер (ы) памяти. Все остальные адреса идут на внешнюю шину.

person CL.    schedule 27.10.2013
comment
Но ведь это не непрерывно? Должно ли ПО конфигурации заполнять БАР для каждой физ. диапазон памяти? - person Pyjong; 03.05.2016
comment
@Pyjong Все эти подходы идут к автобусу; сами устройства декодируют адреса. - person CL.; 03.05.2016
comment
ну да, устройства правильно реагируют на адреса, указанные в их BAR. - person Pyjong; 03.05.2016
comment
Ага, согласно инструкции Intel к (G) MCH, есть БАРЫ для всех диапазонов. - person Pyjong; 04.05.2016

Он основан на информации о сопоставлении адресов, которую имел ЦП. обычно у вас есть 2 ^ 64 -1 адресных строк с CPU, если это 64-битный процессор. Теперь память составляет около 16 ГБ, что составляет 2 ^ 34, что составляет около 16 ГБ. Таким образом, все устройства, которые имеет ЦП (даже устаревшие устройства PCI и PCIe), и их пространство конфигурации могут быть сопоставлены с адресной строкой над этим физическим адресным пространством ОЗУ. Любой ввод-вывод в это пространство может быть перенаправлен на соответствующее устройство. В нашем случае ЦП обнаруживает, что пространство конфигурации, к которому он хочет получить доступ, является устройством PCI или PCIe, а затем перенаправляет инструкцию на хост-мост ЦП (00:00:00 Выполните lspci в поле, вы увидите мост хоста с этот BDF)

Как только он обнаруживает, что целевое устройство находится внутри хост-моста, инструкция (может быть ввод-вывод или память) будет преобразована в соответствующий запрос TLP.

person Venfah Nazir    schedule 20.08.2019