PCI Express - Разъяснение о BAR, адресации памяти и физической памяти
Я абсолютный новичок, начинающий понимать протокол PCI Express, и мне нужны некоторые пояснения о его механике.
Я понял, что у оконечного устройства PCI Express может быть некоторый BAR памяти, отображаемый в системной памяти (всегда ли это RAM системная память, о которой мы говорим?). Мне нужно понять, что происходит, когда я отправляю из CPU на устройство (A) запрос чтения памяти, обращаясь к определенному адресу памяти (первая строка памяти, смещение 0).
Давайте предположим, что мое устройство не имеет встроенной памяти.
Корневой комплекс от имени CPU создает TLP и пересылает его на устройство (A), поскольку адрес памяти назначения назначен (A).
A получает TLP, распаковывает его и создает TLP завершения, содержащий данные, поступающие из его внутренней логики приложения.
Теперь TLP перемещается назад к корневому комплексу, который распаковывает его, собирает интересные данные и возвращает их в CPU.
Какова роль системной памяти во время этого общения? Никто?
Связывается ли корневой комплекс (в данном случае) с физической памятью системы, кроме отправки и получения пакетов в / из конечной точки?
Для некоторых людей это может показаться глупым вопросом, но для меня очень важно понять связь между физической памятью и адресными полосами памяти, назначенными каждому устройству PCI Express.
1 ответ
Когда ЦП обращается к адресу памяти, это не ОЗУ, которое должно отвечать. Это может быть устройство ввода-вывода. На самом деле вы можете думать об оперативной памяти как о "специализированном устройстве ввода-вывода с отображением в памяти", задача которого - просто сохранять и возвращать данные, хотя с современными современными процессорами, которые имеют кеширование и тому подобное, это не просто физически.
Я не слишком заинтересован в деталях низкого уровня PCIe, но вам, кажется, интересно, как шина PCIe взаимодействует с процессором. Это так же, как и все, что связано с процессором:
- Отображение памяти - то есть устройство "сопоставляется", когда чтение и запись по диапазону адресов идет не в ОЗУ, а в устройство или контроллер.
- DMA - внешнее устройство или контроллер читает / записывает раздел оперативной памяти, при этом процессор вообще не подключается.
- Порты ввода / вывода - это просто еще одно адресное пространство (особенность семейства процессоров Intel x86), которое исторически было выделено для устройств ввода / вывода. Вы никогда не найдете RAM здесь, но это работает как отображение памяти. Основное различие между портами ввода-вывода и отображением памяти состоит в том, что инструкции порта ввода-вывода всегда работают последовательно, здесь не будет происходить "неупорядоченный" или "переупорядочивание" операций, в отличие от попыток ЦП сделать это при доступе к главному объем памяти.
- IRQ - внешнее устройство отправляет прерывание на процессор
Бары и тому подобное "отображаются" в памяти и заменяют любую оперативную память, которая может быть "под ней". Я считаю, что с MMU можно "переназначить" оперативную память под другим физическим адресом.