viernes, 16 de junio de 2017

Drivers de Dispositivos

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

Software de Salida

Ahora consideremos el software de salida. Primero analizaremos una salida de ejemplo a una ventana de texto, que es lo que los programadores...