CAPAS DEL SOFTWARE DE
E/S
Por lo general, el software de E/S se organiza en cuatro
capas, como se muestra en la figura 5-11. Cada capa tiene una función bien
definida que realizar, y una interfaz bien definida para los niveles
adyacentes. La funcionalidad y las interfaces difieren de un sistema a otro,
por lo que el análisis que veremos a continuación, que examina todas las capas
empezando desde el inferior, no es específico de una sola máquina.
Software de E/S de capa de usuario
Software
de sistema operativo independiente del dispositivo
Controladores
de dispositivos
Manejadores
de interrupciones
Hardware
1.1: Manejadores de interrupciones:
Aunque la E/S programada es útil
algunas veces, para la mayor parte de las operaciones de E/S las interrupciones
son un hecho incómodo de la vida y no se pueden evitar. Deben ocultarse en la
profundidad de las entrañas del sistema operativo, de manera que éste sepa lo
menos posible de ellas. La mejor manera de ocultarlas es hacer que el
controlador que inicia una operación de E/S se bloquee hasta que se haya
completado la E/S y ocurra la interrupción. El controlador se puede bloquear a
sí mismo realizando una llamada a down en un semáforo, una llamada a wait en
una variable de condición, una llamada a receive en un mensaje o algo similar,
por ejemplo.
Cuando ocurre la interrupción, el
procedimiento de interrupciones hace todo lo necesario para poder manejarla.
Después puede desbloquear el controlador que la inició. En algunos casos sólo
completará up en un semáforo. En otros casos realizará una llamada a signal en
una variable de condición en un monitor. En otros más enviará un mensaje al
controlador bloqueado. En todos los casos, el efecto neto de la interrupción
será que un controlador que estaba bloqueado podrá ejecutarse ahora. Este
modelo funciona mejor si los controladores están estructurados como procesos
del kernel, con sus propios estados, pilas y contadores del programa.
A continuación tal vez no sean necesarios en una máquina
específica, y tal vez se requieran otros que no estén listados. Además, los
pasos que se llevan a cabo pueden estar en distinto orden en algunas máquinas.
1. Guardar los registros (incluyendo el PSW) que no han sido
guardados por el hardware de la interrupción.
2. Establecer un contexto para el procedimiento de servicio
de interrupciones. Para ello tal vez sea necesario establecer el TLB, la MMU y
una tabla de páginas.
3. Establecer una pila para el procedimiento de servicio de
interrupciones.
4. Reconocer el controlador de interrupciones. Si no hay un
controlador de interrupciones centralizado, rehabilitar las interrupciones.
5. Copiar los registros desde donde se guardaron
(posiblemente en alguna pila) a la tabla de procesos.
6. Ejecutar el procedimiento de servicio de interrupciones.
Éste extraerá información de los registros
del controlador de dispositivos que
provocó la interrupción.
7. Elegir cuál proceso ejecutar a continuación. Si la
interrupción ha ocasionado que cierto proceso de alta prioridad que estaba
bloqueado cambie al estado listo, puede elegirse para ejecutarlo en ese
momento.
8. Establecer el contexto de la MMU para el proceso que se
va a ejecutar a continuación. También puede ser necesario establecer un TLB.
9. Cargar los registros del nuevo proceso, incluyendo su PSW.
10. Empezar a ejecutar el nuevo proceso:
1.2: Drivers de dispositivos
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.
1.3: Software de E/S independiente del dispositivo
Aunque parte del software de E/S es específico para cada
dispositivo, otras partes de éste son independientes de los dispositivos. El
límite exacto entre los controladores y el software independiente del dispositivo
depende del sistema (y del dispositivo), debido a que ciertas funciones que
podrían realizarse de una manera independiente al dispositivo pueden realizarse
en los controladores, por eficiencia u otras razones. Las funciones que se
muestran en la figura 5-13 se realizan comúnmente en el software independiente
del dispositivo.
1;
Interfaz uniforme para controladores de dispositivos
2; Uso de búfer
3; Reporte de errores
4; Asignar y liberar dispositivos
dedicados
5;
Proporcionar un tamaño de bloque independiente del dispositivo
La función básica del software
independiente del dispositivo es realizar las funciones de E/S que son comunes
para todos los dispositivos y proveer una interfaz uniforme para el software a
nivel de usuario.
1.4: Interfaz uniforme para los controladores de software de
dispositivos
Una importante cuestión en un
sistema operativo es cómo hacer que todos los dispositivos de E/S y sus
controladores se vean más o menos iguales. Si los discos, las impresoras, los
teclados, etc., se conectan de distintas maneras, cada vez que llegue un nuevo
dispositivo el sistema operativo deberá modificarse para éste. No es
conveniente tener que modificar el sistema operativo para cada nuevo
dispositivo. Un aspecto de esta cuestión es la interfaz entre los controladores
de dispositivos y el resto del sistema operativo. En la figura 5-14(a)
ilustramos una situación en la que cada controlador de disco Positivo tiene una
interfaz distinta con el sistema operativo.
Software de E/S en espacio de usuario
Aunque la mayor
parte del software de E/S está dentro del sistema operativo, una pequeña
porción de éste consiste en bibliotecas vinculadas entre sí con programas de
usuario, e incluso programas enteros que se ejecutan desde el exterior del
kernel. Las llamadas al sistema, incluyendo las llamadas al sistema de E/S, se
realizan comúnmente mediante procedimientos de biblioteca. Cuando un programa
en C contiene la llamada:
Cuenta =
write(da, bufer, nbytes);
Un uso
específico de la transmisión de archivos mediante el uso de una cola es el
sistema de noticias USENET. Esta red consiste en millones de máquinas en todo
el mundo, que se comunican mediante Internet. Existen miles de grupos de
noticias sobre muchos temas. Para publicar un mensaje, el usuario invoca a un
programa de noticias, el cual acepta el mensaje a publicar y luego lo deposita
en un directorio de cola para transmitirlo a las otras máquinas más adelante.
Todo el sistema de noticias se ejecuta fuera del sistema operativo. En la
figura 5-17 se resume el sistema de E/S, donde se muestran todos los niveles y
las funciones principales de cada nivel. Empezando desde la parte inferior, los
niveles son el hardware, los manejadores de interrupciones, los controladores
de dispositivos, el software independiente del dispositivo y, por último, los
procesos de usuario.
Las flechas en
la figura 5-17 muestran el flujo de control. Por ejemplo, cuando un programa de
usuario trata de leer un bloque de un archivo, se invoca el sistema operativo
para llevar a cabo la llamada. El software independiente del dispositivo busca
el bloque en la caché del búfer, por ejemplo. Si el bloque necesario no está
ahí, llama al controlador del dispositivo para enviar la petición al hardware y
obtenerlo del disco. Después, el proceso se bloquea hasta que se haya
completado la operación de disco.
Cuando termina el disco, el hardware genera
una interrupción. El manejador de interrupciones se ejecuta para descubrir qué
ocurrió; es decir, qué dispositivo desea atención en ese momento. Después
extrae el estado del dispositivo y despierta al proceso inactivo para que
termine la petición de E/S y deje que el proceso de usuario continúe.
No hay comentarios:
Publicar un comentario