Uso de búferes de asignación en el modelo de E/S de Storport
En el modelo de E/S de puerto SCSI, los controladores de minipuerto pueden requerir que el controlador de puerto asigne y asigne la memoria virtual del sistema para los búferes de E/S de SRB. Los controladores de miniporte configuran el controlador de puerto para asignar búferes de E/S estableciendo el miembro MapBuffers de la estructura de PORT_CONFIGURATION_INFORMATION (SCSI) en TRUE.
Si el controlador de puerto está configurado con MapBuffers establecido en TRUE, el miembro DataBuffer de cada SRB que recibe el controlador de miniporte contendrá una dirección virtual del sistema de un búfer de E/S. Esta dirección es válida en el espacio de direcciones de todos los procesos del sistema. Además, el controlador de minipuerto tendrá acceso directo al búfer de E/S.
Por otro lado, si el controlador de miniporte establece MapBuffers en FALSE, DataBuffer contendrá una dirección virtual que pertenece a un proceso determinado que no es necesariamente válido en el contexto en el que se ejecuta el controlador de miniporte. Por lo tanto, el controlador de minipuerto no podrá acceder al área de memoria a la que apunta DataBuffer .
En el modelo de E/S de Storport, se requieren controladores de miniport para admitir E/S basada en DMA. Cuando se usa DMA, no es necesario que los controladores de miniporte accedan a los búferes de E/S de un SRB indirectamente a través de una dirección virtual en todo el sistema. Con esto en vista, el modelo de E/S de Storport define un conjunto diferente de valores para el miembro MapBuffers de PORT_CONFIGURATION_INFORMATION (STORPORT).
Value | Significado |
---|---|
STOR_MAP_NO_BUFFERS |
El controlador storport no asigna búferes de datos para ningún tipo de SRB. Por lo tanto, sus controladores de minipuerto no deben acceder directamente a los datos a los que apunta el miembro DataBuffer en cualquiera de los SRBs que recibe. |
STOR_MAP_ALL_BUFFERS |
Esta característica no está implementada actualmente. Si se asigna este valor al miembro MapBuffers , el controlador de Storport lo interpreta como si fuera STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS |
El controlador storport asigna los búferes de datos para la solicitud, siempre que no sea una solicitud de transferencia de datos (lectura y escritura). Del mismo modo, los controladores de minipuerto pueden acceder a los datos del SRB siempre que el SRB no pertenezca a una solicitud de lectura o escritura. |