Как правило, им не нужно использовать одно и то же адресное пространство. Разделение адресных пространств устройства - это именно то, для чего нужен IOMMU, и может быть полезно по ряду причин:
- Он может безопасно позволить виртуальной машине получать прямой доступ к физическому оборудованию с помощью собственных драйверов.
- Он отделяет возможности адресации устройства от физического адресного пространства. Другими словами, он позволяет вам иметь устройства, которые могут выполнять только 32-битную адресацию доступа к данным в любом месте физической памяти, даже выше, чем первый 4G.
- Это позволяет более тщательно изолировать устройства друг от друга, что может значительно повысить безопасность системы.
Что касается того, почему это не поведение по умолчанию и почему линия IDSEL не используется для этого, я не могу сказать точно, так как я не очень хорошо знаю историю разработок PCI. Моим первым предположением будет то, что изначально так было проще переносить драйверы для карт ISA на PCI (ISA предполагает единое адресное пространство). Кроме того, IOMMU не совсем легкая в разработке аппаратура, и только недавно они стали широко доступны на платформах x86 (и до сих пор не гарантированы, у многих чипов Intel их еще нет, и у многих недорогих чипов AMD). тоже не надо)
Возможно, стоит отметить, что с PCI Express, на самом деле, есть преимущество в разделении адресного пространства между устройствами, а именно в том, что он позволяет вам выполнять передачу между устройствами (хотя большинство платформ не поддерживают это должным образом), что может быть очень полезным в больших сеточных установках, которые используют RDMA (вы можете получать данные с удаленных устройств напрямую, без необходимости в ОС удаленной системы в качестве посредника после настройки передачи).