Estructura típica de dispositivo E/S
En general, la estructura típica de un dispositivo de entrada/salida está dividida en tres partes:
- Adaptador de Entrada/Salida del ordenador, o interfaz del bus: Se encarga de traducir las señales al dialecto empleado por el bus del ordenador. Algunos ejemplos de interfaces de este tipo son los buses PCI, PCMCIA, USB, PCI-express o SATA entre muchos otros.
- Adaptador de Entrada/Salida del dispositivo, o interfaz del dispositivo: Se encarga de traducir las señales al dialecto empleado por el dispositivo.
- Control del dispositivo, o puerto de lectura/escritura: Ofrece una interfaz que es empleada por el gestor de dispositivos para gobernar el dispositivo, que dispone de:
- Registros de órdenes
- Registros de estado
- Registros de lectura/escritura, o alternativamente una pequeña memoria propia.
Cuanto más elaborado sea el puerto de lectura/escritura, mayor rendimiento se puede llegar a alcanzar, puesto que el gestor de dispositivo será más sencillo (y eso implica menor número de instrucciones a ejecutar en el gestor de dispositivo).
La conexión existente entre el procesador y el dispositivo de E/S queda resumida de la siguiente manera:
Procesador <==> BUS <==> [Interfaz del bus <==> Puerto de lectura/escritura <==> Interfaz del dispositivo
Gestor de dispositivos
El gestor de dispositivo, popularmente conocido por la palabra inglesa driver, es la parte del sistema operativo que se encarga de gobernar un cierto dispositivo o una familia de dispositivos de naturaleza similar. El gestor de dispositivo se trata de una pieza de software que conoce los detalles de bajo nivel del dispositivo. De esta manera hace uso del conjunto de instrucciones que ofrece el puerto de E/S, los registros de estado y de lectura y escritura, todo ello para gobernar el dispositivo. Si el fabricante del dispositivo no ofrece un driver para un cierto sistema operativo, el dispositivo y los recursos que ofrece no puede ser gestionar por el sistema operativo.
Los gestores de dispositivos representan en torno al 90% del código en Linux y Windows. Por lo general, se ejecutan en el espacio del núcleo del sistema operativo (por razones de rendimiento). Por tanto, se ejecutan en modo privilegiado, por tanto, un error de programación en un driver probablemente lleve a un cuelgue completo del sistema. Microsoft estima que en torno al 80% de cuelgues de sus sistemas operativo se debe a errores de programación en drivers.
No obstante, en sistemas operativos convencionales como Windows, Linux y Mac, existen mecanismos que permiten implementar drivers como procesos de usuario. De esta manera, un error de programación no produce el cuelgue del sistema completo. Sin embargo, dichos gestores de dispositivos se limitan a dispositivos particularmente lentos en los que la tasa de transferencia de datos es baja y los tiempos de respuesta del dispositivo es alta. Este es el caso de los lectores de tarjetas inteligentes (smartcards), en las que se incluyen las tarjetas SIM que se emplean en la telefonía móvil.