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).