PCI Express - Esclarecimento sobre BAR, endereçamento de memória e memória física

5

Sou um iniciante absoluto, começando a entender o protocolo PCI Express e preciso de alguns esclarecimentos sobre sua mecânica.

Eu entendi que um dispositivo de terminal PCI Express pode ter alguma memória BAR mapeada na memória do sistema (é sempre RAM a memória do sistema que estamos falando?). Eu preciso entender o que acontece quando eu envio da CPU para o dispositivo (A) uma solicitação de leitura de memória, endereçando um determinado endereço de memória (primeira memória BAR, offset 0).

Vamos supor que meu dispositivo não tenha memória no dispositivo.

O complexo raiz em nome da CPU cria o TLP e o encaminha para o dispositivo (A) porque o endereço de memória do destino é atribuído a (A).

A recebe o TLP, descompacta-o e cria um TLP de conclusão contendo dados provenientes de sua lógica interna de aplicativos.

Agora, o TLP viaja de volta para o Complexo Raiz que o descompacta, reúne os dados interessantes e os devolve à CPU.

Qual é o papel da memória do sistema durante esta comunicação? Nenhum?

O complexo raiz se comunica (neste caso) com a memória física do sistema, além de enviar e receber pacotes de / para o endpoint?

Para algumas pessoas, pode parecer uma pergunta boba, mas para mim isso é crucial para entender a conexão entre a memória física e as BARs de endereço de memória atribuídas a cada dispositivo PCI Express.

    
por Jacopo Reggiani 13.06.2013 / 12:32

1 resposta

1

Quando uma CPU fala com um endereço de memória, não é a RAM que precisa responder. Pode ser um dispositivo de E / S. Na verdade, você pode pensar na RAM como um "dispositivo de E / S mapeado por memória especializado" cujo trabalho é apenas salvar e devolver dados, embora com CPUs atuais de hoje que têm armazenamento em cache e tal não seja fisicamente simples.

Eu não estou muito interessado nos detalhes de baixo nível do PCIe, mas você parece estar se perguntando como o próprio barramento PCIe se comunica com o processador. Faz como qualquer outra coisa que se comunica com a CPU:

  • Mapeamento de memória - ou seja, um dispositivo é "mapeado", em que leituras e gravações em um intervalo de endereços não vão para a RAM, mas para um dispositivo ou controlador.
  • DMA - um dispositivo externo ou controlador lê / grava uma seção da RAM, sem que a CPU esteja envolvida de forma alguma.
  • Portas de E / S - este é apenas outro espaço de endereço (um recurso da família de CPUs Intel x86) que historicamente tem sido dedicado a dispositivos de E / S. Você nunca encontrará RAM aqui, mas funciona como um mapeamento de memória. A principal diferença entre as portas de E / S e o mapeamento de memória é que as instruções de porta de E / S sempre funcionam em série, sem "fora de ordem" ou "reordenação" das operações aqui, ao contrário da CPU tentando fazer isso com acessos ao principal memória.
  • IRQs - um dispositivo externo envia uma interrupção para a CPU

As BARs e tais são "mapeadas" na memória e tomam o lugar de qualquer RAM que possa estar "abaixo". Com a MMU, acredito que é possível "remapear" a RAM abaixo dela para um endereço físico diferente.

    
por 13.06.2013 / 13:45