Al principio de este capítulo analizamos lo que hacen los
drivers. Vimos que cada controlador tiene
ciertos registros de dispositivos que se utilizan para darle
comandos o ciertos registros de dispositivos
que se utilizan para leer su estado, o ambos. El número de
registros de dispositivos y la
naturaleza de los comandos varían radicalmente de un
dispositivo a otro. Por ejemplo, un driver de
ratón tiene que aceptar información del ratón que le indica
qué tanto se ha desplazado y cuáles botones están oprimidos en un momento dado.
Por el contrario, un
driver de disco tal vez tenga que saber todo acerca de los sectores, pistas, cilindros,
cabezas, movimiento del brazo, los propulsores del motor, los tiempos de asentamiento de las cabezas y
todos los demás mecanismos para hacer que el disco funcione en forma apropiada. Obviamente, estos
drivers serán muy distintos.
Como consecuencia, cada dispositivo de E/S conectado a una
computadora necesita cierto código
específico para controlarlo. Este código, conocido
como driver, es escrito por el fabricante del
dispositivo y se incluye junto con el mismo. Como cada
sistema operativo necesita sus propios drivers, los fabricantes de dispositivos por lo común los
proporcionan para varios sistemas operativos
populares.
Cada driver maneja un tipo de dispositivo o, a lo más, una
clase de dispositivos estrechamente
relacionados. Por ejemplo, un driver de disco SCSI puede
manejar por lo general varios discos
SCSI de distintos tamaños y velocidades, y tal vez un CD-ROM
SCSI también. Por otro lado, un
ratón y una palanca de mandos son tan distintos que por lo
general se requieren controladores diferentes. Sin embargo, no hay una restricción técnica en cuanto a que
un driver controle varios dispositivos no relacionados. Simplemente no es una buena idea.
Para poder utilizar el hardware del dispositivo (es decir,
los registros del controlador físico), el
driver por lo general tiene que formar parte del kernel del
sistema operativo, cuando menos en las
arquitecturas actuales.
En realidad es posible construir
controladores que se ejecuten en el espacio de usuario, con llamadas al sistema para leer y escribir en
los registros del dispositivo. Este diseño aísla al kernel de los controladores, y a un controlador de
otro, eliminando una fuente importante de fallas en el sistema: controladores con errores que
interfieren con el kernel de una manera u otra.
Para construir sistemas altamente confiables, ésta es, en
definitiva, la mejor manera de hacerlo. Un
ejemplo de un sistema donde los controladores de dispositivos
se ejecutan como procesos de usuario
es MINIX 3. Sin embargo, como la mayoría de los demás
sistemas operativos de escritorio esperan
que los controladores se ejecuten en el kernel, éste es el
modelo que consideraremos aquí.
Como los diseñadores de cada sistema operativo saben qué
piezas de código (drivers) escritas
por terceros se instalarán en él, necesita tener una
arquitectura que permita dicha instalación. Esto
implica tener un modelo bien definido de lo que hace un
driver y la forma en que interactúa con el
resto del sistema operativo.
No hay comentarios.:
Publicar un comentario