¿Qué es un controlador?

Es difícil proporcionar una única definición precisa para el término driver. En el sentido más fundamental, un controlador es un componente de software que permite al sistema operativo y un dispositivo comunicarse entre sí.

Por ejemplo, supongamos que una aplicación debe leer algunos datos de un dispositivo. La aplicación llama a una función implementada por el sistema operativo y el sistema operativo llama a una función implementada por el controlador. El controlador, escrito por la misma empresa que diseñó y fabricó el dispositivo, sabe cómo comunicarse con el hardware del dispositivo para obtener los datos. Una vez que el controlador obtiene los datos del dispositivo, devuelve los datos al sistema operativo, que lo devuelve a la aplicación.

Diagrama que muestra la aplicación, el sistema operativo y el controlador.

Expansión de la definición

Nuestra explicación hasta ahora se simplifica de varias maneras:

  • No todos los controladores deben ser escritos por la empresa que diseñó el dispositivo.

    En muchos casos, un dispositivo está diseñado según un estándar de hardware publicado. Por lo tanto, Microsoft puede escribir el controlador y el diseñador de dispositivos no tiene que proporcionar un controlador.

  • No todos los controladores se comunican directamente con un dispositivo.

    Para una solicitud de E/S determinada (como leer datos de un dispositivo), a menudo hay varios controladores superpuestas en una pila de controladores que participan en la solicitud. La forma convencional de visualizar la pila es con el primer participante en la parte superior y el último participante de la parte inferior, como se muestra en este diagrama. Algunos de los controladores de la pila pueden participar mediante la transformación de la solicitud de un formato a otro. Estos controladores no se comunican directamente con el dispositivo; simplemente manipulan la solicitud y pasan la solicitud a los controladores que están más bajos en la pila.

    Diagrama que muestra la aplicación, el sistema operativo, tres controladores y un dispositivo.

    Controlador de función: el controlador de la pila que se comunica directamente con el dispositivo se denomina controlador de función.

    Controlador de filtro: los controladores que realizan el procesamiento auxiliar se denominan controladores de filtro.

    Para más información sobre las pilas, consulte Pilas de controladores.

  • Algunos controladores de filtro observan y registran información sobre las solicitudes de E/S, pero no participan activamente en ellas. Por ejemplo, algunos controladores de filtro actúan como comprobadores para asegurarse de que los demás controladores de la pila controlan correctamente la solicitud de E/S.

Podríamos ampliar nuestra definición de controlador diciendo que un controlador es cualquier componente de software que observe o participe en la comunicación entre el sistema operativo y un dispositivo.

Controladores de software

Nuestra definición expandida es razonablemente precisa, pero sigue incompleta porque algunos controladores no están asociados a ningún dispositivo de hardware.

Por ejemplo, supongamos que necesita escribir una herramienta que tenga acceso a las estructuras de datos principales del sistema operativo. Solo se puede acceder a estas estructuras mediante código que se ejecuta en modo kernel. Para ello, divida la herramienta en dos componentes. El primer componente se ejecuta en modo de usuario y presenta la interfaz de usuario. El segundo componente se ejecuta en modo kernel y tiene acceso a los datos principales del sistema operativo. El componente que se ejecuta en modo de usuario se denomina aplicación y el componente que se ejecuta en modo kernel se denomina controlador de software. Un controlador de software no está asociado a un dispositivo de hardware.

En este diagrama se muestra una aplicación en modo de usuario que se comunica con un controlador de software en modo kernel.

Diagrama que muestra una aplicación y un controlador de software.

Los controladores de software siempre se ejecutan en modo kernel. La razón principal para escribir un controlador de software es obtener acceso a los datos protegidos que solo están disponibles en modo kernel. Sin embargo, los controladores de dispositivo no siempre necesitan acceso a los datos y recursos en modo kernel. Por lo tanto, algunos controladores de dispositivos se ejecutan en modo de usuario.

Para obtener más información sobre los modos de procesador, vea Modo de usuario y Modo kernel.

Conductores de autobús

Hay una categoría de conductor que aún no hemos mencionado, el conductor del autobús. Para comprender los controladores de bus, debe comprender los nodos de dispositivo y el árbol de dispositivos.

Para obtener información sobre los árboles de dispositivos, los nodos de dispositivo y los controladores de bus, consulte Nodos de dispositivo y Pilas de dispositivos.

Más información sobre los controladores de función

Nuestra explicación hasta ahora simplifica la definición del controlador de función. Hemos dicho que el controlador de función de un dispositivo es el controlador de la pila que se comunica directamente con el dispositivo. Esto es cierto para un dispositivo que se conecta directamente al bus de interconexión de componentes periféricos (PCI). El controlador de función de un dispositivo PCI obtiene las direcciones asignadas al puerto y a los recursos de memoria del dispositivo. El controlador de función se comunica directamente con el dispositivo escribiendo en esas direcciones.

Sin embargo, en muchos casos, un dispositivo no se conecta directamente al bus PCI. En su lugar, el dispositivo se conecta a un adaptador de bus host que está conectado al bus PCI. Por ejemplo, una tostadora USB se conecta a un adaptador de bus host (denominado controlador de host USB), que está conectado al bus PCI. La tostadora USB tiene un controlador de función y el controlador de host USB también tiene un controlador de función. El controlador de función para la tostadora se comunica indirectamente con el tostador mediante el envío de una solicitud al controlador de función para el controlador de host USB. El controlador de función para el controlador de host USB se comunica directamente con el hardware del controlador de host USB, que se comunica con la tostadora.

Diagrama que muestra los controladores de tostadora USB y el controlador de host USB.