1

В моем предыдущем вопросе я установил, что адрес памяти, используемый устройствами PCI/PCIe, не обязательно должен быть сопоставлен с системной ОЗУ, но также может относиться к памяти "на устройстве", например ОЗУ или регистрам.

Но как в этом случае настраиваются БАР?

Это просто случай (это во время настройки):

  • устройство объявляет, что оно хочет показать, например, 16 МБ памяти,
  • BAR получает базовый адрес,
  • После этого устройство отображает смещения во внутреннюю память?

Чем это отличается от того, когда устройство желает получить доступ к 16 МБ системной памяти (т.е. устройство не имеет собственной памяти?)

Спасибо!

РЕДАКТИРОВАТЬ: Как адресация отличается между:
A: Устройство не имеет собственной памяти, например, видеоадаптер, использующий общую память.
B: Устройство имеет память и использует ее совместно с системой (например, гипотетический адаптер жесткого диска с буферами ОЗУ).

В обоих случаях BAR назначаются ОС и занимают адресуемую память?

Это различие важно в системе, полностью занятой ОЗУ (например, 32-разрядная система с установленной ОЗУ объемом 4 ГБ сможет поддерживать видеоадаптер с общей ОЗУ объемом 2 ГБ [ситуация (A)]. Но в той же системе не осталось адресного пространства для гипотетического адаптера жесткого диска с встроенной кэш-памятью объемом 2 ГБ [ситуация (B)]?

3 ответа3

1

BAR не используются для буферов устройства в системной памяти, и устройство не запрашивает такие буферы через BAR. Скорее, спецификация интерфейса хост-регистр устройства будет включать в себя положение о том, что хост должен выделить буфер заданного размера - или размера в указанном диапазоне - и сделать его доступным для устройства.

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

Затем устройство обращается к системному буферу ОЗУ так же, как и к буферам, связанным с операциями ввода-вывода, инициируя транзакции чтения и записи в памяти, направленные на буфер.

1

Ваша интерпретация настроек BAR верна.

Тогда как это отличается.

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

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

Другой возможный вид доступа к DMA - это когда устройство запрашивает у системы некоторую область памяти для собственных нужд. Одним из примеров является встроенный видеоадаптер, который обычно не имеет собственной оперативной памяти для хранения двоичного представления изображения для отображения на экране. Однако этот случай очень похож на операцию записи на диск. Разница лишь в том, что это непрерывно.

0

Устройства PCI(e) не могут запрашивать выделенный буфер системной памяти, по крайней мере, не используя стандартные методы конфигурации PCI(e) (BAR). Единственными устройствами, которые обычно делают это, являются встроенные графические процессоры, и они имеют специальную поддержку в наборе микросхем материнской платы, который резервирует буфер памяти, но они понимаются и устанавливаются только BIOS системы.

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