Como a memória virtual de 32 bits do Linux é estruturada em relação aos Registradores de Endereço Base PCIe

1

Estou trabalhando em um sistema Linux (32 bits, 4GB de RAM) e encontrei algumas informações contraditórias sobre o endereçamento de memória no Linux.

Estou certo com isso:

Apenas a memória virtual tem a diferenciação entre o kernel e o espaço do usuário. A memória virtual está em um sistema de 32 bits de 4 GB. 3 GB para o espaço do usuário, 1 GB para o espaço do kernel.

Mas também há endereços para a memória física ou que não estão localizados - fazendo referência a ZONE_NORMAL e sua associação com o Kernel / User-pages? .

  • Nesta homepage é ilustrado que a memória física também tem a diferenciação no kernel e no espaço do usuário , está certo?

  • Como estou trabalhando com o PCIe, gostaria de saber como é possível que o BAR tenha um endereço físico?

  • Isso significaria que há um espaço reservado para o dispositivo PCIe - onde esse espaço está localizado?

  • Existe uma estrutura especial na memória física? Eu encontrei uma referência aqui , que pode mostrar a estrutura na figura 16.

  • Estou traduzindo esse endereço BAR em um endereço virtual, então, como isso é possível?

  • Também algumas referências dizem que cada processo pode usar todos os endereços virtuais, certo? Se sim, como posso combinar esse fato com os anteriores?

por Thomas 08.07.2014 / 14:19

1 resposta

0

Há tanto usuário como kernel memória virtual no Linux mapeado para a memória física.

Pode haver alocação de memória física que não esteja mapeada nos espaços virtuais do Usuário ou do Kernel. Por exemplo, as tabelas de páginas que mapeiam virtual - > fisica.

Por memória física que não está disponível para o sistema operacional, o BIOS fornece um mapa da memória disponível no momento da inicialização.

PCI Registros de endereço de base que se referem à memória fornecem um intervalo de memória endereçável que é roteado para o dispositivo PCI (e). Isso, em certo sentido, rouba esses intervalos de memória endereçáveis da memória física. Em sistemas de 32 bits que contêm 4 GB de RAM, este cria um buraco na RAM física, pois todo o espaço endereçável também é endereçado à RAM física. . Sistemas que fazem uso de PAE podem reorganizar coisas para usar essa RAM "ausente".

Alguns dispositivos podem mapear sua memória para a memória do sistema, como nas GPUs. Eles fazem uso do GART do PCIe para mapear um conjunto contíguo de endereços MMIO para a RAM física. O BIOS marcará esses intervalos como memória inutilizável para o sistema operacional.

    
por 09.07.2014 / 18:43