GESTION
DE DISPOSITIVOS
CARACTERÍSTICAS
DE LOS DISPOSITIVOS
Los dispositivos
se caracterizan por su heterogeneidad, lo que introduce complejidad
en el sistema operativo. Algunas de las características en las que
los dispositivos pueden diferir son las siguientes:
• Unidad de
transferencia. Unos dispositivos utilizan el byte como unidad de
transferencia (dispositivos de caracteres, como el teclado o el
ratón). Otros transfieren y/o almacenan la información en bloques
(dispositivos de bloques, como discos y cintas magnéticas).
• Velocidad.
Los rangos en los que se mueven los dispositivos son muy amplios. Los
discos y los dispositivos de comunicación transfieren millones de
caracteres por segundo y pueden hacerlo a velocidad constante,
mientras que con el teclado se transfieren a lo sumo unos cuantos
caracteres por segundo, con un periodo concreto impredecible.
•
Representación de los datos. Incluso un mismo dispositivo puede
utilizar diferentes codificaciones configurables en la instalación,
como es el caso del teclado y el monitor.
• Protocolos de
comunicación. La comunicación entre el dispositivo y la CPU se
realiza de acuerdo a un determinado protocolo que depende del
dispositivo y del bus de comunicación.
• Operaciones.
Hay dispositivos de entrada, de salida y de entrada/salida. Además,
algunos dispositivos requieren operaciones específicas (por ejemplo,
posicionar el cabezal de lectura/escritura en los discos).
Errores. Las
condiciones de error varían con la naturaleza del dispositivo. Por
ejemplo, en la impresora hay que tratar la falta de papel como una
situación de error específica, mientras que en un disco puede haber
errores en el posicionamiento del cabezal. Para proporcionar una
forma homogénea de direccionar los dispositivos, a nivel hardware
éstos se conectan al sistema mediante controladores. El sistema
operativo ya no trata con el dispositivo en sí mismo, sino con una
interfaz que lo representa mediante un conjunto de direcciones o
registros del controlador, que se pueden direccionar en el espacio de
direcciones de memoria o constituir un espacio de direcciones
independientes. El sistema se comunica con el controlador mediante
operaciones de lectura/escritura sobre los registros de datos, estado
y control, permitiendo tanto la transferencia de información como el
diagnóstico y configuración del dispositivo. Estas operaciones las
realizan las funciones de más bajo nivel del núcleo del sistema
operativo, y son dependientes del hardware.
TIPOS DE
ENTRADA/SALIDA
Por otra parte, y
dependiendo en gran parte de las características del dispositivo,
hay que distinguir tres tipos de entrada/salida, en función de cómo
el sistema se sincroniza con el controlador: E/S programada. La
sincronización es por encuesta, realizándose un bucle de espera
activa en la consulta del registro de estado del controlador. Los
sistemas operativos multiprogramados evitan este tipo de operación.
E/S por interrupciones. El controlador activa una interrupción que
permite la comunicación asíncrona del sistema operativo, que puede
estar realizando otras tareas, con el dispositivo. Es la base que
permite implementar un sistema operativo multiprogramado.
E/S por DMA. Los
dispositivos de bloques, que requieren una tasa de transferencia muy
elevada, utilizan el acceso directo a memoria para las operaciones de
entrada/salida, bien utilizando ciclos de memoria libres (robo de
ciclo), bien adueñándose de los buses de memoria para transferir un
bloque completo.
Este tipo de
entrada/salida implica la utilización de interrupciones para la
sincronización con el fin de la transferencia.
La evolución del
hardware ha llevado a incluir capacidad de proceso dentro del
dispositivo (procesadores de E/S). El sistema operativo se comunica
con el procesador de E/S para indicarle los parámetros de la
operación a realizar y ordenar su inicio. El procesador de E/S
ejecuta un código propio que controla los detalles de la operación.
Por otra parte, lo habitual hoy en día es incluir una cierta
cantidad de memoria RAM en el controlador o en el dispositivo, sobre
la que el sistema operativo .realiza la transferencia. Esto ocurre
por ejemplo con los discos, las impresoras y las pantallas gráficas,
que pueden contar con varios Mbytes de memoria.
Finalmente, un
dispositivo puede estar accesible a través de una red, de forma
transparente a las aplicaciones, situación habitual hoy en día, por
ejemplo en las impresoras. Una pila de protocolos proporciona la
comunicación entre la máquina cliente, que lanza la operación, y
el servidor remoto, que gestiona el dispositivo.
Este esquema cae
fuera del ámbito de la asignatura objeto de estos apuntes.
MODELO
GENERAL DE LA ENTRADA/SALIDA
Para facilitar su
comprensión, el modelo de entrada/salida que vamos a presentar tiene
como objetivo ser lo más sencillo y general posible, por encima de
consideraciones acerca del rendimiento, e impone una estructura
determinada al sistema operativo. Sus características fundamentales
son:
• La entrada y
salida se organiza y gestiona por capas, que responden a diferentes
niveles de abstracción.
• El acceso a
los recursos de entrada/salida se coordina de acuerdo al esquema
cliente-servidor.
Los aspectos relacionados con la
mejora del rendimiento pueden generalizarse en la utilización de
buffers para el almacenamiento intermedio de la entrada/salida, que
abordaremos en tercer lugar para completar el modelo.
GESTIÓN DE
LA ENTRADA/SALIDA POR CAPAS
Ante un panorama
tan heterogéneo, abordar el
estudio y diseño de la entrada/salida en un sistema operativo de
manera comprensiva conduce a estructurar el sistema en diferentes
niveles de abstracción o capas. Una capa Lk ofrece una Interfaz a
la capa superior, la capa Lk+1, conjunto de funciones que determinan
la forma en que desde la capa Lk+1 se accede a la capa Lk. En un
sistema operativo la capa de más arriba corresponde a los programas
de usuario, y está ya fuera de sistema operativo. Como ya se conoce,
desde esta capa se accede a la capa inferior, ya dentro del sistema
operativo, mediante la interfaz de llamadas al sistema. La interfaz
de una capa ha de estar bien definida para que el programador sepa a
qué atenerse.
Esta figura
consta de cuatro capas o niveles. De abajo arriba, el nivel más
interno del sistema operativo (núcleo) programa los controladores de
los dispositivos y maneja las interrupciones. Esta capa contiene
software dependiente de los dispositivos y algunas partes han de ser
codificadas en lenguaje máquina. Sobre el núcleo, en un segundo
nivel se gestionan las peticiones de acceso a los dispositivos. Aquí
residen los manejadores de los dispositivos (drivers), que tratan con
las características particulares de los mismos y los controlan a
través de las primitivas del núcleo. La tercera capa contiene
software independiente del dispositivo: gestión de directorios,
nombres, etc. Sobre estos niveles intermedios se monta la capa
superior, que proporciona la interfaz de llamadas al sistema para las
aplicaciones y muestra los dispositivos como abstracciones que se
representan por canales, proporcionando conceptos como el
re-direccionamiento de la entrada-salida.
ESQUEMA
CLIENTE-SERVIDOR
Las operaciones
de entrada/salida se especifican desde las aplicaciones mediante las
llamadas al sistema, que trabajan con canales o dispositivos
lógicos3. En general, una llamada al sistema típica (lectura o
escritura) especifica de manera explícita o implícita los
siguientes parámetros:
• La operación
a realizar (leer, escribir...).
• El canal
sobre el que se realiza la operación.
• La dirección
(o posición) en el dispositivo E/S donde se accede. Normalmente está
implícita (siguiente posición en un fichero) o incluso carece de
sentido (lectura de teclado o ratón).
• La fuente o
destino de la transferencia (dirección de memoria).
• La cantidad
de información a transferir (longitud).
• En los
sistemas que permiten operaciones síncronas y asíncronas, se indica
esta condición y el evento con el que el programa que solicita la
operación se va a sincronizar explícitamente.
El tratamiento de
una operación de entrada/salida tiene dos partes. La primera,
independiente del dispositivo, es el código utilizado por la llamada
al sistema. Nos referiremos a ella como rutina de E/S. La segunda es
el código del driver o manejador del dispositivo, y es dependiente
del dispositivo. En nuestro modelo, la implementación del sistema
operativo adopta el esquema cliente-servidor: las rutinas de E/S,
ejecutadas por los procesos de usuario, corresponden a la parte del
cliente del servicio, y el manejador, que se ejecuta como un proceso
del sistema operativo, a la parte del gestor de la petición. A
continuación presentaremos las estructuras de datos que proporcionan
la interfaz entre las rutinas de E/S y los manejadores de los
dispositivos, y que permiten hacer a la rutina de E/S independiente
de las particularidades de la gestión del dispositivo.
REPRESENTACIÓN
DE LA E/S
La estructura que
proporciona la comunicación entre la rutina de E/S y el manejador
del dispositivo se suele denominar IORB (Bloque de Petición de E/S,
I/O Request Block). La rutina de E/S utiliza un IORB para cada
petición. Contiene la siguiente información:
•
Identificación del proceso cliente.
• Parámetros
de la petición.
• Evento para
la sincronización del cliente con el final de la operación.
• Diagnóstico
de la operación, a establecer por el manejador de acuerdo al
resultado de la operación.
En un sistema
operativo donde toda la E/S fuera síncrona, cada proceso dispondría
de un IORB único y privado, asociado a su PCB, y el evento puede ir
implícito. En un modelo general donde también es posible la E/S
asíncrona, cadaproceso puede disponer de IORBs de un conjunto, que
reservaría en exclusión mutua, y el evento de sincronización sería
explícito. En este modelo general, los procesos se bloquean por
eventos en vez de por operaciones de E/S.
INTERRUPCIONES.
Un computador debe disponer de los elementos suficientes para que el programador tenga un control total sobre todo lo que ocurre durante la ejecución de su programa. La llegada de una interrupción provoca que la CPU suspenda la ejecución de un programa e inicie la de otro (rutina de servicio de interrupción).
Es por ello que las interrupciones deber controlarse cuidadosamente.
PASOS A SEGUIR EN CASO DE INTERRUPCIONES
1.- El dispositivo envía la solicitud de interrupción mediante la línea INTR.
2.- El procesador termina la ejecución de la instrucción en curso y analiza la
línea de petición de interrupción, INTR. Si esta línea no está activada continuará normalmente con la ejecución de la siguiente instrucción, en caso contrario se pasa a la etapa siguiente.
3.- La CPU reconoce la interrupción, para informar al dispositivo de ello, activa la línea de reconocimiento de interrupción, INTA.
4.- El dispositivo que reciba la señal INTA envía el código de interrupción por el
bus de datos.
5.- La CPU calcula la dirección de memoria donde se encuentra la rutina de servicio de interrupción (vector de interrupción).
6.- El estado del procesador, y en particular el contador de programa, se salva en la pila de la misma forma que en una llamada a procedimiento.
7.- La dirección de la rutina de servicio de interrupción se carga en el contador de programa, con lo que se pasa el control a la citada rutina.
8.- La ejecución continúa hasta que el procesador encuentre la instrucción de retorno de interrupción.
línea de petición de interrupción, INTR. Si esta línea no está activada continuará normalmente con la ejecución de la siguiente instrucción, en caso contrario se pasa a la etapa siguiente.
3.- La CPU reconoce la interrupción, para informar al dispositivo de ello, activa la línea de reconocimiento de interrupción, INTA.
4.- El dispositivo que reciba la señal INTA envía el código de interrupción por el
bus de datos.
5.- La CPU calcula la dirección de memoria donde se encuentra la rutina de servicio de interrupción (vector de interrupción).
6.- El estado del procesador, y en particular el contador de programa, se salva en la pila de la misma forma que en una llamada a procedimiento.
7.- La dirección de la rutina de servicio de interrupción se carga en el contador de programa, con lo que se pasa el control a la citada rutina.
8.- La ejecución continúa hasta que el procesador encuentre la instrucción de retorno de interrupción.
9.- Cuando se encuentre la instrucción de retorno de interrupción se
restaura el estado del procesador, en especial el contador de programa,
y se devuelve el control al programa interrumpido.
Normalmente la primera instrucción de la rutina de servicio tendrá como fin
desactivar las interrupciones para impedir el anidamiento, por otra parte, antes
de devolver el control al programa interrumpido se volverán a habilitar si es
necesario.
restaura el estado del procesador, en especial el contador de programa,
y se devuelve el control al programa interrumpido.
Normalmente la primera instrucción de la rutina de servicio tendrá como fin
desactivar las interrupciones para impedir el anidamiento, por otra parte, antes
de devolver el control al programa interrumpido se volverán a habilitar si es
necesario.
No hay comentarios:
Publicar un comentario