¿Por qué los dispositivos PCI comparten el mismo espacio de direcciones?

¿Por qué los dispositivos PCI comparten el mismo espacio de direcciones?

Cuando se inicia una computadora, el BIOS o el sistema operativo sondea cada dispositivo PCI para preguntar cuánto espacio de direcciones desea. Luego, asigna el espacio apropiado y le dice a cada dispositivo PCI dónde comienza su espacio, para que el dispositivo PCI pueda responder a las solicitudes de lectura y escritura dentro de ese rango.

Mi pregunta es por qué es necesario asignar bloques a todos los dispositivos desde el mismo espacio de direcciones. ¿Por qué no darle a cada dispositivo un espacio de direcciones propio?

En la placa de circuito impreso ya existe una forma "fuera de banda" de discriminar entre dispositivos PCI: la línea IDSEL. Esto es lo que se utiliza durante la enumeración de PCI, antes de que se haya asignado su espacio a cada dispositivo. Entonces, ¿por qué no utilizarlo también para los accesos posteriores a la enumeración y guardar algo de lógica de decodificación en el dispositivo PCI? ¿Habría sido eso de alguna manera más lento o algo así?

Respuesta1

Como regla general, nonecesidadpara compartir el mismo espacio de direcciones. Separar los espacios de direcciones del dispositivo es exactamente para lo que sirve una IOMMU y puede resultar útil por varias razones:

  • Puede permitir de forma segura que una máquina virtual acceda directamente al hardware físico con controladores nativos.
  • Desacopla las capacidades de direccionamiento del dispositivo del espacio de direcciones físicas. En otras palabras, le permite tener dispositivos que solo pueden realizar direccionamiento de 32 bits y acceder a datos en cualquier lugar de la memoria física, incluso por encima del primer 4G.
  • Le permite aislar los dispositivos entre sí de forma más exhaustiva, lo que puede mejorar significativamente la seguridad del sistema.

En cuanto a por qué este no es el comportamiento predeterminado y por qué la línea IDSEL no se usa para esto, realmente no puedo decirlo, ya que no tengo mucho conocimiento de la historia de los diseños PCI. Mi primera suposición sería que originalmente era para que fuera más fácil portar controladores para tarjetas ISA a PCI (ISA supone un espacio de direcciones compartido plano). Además, los IOMMU no son exactamente el hardware más fácil de diseñar, y recientemente han estado ampliamente disponibles en plataformas x86 (y todavía no están garantizados, muchos chips Intel aún no los tienen, y muchos chips AMD de gama baja tampoco lo hagas).

Sin embargo, vale la pena señalar que con PCI Express, en realidad existe una ventaja al compartir el espacio de direcciones entre dispositivos, es decir, que le permite realizar transferencias de dispositivo a dispositivo (aunque la mayoría de las plataformas no lo admiten adecuadamente), lo que puede ser muy útil en configuraciones de grid grandes que usan RDMA (puede obtener datos de dispositivos remotos directamente, sin necesidad de que el sistema operativo del sistema remoto medie una vez que se configura la transferencia).

Respuesta2

Para los sistemas x86, la propia CPU solo puede acceder a dos espacios de direcciones: el espacio de direcciones de memoria normal y el espacio de direcciones IO. Es posible que otros sistemas solo tengan un espacio de direcciones (por ejemplo, ARM, powerpc, etc.). Estos dos espacios de direcciones están separados desde el punto de vista de los dispositivos PCI: se utilizan diferentes comandos para acceder a cada espacio de direcciones y los puentes tienen registros de configuración separados para cada espacio de direcciones. Sin embargo, como la CPU sólo puede acceder a estos dos espacios de direcciones, todos los dispositivos conectados deben estar asignados a estos dos espacios de direcciones. Así que en realidad no se trata tanto de una limitación de PCI como de una limitación de la arquitectura del resto del sistema.

También debo mencionar que cuando se desarrolló PCI, no existía un IOMMU, que es una incorporación relativamente reciente.

información relacionada