Por que os dispositivos PCI compartilham o mesmo espaço de endereço?

0

Quando um computador é inicializado, o BIOS ou o sistema operacional investiga cada dispositivo PCI para perguntar quanto espaço de endereço deseja. Em seguida, ele aloca o espaço apropriado e informa a cada dispositivo PCI onde seu espaço começa, para que o dispositivo PCI possa responder a solicitações de leitura e gravação nesse intervalo.

Minha pergunta é por que todos os dispositivos precisam receber blocos do mesmo espaço de endereço. Por que não dar a cada dispositivo um espaço de endereço próprio?

Na placa de circuito impresso, já existe uma maneira "fora de banda" para discriminar entre dispositivos PCI: a linha IDSEL. Isso é o que é usado durante a enumeração de PCI, antes de cada o dispositivo teve seu espaço alocado. Então, por que não usar isso para acessos pós-enumeração e salvar alguma lógica de decodificação no dispositivo PCI? Isso teria sido mais lento ou algo assim?

    
por Maxpm 07.06.2018 / 20:10

1 resposta

1

Como regra geral, eles não precisam para compartilhar o mesmo espaço de endereço. Separar os espaços de endereço do dispositivo é exatamente o que um IOMMU serve e pode ser útil por diversos motivos:

  • Pode permitir com segurança que uma máquina virtual acesse diretamente o hardware físico com drivers nativos.
  • Ele separa os recursos de endereçamento do dispositivo do espaço de endereço físico. Em outras palavras, permite que você tenha dispositivos que só podem fazer dados de acesso de endereçamento de 32 bits em qualquer lugar na memória física, mesmo acima do primeiro 4G.
  • Permite isolar os dispositivos uns dos outros com mais detalhes, o que pode melhorar significativamente a segurança do sistema.

Por que esse não é o comportamento padrão, e por que a linha IDSEL não é usada para isso, eu não posso dizer, já que não tenho muito conhecimento do histórico de projetos PCI. Meu primeiro palpite seria que era originalmente para que fosse mais fácil portar drivers para placas ISA para PCI (ISA assume um espaço de endereço compartilhado simples). Além disso, os IOMMUs não são exatamente o hardware mais fácil de projetar, e só recentemente se tornaram amplamente disponíveis em plataformas x86 (e ainda não são garantidos, muitos chips da Intel ainda não os têm, e muitos chips AMD de baixo custo não quer).

No entanto, pode ser interessante ressaltar que, com o PCI Express, há uma vantagem em compartilhar o espaço de endereço entre dispositivos, ou seja, permitir transferências de dispositivo para dispositivo (embora a maioria das plataformas não ofereça suporte adequado a isso) , o que pode ser muito útil em grandes configurações de rede que usam RDMA (você pode obter dados de dispositivos remotos diretamente, sem precisar do sistema operacional do sistema remoto para mediar quando a transferência estiver configurada).

    
por 07.06.2018 / 20:36

Tags