¿Qué es un controlador?

Un controlador es un componente de software que permite que el sistema operativo y un dispositivo se comuniquen. Por ejemplo, cuando una aplicación necesita leer datos de un dispositivo, llama a una función implementada por el sistema operativo. A continuación, el sistema operativo llama a una función implementada por el controlador. El controlador, normalmente desarrollado por el fabricante del dispositivo, sabe cómo comunicarse con el hardware del dispositivo para obtener los datos. Una vez que el controlador obtiene los datos, los devuelve al sistema operativo, que luego los devuelve a la aplicación.

Diagrama que muestra la interacción entre una aplicación, un sistema operativo y un controlador.

Expansión de la definición

Nuestra explicación simplifica el concepto de conductores. Estos son algunos puntos más a tener en cuenta:

  • Los controladores no siempre tienen que ser desarrollados por el fabricante del dispositivo. Si un dispositivo sigue un estándar de hardware publicado, Microsoft puede escribir el controlador, por lo que el diseñador de dispositivos no tiene que proporcionar uno.

  • No todos los controladores se comunican directamente con un dispositivo. A menudo, varios controladores superpuestas en una pila de controladores participan en una solicitud de E/S. 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 controladores de la pila cambian la solicitud de un formato a otro. Estos controladores no se comunican directamente con el dispositivo. En su lugar, cambian la solicitud y la pasan a los controladores que están más bajos en la pila.

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

    Controlador de función: el controlador 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.

Podemos refinar nuestra definición de un controlador como 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, si necesita escribir una herramienta que acceda a las estructuras de datos principales del sistema operativo, puede dividir 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 accede 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 la relación entre una aplicación y un controlador de software.

Los controladores de software siempre se ejecutan en modo kernel. Se escriben principalmente para acceder a los datos protegidos solo disponibles en modo kernel. Sin embargo, no todos los controladores de dispositivos necesitan acceso a los recursos y los datos en modo kernel, por lo que algunos controladores de dispositivo 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

Otro tipo de conductor es 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 indicado 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 la interacción entre los controladores de tostadora USB, el controlador de host USB y el bus PCI.