В моем предыдущем вопросе я установил, что адрес памяти, используемый устройствами PCI/PCIe, не обязательно должен быть сопоставлен с системной ОЗУ, но также может относиться к памяти "на устройстве", например ОЗУ или регистрам.
Но как в этом случае настраиваются БАР?
Это просто случай (это во время настройки):
- устройство объявляет, что оно хочет показать, например, 16 МБ памяти,
- BAR получает базовый адрес,
- После этого устройство отображает смещения во внутреннюю память?
Чем это отличается от того, когда устройство желает получить доступ к 16 МБ системной памяти (т.е. устройство не имеет собственной памяти?)
Спасибо!
РЕДАКТИРОВАТЬ: Как адресация отличается между:
A: Устройство не имеет собственной памяти, например, видеоадаптер, использующий общую память.
B: Устройство имеет память и использует ее совместно с системой (например, гипотетический адаптер жесткого диска с буферами ОЗУ).
В обоих случаях BAR назначаются ОС и занимают адресуемую память?
Это различие важно в системе, полностью занятой ОЗУ (например, 32-разрядная система с установленной ОЗУ объемом 4 ГБ сможет поддерживать видеоадаптер с общей ОЗУ объемом 2 ГБ [ситуация (A)]. Но в той же системе не осталось адресного пространства для гипотетического адаптера жесткого диска с встроенной кэш-памятью объемом 2 ГБ [ситуация (B)]?