Arquitectura del controlador de almacenamiento de Windows
La clase del sistema operativo Windows y los controladores de filtro para dispositivos de almacenamiento periféricos actúan como una interfaz entre los controladores de nivel intermedio o superior superpuestas por encima de la clase o el controlador de filtro y un controlador de puerto proporcionado por el sistema.
Las solicitudes de E/S de una aplicación de usuario o un componente de kernel llegan a los controladores de clase de almacenamiento a través de los servicios del sistema de E/S y uno o varios controladores de nivel intermedio o superior, como un controlador de sistema de archivos. Los controladores de clase de almacenamiento traducen los IRP estándar que entran en IRP con bloques de solicitudes SCSI (SRB) definidos por el sistema que contienen bloques de descriptores de comandos SCSI (CDB) antes de enviar cada IRP al controlador inferior siguiente. Un controlador de puerto de almacenamiento traduce srBs de controladores de clase en comandos específicos del bus que envía al HBA de almacenamiento, a través de un controlador de bus de E/S y posiblemente uno o varios controladores de filtro.
En la ilustración siguiente se muestra la arquitectura en capas de los controladores de almacenamiento de Windows.
A partir de la parte inferior de la ilustración, se describe cada tipo de controlador de almacenamiento:
Un controlador de puerto de almacenamiento define una interfaz para todos los controladores de clase de almacenamiento de Windows, incluidos los controladores de clase de disco, cinta, CDROM, DVD y modificador proporcionados por el sistema. Esta interfaz de puerto o clase aísla a los controladores de clase de los requisitos específicos del adaptador del adaptador de bus host al que están conectados sus respectivos dispositivos. Un controlador de puerto de almacenamiento también sincroniza el acceso al bus para todos los controladores de dispositivos en el HBA correspondiente. El sistema proporciona controladores de puerto de almacenamiento para adaptadores SCSI, IDE, USB e IEEE 1394.
Un controlador de puerto de almacenamiento recibe SRB del siguiente controlador superior (un controlador de clase de almacenamiento o controlador de filtro intermedio) y los procesa de la siguiente manera:
- El controlador de puerto de almacenamiento para un bus SCSI u otro bus pasa srBs con CDB a un controlador de miniporte storport específico del sistema operativo independiente del sistema operativo, que está vinculado dinámicamente a su controlador de puerto correspondiente y proporciona compatibilidad específica del hardware para un HBA determinado. Para obtener información sobre cómo implementar un controlador de minipuerto SCSI, consulte Controladores de miniport storport.
- El controlador de puerto de almacenamiento para un bus HEREDADO IDE/ATAPI o IEEE 1394 convierte las SRB recibidas del controlador de clase de almacenamiento en el formato requerido por el adaptador subyacente, por ejemplo, reempaquetando CDB según un protocolo de transporte específico del bus o traduciéndolos en un formato diferente, lo que aísla a los controladores de nivel superior de las peculiaridades del bus subyacente.
Un controlador de filtro de almacenamiento superior o inferior admite la funcionalidad específica del dispositivo que no proporciona un controlador de clase de almacenamiento proporcionado por el sistema. Un controlador de almacenamiento de filtro inferior supervisa los SRB o los IRP emitidos por un controlador de clase de almacenamiento y los modifica según sea necesario antes de pasarlos al controlador inferior siguiente (un controlador de puerto de almacenamiento u otro controlador de filtro de almacenamiento).
Para obtener información sobre cómo implementar un controlador de filtro de almacenamiento, consulte Controladores de filtro de almacenamiento.
Un controlador de clase de almacenamiento usa la interfaz de puerto o clase SCSI para controlar un dispositivo de su tipo en cualquier bus para el que el sistema proporcione un controlador de puerto de almacenamiento. Un controlador de clase es específico de una clase determinada de dispositivo; por ejemplo, un controlador de clase puede ejecutar todos los dispositivos CD-ROM en cualquier bus compatible; otro puede controlar todos los dispositivos de disco. El controlador de clase de almacenamiento controla las solicitudes de E/S de aplicaciones de usuario o controladores superiores en la pila de almacenamiento mediante la compilación de SRB que contienen CDB y la emisión de esos SRB al controlador inferior siguiente (un controlador de puerto de almacenamiento o controlador de filtro intermedio), igual que si el dispositivo fuera un dispositivo SCSI.
La implementación de un controlador de clase de almacenamiento es transparente para los controladores de nivel superior. Un controlador de clase para un dispositivo de cinta o de cambio medio se implementa como un controlador de miniclase específico del dispositivo que se vincula a un controlador de clase proporcionado por el sistema. Los controladores de clase proporcionados por el sistema para otros dispositivos de almacenamiento, como el disco y CD-ROM/DVD, se implementan como controladores monolíticos únicos.
Para obtener información sobre cómo implementar un controlador de clase de almacenamiento, consulte Controladores de clase de almacenamiento. Para obtener información sobre cómo implementar un controlador de miniclase de cinta o modificador, consulte Controladores de cinta y controladores de modificador, respectivamente.
Un controlador de almacenamiento de filtro superior intercepta los IRP de las aplicaciones y controladores de usuario más arriba en la pila de almacenamiento y, a continuación, puede modificarlos antes de pasarlos al controlador inferior siguiente (un controlador de clase de almacenamiento u otro controlador de filtro de almacenamiento). Normalmente, los controladores de filtro supervisan el rendimiento del dispositivo subyacente.
El tipo de bus al que está conectado un dispositivo y la implementación de su controlador de puerto de almacenamiento son transparentes para los controladores de nivel superior. Un controlador de puerto de almacenamiento puede implementarse según la arquitectura del controlador de puerto/miniport, como el controlador de puerto SCSI; como controlador monolítico que controla una sola pieza estándar de hardware, como el controlador de puerto IDE/ATAPI; o como controlador de filtro que traduce srBs en el formato requerido por una pila de controladores diferente, como el controlador de puerto IEEE 1394.
El controlador de puerto SCSI proporcionado por el sistema también puede actuar como una interfaz entre un controlador de clase de almacenamiento y un controlador de miniporte SCSI que controla un dispositivo de almacenamiento no SCSI del mismo tipo. Por ejemplo, en lugar de escribir un controlador para un nuevo controlador de matriz de disco, un escritor de controladores puede ahorrar considerable diseño, desarrollo y esfuerzo de depuración escribiendo un controlador de miniporte pseudo-SCSI que se vincula al controlador de puerto SCSI del sistema y usa la interfaz que proporciona. Este controlador de minipuerto es necesario para traducir los comandos SCSI entrantes en comandos específicos del dispositivo. Por otro lado, los controladores de clase y puerto proporcionados por el sistema controlan el trabajo muy necesario en nombre de un miniporte pseudo-SCSI, incluidos los accesos del Registro durante la inicialización, todas las asignaciones de recursos y objetos, la sincronización, el predimensionamiento de las transferencias solicitadas para adaptarse a las funcionalidades del dispositivo de miniporte y volver a intentar solicitudes.
Para obtener información más detallada sobre srBs, consulte la referencia de arquitectura de controladores de Kernel-Mode. Para obtener información específica del tipo de dispositivo sobre los CDB, consulte los conjuntos de comandos adecuados en los estándares INCITS SCSI-3.