Esclarecimento da diferença entre endereçamento de memória PCI e endereçamento E / S?

5

Alguém poderia esclarecer a diferença entre a memória e os endereços de E / S no barramento PCI / PCIe?

Eu entendo que os endereços de E / S são de 32 bits, limitados ao intervalo de 0 a 4 GB, e não são mapeados na memória do sistema (RAM) e que os endereços de memória são de 32 bits ou 64 bits. p>

Tenho a impressão de que o endereçamento da memória deve ser mapeado na RAM disponível, isso é verdade? Se um dispositivo PCI desejar transferir dados para um endereço de memória, esse endereço deve existir na RAM real do sistema (e alocado durante a configuração da PCI) e não na memória virtual.

Portanto, se um dispositivo PCI precisar transferir apenas uma pequena quantidade de dados por vez, onde não há vantagem em colocá-lo na RAM ou usar DMA, o endereçamento E / S é bom (por exemplo, uma porta paralela implementada em um Placa PCI).

E por que eu continuo lendo que o endereçamento de E / S PCI / PCIe está sendo substituído em favor do endereçamento de memória?

Obrigado!

    
por KevinM 21.10.2012 / 22:12

1 resposta

4

O espaço de endereçamento físico é enorme hoje em dia devido ao endereçamento de 64 bits. Muitos dispositivos, por exemplo, controladores de disco compatíveis com AHCI, exigem que grandes blocos de espaço de endereçamento sejam mapeados para os registros de dispositivos.

Além disso, o espaço de endereço do IO não está acessível com as instruções usuais do montador. É acessível apenas com instruções especiais que podem ler e gravar nas portas IO. Isso não é realmente conveniente e ineficiente em muitos casos.

Por exemplo, o controlador compatível com ACPI mencionado acima possui alguma funcionalidade que requer que o processador execute a operação de leitura-modificação-gravação bloqueada para alterar um único bit em um registrador de dispositivo, desde que nenhum outro núcleo possa acessar e modificar o mesmo registrador. entre. Com o espaço de endereços IO, isso não é possível.

Mais um ponto que devemos levar em conta é que o barramento PCI não é exclusivo da arquitetura x86. Existem outras arquiteturas que não possuem nenhum barramento IO especial. Assim, os fornecedores de dispositivos preferem não usar endereços de E / S para permanecer compatíveis com a maioria dos sistemas. Portanto, ninguém está usando o espaço de endereço do IO. Então por que não fazer de jure a coisa que é de fato há muito tempo?

    
por 21.10.2012 / 23:40