Introducción a los objetos de controlador
Como su nombre sugiere, un objeto de controlador suele representar un controlador de dispositivo físico con dispositivos conectados. Un controlador que no sea WDM de nivel más bajo para un conjunto de dispositivos similares coordinados por un controlador físico puede crear un objeto de controlador y usarlo para sincronizar las operaciones de E/S entre los dispositivos conectados. El controlador implementa una rutina ControllerControl y llama a las rutinas de soporte técnico del objeto de controlador del administrador de E/S.
Nota
El uso de objetos de controlador no se admite en los controladores WDM.
Por lo general, los controladores usan objetos de controlador para sincronizar las operaciones con los dispositivos conectados si los criterios siguientes contienen:
El controlador no lleva a cabo operaciones largas sin interrumpir, por lo que el controlador no necesita crear un subproceso dedicado al dispositivo ni usar subprocesos de trabajo del sistema.
Los dispositivos conectados al controlador son similares. Es decir, no son dispositivos con propiedades físicas completamente diferentes o funcionalidad operativa, como los dispositivos de teclado y mouse que se pueden conectar al teclado y al controlador de dispositivo auxiliar.
El controlador está diseñado para ser monolítico: unicapa en relación con el controlador de dispositivo y los dispositivos físicos conectados, en lugar de diseñarse como controlador de puerto (para el controlador) con uno o varios controladores de clase (para dispositivos conectados) en capas sobre el controlador de puerto.
Los controladores de dispositivos con canales de E/S y un conjunto de objetos de dispositivo lógico también pueden usar un objeto de controlador para sincronizar sus operaciones de E/S entre o entre los canales de dicho dispositivo.
Un objeto de controlador no tiene nombre y, por tanto, no es el destino de las solicitudes de E/S. Es simplemente un mecanismo de sincronización para serializar E/S desde un conjunto de objetos de dispositivo. Dado que un objeto de controlador no tiene ningún nombre, es invisible para los subsistemas protegidos en modo de usuario, que no pueden realizar solicitudes de E/S de dispositivo sin obtener un identificador para el objeto de archivo que representa el objeto de dispositivo de destino. Un objeto de controlador también es invisible para los controladores de nivel superior, que no pueden adjuntar sus propios objetos de dispositivo a un objeto de controlador. En otras palabras, ni el administrador de E/S ni un controlador de nivel superior pueden configurar un IRP que solicite E/S en un dispositivo representado por un objeto de controlador. Las solicitudes de E/S siempre se emiten a objetos de dispositivo. Solo el controlador puede usar el objeto de controlador.
Sincronización y E/S superpuestas
Los controladores monolíticos de dispositivos físicos con características como las del controlador de disco "AT" no son necesarios para usar un objeto de controlador para sincronizar sus operaciones de E/S del dispositivo. Por ejemplo, un escritor de controladores podría probar algo parecido a la siguiente técnica de sincronización en lugar de usar un objeto de controlador:
Configure objetos de dispositivo con nombre para representar los dispositivos que son destinos para las solicitudes de E/S.
Mantenga la información de estado (quizás un conjunto de marcas de dispositivo ocupado en cada extensión de dispositivo o en una sola extensión de dispositivo) que indica qué objeto de dispositivo es el destino de la operación de E/S actual.
Realice operaciones de E/S para el objeto de dispositivo ocupado actualmente y vuelva a poner en cola los IRP entrantes para otros objetos de dispositivo hasta que se complete el IRP actual.
La técnica de sincronización anterior serializa el procesamiento de IRP para todos los objetos de dispositivo de destino del controlador. Tenga en cuenta que también obliga al controlador a completar el IRP actual antes de que su rutina StartIo pueda comenzar a procesar el siguiente IRP, lo que desafortunadamente disminuye el rendimiento del controlador.
Si ciertas operaciones de dispositivo se pueden superponer, el uso de un objeto de controlador puede aumentar el rendimiento de E/S de un controlador, ya que esta técnica de sincronización permite al controlador determinar si puede superponerse a las operaciones justo antes de configurar el dispositivo físico. Por ejemplo, un controlador de disco podría permitir que el controlador se superponga a las búsquedas en un disco con operaciones de lectura y escritura en otro disco.
Además, el uso de un objeto de controlador es una manera relativamente fácil de sincronizar las operaciones de E/S para más de un objeto de dispositivo de destino a través de un único dispositivo físico, como un controlador de disco "AT". El uso de un objeto de controlador permite a un controlador monolítico sincronizar las operaciones de E/S en un conjunto de objetos de dispositivo con nombre sin tener que mantener el estado de cada dispositivo y el controlador de dispositivo en una o varias extensiones de dispositivo, y sin tener que volver a poner en cola los IRP.
Sin embargo, algunos dispositivos diseñados para superponer operaciones de E/S, como controladores serie dúplex completos o adaptadores de bus-master, generalmente tienen controladores que configuran colas internas para IRP.