Registros de mapa

Los controladores que realizan DMA usan tres espacios de direcciones diferentes, como se muestra en la ilustración siguiente.

asignaciones de direcciones físicas, lógicas y virtuales.

En cualquier plataforma windows, un controlador tiene acceso al espacio de direcciones virtuales completo admitido por el procesador. En un procesador de 32 bits, el espacio de direcciones virtuales representa cuatro gigabytes. La CPU traduce las direcciones del espacio de direcciones virtuales a las direcciones del espacio de direcciones físicos del sistema mediante una tabla de páginas. Cada entrada de tabla de páginas (PTE) asigna una página de memoria virtual a una página de memoria física, lo que da lugar a una operación de paginación cuando es necesario. Una MDL (lista de descriptores de memoria) proporciona una asignación similar para un búfer asociado a las operaciones DMA del controlador.

Los dispositivos varían en su capacidad de acceder al espacio de direcciones virtuales completo del sistema. Un dispositivo usa direcciones en el espacio de direcciones lógicos (dispositivo). Cada HAL usa registros de mapa para traducir un dispositivo o una dirección lógica a una dirección física (una ubicación en la RAM física). Para el hardware del dispositivo, los registros de asignación realizan la misma función que mdl (y tabla de páginas) realiza para el software (controladores): traducen direcciones a memoria física.

Dado que estos espacios de direcciones se abordan por separado, un controlador no puede usar un puntero en el espacio de direcciones virtuales para abordar una ubicación en memoria física y viceversa. El controlador debe traducir primero la dirección virtual a una dirección física. De forma similar, un dispositivo no puede usar una dirección lógica para acceder directamente a la memoria física. El dispositivo debe traducir primero la dirección.

Un HAL debe configurar objetos de adaptador que admitan DMA para una amplia variedad de dispositivos DMA y buses de E/S en diferentes equipos. Por ejemplo, la mayoría de los controladores DMA de ISA, los dispositivos subordinados y los dispositivos bus-master tienen líneas de direcciones insuficientes para acceder al espacio de direcciones físicos completo del sistema de cuatro gigabytes de un procesador de 32 bits (o la dirección física del sistema de 64 gigabytes de un procesador x86 que se ejecuta en modo PAE de 36 bits). Por el contrario, los dispositivos PCI DMA suelen tener más líneas de direcciones para acceder al espacio de direcciones físico completo del sistema en procesadores de 32 bits. Por lo tanto, cada HAL proporciona asignaciones entre los intervalos de direcciones lógicos a los que los dispositivos DMA pueden acceder y los intervalos de direcciones físicos de cada equipo.

Cada objeto de adaptador está asociado a uno o varios registros de mapa, según la cantidad de datos que se van a transferir y la cantidad de memoria disponible. Durante las transferencias DMA, HAL usa cada registro de mapa para dar alias a una página lógica accesible para el dispositivo a una página de memoria física en la CPU. En efecto, los registros de mapa proporcionan compatibilidad de dispersión/recopilación para controladores que usan DMA, independientemente de si sus dispositivos tienen funcionalidades de dispersión o recopilación.

En la ilustración siguiente se muestra una asignación de direcciones físicas a lógicas para el controlador de un dispositivo DMA de ISA que no tiene funcionalidades de dispersión o recopilación.

asignación de direcciones para un dispositivo dma de ejemplo.

En la ilustración anterior se muestran los siguientes tipos de asignaciones:

  1. Cada registro de mapa asigna un intervalo de direcciones físicas (apuntadas por líneas sólidas) a direcciones lógicas de orden bajo (líneas de puntos) para un dispositivo DMA de ISA.

    En este caso, se usan tres registros de mapa para establecer el alias de tres intervalos paginados de datos en la memoria física del sistema a tres intervalos de tamaño de página de direcciones lógicas de orden bajo para un dispositivo DMA ISA.

  2. El dispositivo ISA usa las direcciones lógicas asignadas para acceder a la memoria del sistema durante las operaciones de DMA.

    Para un dispositivo PCI DMA comparable, también se usarían tres registros de mapa para tres intervalos de datos de tamaño de página. Sin embargo, los intervalos de direcciones lógicas asignados no necesariamente serían idénticos a los intervalos de direcciones físicas correspondientes, por lo que un dispositivo PCI también usaría direcciones lógicas para acceder a la memoria del sistema.

  3. Cada entrada de MDL asigna una ubicación en el espacio de direcciones virtuales a una dirección física.

Anote la correspondencia entre un registro de mapa y una entrada virtual a física en mdL:

  • Cada registro de mapa y cada entrada virtual en una MDL asigna como máximo una página física completa de datos para una operación de transferencia de DMA.

  • Cada registro de mapa y cada entrada virtual de una MDL podría asignar menos de una página completa de datos. Por ejemplo, la entrada virtual inicial de un MDL puede asignarse a un desplazamiento desde el límite de la página física, como se muestra anteriormente en la ilustración Asignaciones de direcciones físicas, lógicas y virtuales .

  • Cada asignación registra y cada entrada virtual en una asignación MDL, como mínimo, un byte.

En un IRP que solicita una operación de lectura o escritura, cada entrada virtual del MDL opaco a los controladores en Irp-MdlAddress> representa un límite de página en la memoria física del sistema para un búfer de usuario. De forma similar, cada registro de mapa adicional necesario para una única transferencia DMA representa un límite de página en el intervalo de direcciones lógicos accesible para el dispositivo con alias en la memoria física del sistema.

En cada plataforma de Windows, cada objeto de adaptador tiene un conjunto asociado de uno o varios registros de mapa ubicados en una dirección base específica de la plataforma (y opaco a controladores). Desde el punto de vista de un controlador, la base de registro de mapa que se muestra en la ilustración que ilustra la asignación de direcciones para un dispositivo ISA DMA de ejemplo es un identificador para un conjunto de registros de mapa que podrían ser registros de hardware en un chip, en un controlador DMA del sistema o en un adaptador de bus-maestro, o incluso podría ser registros virtuales creados con HAL en la memoria del sistema.

El número de registros de mapa disponibles con un objeto de adaptador puede variar para diferentes dispositivos y plataformas Windows. Por ejemplo, HAL puede hacer que los registros de asignación estén disponibles para los controladores que usan DMA del sistema en algunas plataformas que en otras plataformas porque los controladores DMA en distintas plataformas de Windows tienen diferentes funcionalidades.