Controlador de dispositivo


En computación , un controlador de dispositivo es un programa de computadora que opera o controla un tipo particular de dispositivo que está conectado a una computadora o autómata . [1] Un controlador proporciona una interfaz de software para dispositivos de hardware , lo que permite que los sistemas operativos y otros programas informáticos accedan a funciones de hardware sin necesidad de conocer detalles precisos sobre el hardware que se utiliza.

Un controlador se comunica con el dispositivo a través del bus de la computadora o del subsistema de comunicaciones al que se conecta el hardware. Cuando un programa de llamada invoca una rutina en el controlador, el controlador emite comandos al dispositivo (lo maneja). Una vez que el dispositivo devuelve los datos al controlador, el controlador puede invocar rutinas en el programa de llamada original.

Los controladores dependen del hardware y son específicos del sistema operativo. Por lo general, proporcionan el manejo de interrupciones requerido para cualquier interfaz de hardware asíncrona dependiente del tiempo necesaria. [2]

El propósito principal de los controladores de dispositivos es proporcionar abstracción al actuar como un traductor entre un dispositivo de hardware y las aplicaciones o sistemas operativos que lo utilizan. [1] Los programadores pueden escribir código de aplicación de alto nivel independientemente del hardware específico que esté usando el usuario final. Por ejemplo, una aplicación de alto nivel para interactuar con un puerto serie puede tener simplemente dos funciones para "enviar datos" y "recibir datos". En un nivel más bajo, un controlador de dispositivo que implemente estas funciones se comunicaría con el controlador de puerto serie particular instalado en la computadora de un usuario. Los comandos necesarios para controlar un UART 16550 son muy diferentes de los comandos necesarios para controlar un FTDIconvertidor de puerto serie, pero cada controlador de dispositivo específico de hardware abstrae estos detalles en la misma interfaz de software (o similar).

Escribir un controlador de dispositivo requiere una comprensión profunda de cómo funcionan el hardware y el software para una función de plataforma determinada . Debido a que los controladores requieren un acceso de bajo nivel a las funciones del hardware para funcionar, los controladores generalmente funcionan en un entorno altamente privilegiado y pueden causar problemas operativos en el sistema si algo sale mal. Por el contrario, la mayoría del software de nivel de usuario en los sistemas operativos modernos se puede detener sin afectar en gran medida al resto del sistema. Incluso los controladores que se ejecutan en modo de usuario pueden bloquear un sistema si el dispositivo está mal programado . Estos factores hacen que sea más difícil y peligroso diagnosticar problemas. [3]

Por lo tanto, la tarea de escribir controladores generalmente recae en ingenieros de software o ingenieros informáticos que trabajan para empresas de desarrollo de hardware. Esto se debe a que tienen mejor información que la mayoría de los extraños sobre el diseño de su hardware. Además, tradicionalmente se ha considerado del interés del fabricante de hardware garantizar que sus clientes puedan utilizar su hardware de forma óptima. Normalmente, el controlador de dispositivo lógico (LDD) lo escribe el proveedor del sistema operativo, mientras que el controlador de dispositivo físico (PDD) lo implementa el proveedor del dispositivo. Sin embargo, en los últimos años, los no proveedores han escrito numerosos controladores de dispositivos para dispositivos propietarios, principalmente para su uso con software libre y de código abierto. sistemas operativos En tales casos, es importante que el fabricante del hardware proporcione información sobre cómo se comunica el dispositivo. Aunque esta información puede aprenderse mediante ingeniería inversa , esto es mucho más difícil con el hardware que con el software.