Come vengono configurate le BAR PCI / PCIe per accedere alla memoria sul dispositivo?


1

Nella mia domanda precedente , ho stabilito che l'indirizzo di memoria utilizzato dai dispositivi PCI / PCIe non deve essere mappato alla RAM di sistema, ma potrebbe anche riferirsi alla memoria "sul dispositivo", ad esempio RAM o registri.

Ma come sono impostati i BAR in questo caso?

È semplicemente un caso (che durante la configurazione):

  • il dispositivo pubblicizza che desidera esporre, ad esempio 16 MB di memoria,
  • BAR viene assegnato un indirizzo di base,
  • Successivamente il dispositivo mappa gli offset sulla sua memoria interna?

In che cosa differisce da quando il dispositivo desidera accedere a 16 MB di memoria di sistema (ovvero il dispositivo non ha memoria propria?)

Grazie!

EDIT: in che modo l'indirizzamento differisce tra:
A: il dispositivo non ha memoria propria, ad es. Un adattatore video che utilizza memoria condivisa.
B: il dispositivo ha memoria e la condivide con il sistema (ad es. Ipotetico adattatore HDD con buffer RAM).

In entrambi i casi, i BAR sono assegnati dal sistema operativo e occupano memoria indirizzabile?

Questa distinzione è importante in un sistema completamente occupato con RAM (ad esempio un sistema a 32 bit con 4 GB di RAM installati sarebbe in grado di supportare un adattatore video con 2 GB di RAM condivisa [situazione (A)]. Ma lo stesso sistema non ha spazio di indirizzamento lasciato per un ipotetico adattatore per HDD con cache RAM integrata da 2 GB [situazione (B)]?


Come faccio a far migrare questa domanda su StackOverflow? Forse è una casa migliore per questo. Non voglio solo ripetere la stessa domanda lì ...
KevinM,

Risposte:


1

La tua interpretazione della configurazione BAR è corretta.

Quindi come differisce.

La memoria / i registri di bordo del dispositivo sono in genere una RAM speciale, può essere una RAM a due porte (quando ogni cella ha due porte una è collegata al bus host, un'altra al bus interno del dispositivo, ciò consente un accesso più rapido e simultaneo da entrambi lati), può essere un registro o anche direttamente alcuni ingressi o uscite di alcuni FPGA - Field-Programmable Gate Array che controlla alcune logiche del dispositivo.

La RAM di sistema principale a cui un dispositivo può accedere per mezzo del DMA ha spesso una designazione completamente diversa. Nel caso più comune viene utilizzato come origine dati o destinazione dati per il dispositivo. Ad esempio, nel caso di unità disco, il dispositivo accederà alla memoria per leggere i dati o per scrivere questi dati sul supporto. La posizione di tali fonti e destinazioni non è limitata dai buffer di sistema. Ad esempio il paging (scambio dentro e fuori dalla memoria virtuale) viene eseguito direttamente da / verso l'indirizzo fisico della pagina in questione.

L'altro tipo possibile di accesso DMA è quando il dispositivo richiede al sistema un'area di memoria per le proprie esigenze. Uno degli esempi è un adattatore video integrato che di solito non ha una propria RAM per mantenere la rappresentazione binaria dell'immagine da visualizzare sullo schermo. Tuttavia, questo caso è molto simile all'operazione di scrittura su disco. L'unica differenza è che è continuo.


Grazie - ma non sono ancora sicuro al 100% di comprendere come è impostato l'indirizzamento per un dispositivo che utilizza la RAM di sistema rispetto a uno con la propria memoria / memoria (ad esempio esempi di RAM a due porte o FPGA). Ho modificato la domanda, chiedendo ulteriori chiarimenti.
KevinM,

1

Le BAR non vengono utilizzate per i buffer dei dispositivi nella RAM di sistema e il dispositivo non richiede tali buffer tramite le BAR. Piuttosto, le specifiche dell'interfaccia del registro host del dispositivo includeranno una disposizione secondo cui l'host deve allocare un buffer di una determinata dimensione - o una dimensione all'interno di un intervallo specificato - e renderlo disponibile al dispositivo.

Piuttosto, il driver host assegnerà un buffer dalla RAM di sistema e dirà al dispositivo dove si trova (e, se non è di dimensioni fisse, quanto è grande), forse semplicemente scrivendo l'indirizzo in un registro del dispositivo, forse come parte di un protocollo più complesso.

Il dispositivo accede quindi al buffer della RAM di sistema così come accederebbe ai buffer associati alle operazioni di I / O, avviando transazioni di lettura e scrittura della memoria dirette al buffer.


0

I dispositivi PCI (e) non possono richiedere un buffer di memoria di sistema dedicato, almeno non usando i metodi di configurazione PCI (e) standard (BAR). Gli unici dispositivi che generalmente fanno questo sono GPU integrate e hanno un supporto speciale nel chipset della scheda madre che riserva il buffer di memoria, ma questi sono solo compresi e impostati dal BIOS di sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.