domingo, 15 de noviembre de 2015

ARQUITECTURA DEL SISTEMA DE ENTRADA/SALIDA

El sistema de entrada/salida está construido como un conjunto de manejadores apilados, cada uno de los
cuales está asociado a un dispositivo de entrada/salida (archivos, red, etc.). Ofrece a las aplicaciones y
entornos de ejecución servicios genéricos que permiten manejar los objetos de entrada/salida del sistema.
A través de ellos se puede acceder a todos los manejadores de archivos y de dispositivos tales como discos, cintas, redes, consola, tarjetas de sonido, etc.

Estructura y componentes del sistema de E/S.

La arquitectura del sistema de entrada/salida es compleja y está estructurada en capas, cada una
de las cuales tiene una funcionalidad bien definida:

•Interfaz del sistema operativo para entrada/salida. Proporciona servicios de E/S síncrona y
asíncrona a las aplicaciones y una interfaz homogénea para poderse comunicar con los manejadores
de dispositivo ocultando los detalles de bajo nivel.
• Sistemas de archivos. Proporcionan una interfaz homogénea, a través del sistema de archivos
virtuales, para acceder a todos los sistemas de archivos que proporciona el sistema operativo (FFS,
SV, NTFS, FAT, etc.). Permite acceder a los manejadores de los dispositivos de almacenamiento de forma transparente, incluyendo en muchos casos, como NFS o NTFS, accesos remotos a través de redes. En algunos sistemas, como Windows NT, los servidores para cada tipo de sistema de archivos se pueden cargar y descargar dinámicamente como cualquier otro manejador.
• Gestor de redes. Proporciona una interfaz homogénea para acceder a todos los sistemas de red que
proporciona el sistema operativo (TCP/IP, Novell, etc.). Además, permite acceder a  los manejadores de cada tipo de red particular de forma transparente.
• Gestor de bloques. Los sistemas de archivos y otros dispositivos lógicos con acceso a nivel de bloque se suelen limitar a traducir las operaciones del formato del usuario al de bloques que entiende el dispositivo y se las pasan a este gestor de bloques. El gestor de bloques admite únicamente operaciones a nivel de bloque e interacciona con la cache de bloques para optimizar la E/S.
• Gestor de cache. Optimiza la entrada/salida mediante la gestión de almacenamiento intermedio en
memoria para dispositivos de E/S de tipo bloque [ 1985]. Es importante saber que su tamaño varía
dinámicamente en función de la memoria RAM disponible y que los bloques se escriben a los
dispositivos según una política bien definida, que en UNIX y WINDOWS NT es la de escritura
retrasada.
• Manejadores de dispositivo. Proporcionan operaciones de alto nivel sobre los dispositivos y las
traducen en su ámbito interno a operaciones de control de cada dispositivo particular. Como ya se
ha dicho, los manejadores se comunican con los dispositivos reales mediante puertos o zonas de
memoria especiales.
Cada uno de los componentes anteriores se considera un objeto del sistema, por lo que habitualmente
todos los sistemas operativos permiten modificar el sistema operativo de forma estática o dinámica para
reemplazar, añadir o quitar manejadores de dispositivos. Sin embargo, habitualmente, y por razones de
seguridad, no se permite a las aplicaciones de usuario acceder directamente a los dispositivos, sino a través
de la interfaz de llamadas al sistema operativo.

Software de E/S

Este software se organiza en una serie de capas que se muestran en la Figura. Estas capas se corresponden, en general, con los niveles de la arquitectura de E/S.
Como puede verse en dicha figura, los procesos de usuario emiten peticiones de entrada/salida al
sistema operativo. Cuando un proceso solicita una operación de E/S, el sistema operativo prepara dicha
operación y bloquea al proceso hasta que se recibe una interrupción del controlador del dispositivo indicando que la operación está completa. Las peticiones se procesan de forma estructurada en las siguientes capas:
• Manejadores de interrupción.
• Manejadores de dispositivos o drivers.
• Software de EIS independiente de los dispositivos. Este software está formado por la parte de alto
nivel de los manejadores, el gestor de cache, el gestor de bloques y el servidor de archivos.
• Interfaz del sistema operativo. Llamadas al sistema que usan las aplicaciones de usuario.
El uso de capas conlleva la realización de varias copias de datos, alguna de las cuales son inevitables.
En algunos casos, la copia que se realiza en el núcleo del sistema operativo puede ser innecesaria, por lo
que existen mecanismos para acceder directamente a los controladores desde la interfaz de E/S del sistema
a los manejadores. Sin embargo, y como norma general, esa copia existe siempre.
El sistema operativo estructura el software de gestión de E/S de esta forma para ofrecer a los usuarios
una serie de servicios de E/S independientes de los dispositivos. Esta independencia implica que deben
emplearse los mismos servicios y operaciones de E/S para leer datos de un disquete, de un disco duro, de un CD-ROM o de un teclado, por ejemplo. Como se verá más adelante, el servicio read de POSIX puede
utilizarse para leer datos de cualquiera de los dispositivos citados anteriormente. Además, la estructuración
en capas permite hacer frente a la gestión de errores que se pueden producir en el acceso a los periféricos en el nivel de tratamiento más adecuado. A continuación, se describe más en detalle cada uno de los
componentes.

Manejadores de interrupción
Los manejadores de interrupción se encargan de tratar las interrupciones que generan los controladores de
dispositivos una vez que éstos están listos para la transferencia de datos o bien han leído o escrito los datos
de memoria principal en caso de acceso directo a memoria. Para tratar dicha interrupción se ejecuta el
correspondiente manejador de interrupción cuyo efecto es el de salvar los registros, comunicar el evento al
manejador del dispositivo y restaurar la ejecución de un proceso (que no tiene por qué ser el interrumpido).
En la sección anterior se mostró más en detalle cómo se trata una interrupción.

Los manejadores de interrupción suelen hacer algo más que comunicar el evento al manejador de
dispositivo. Cuando una interrupción ocurre muy frecuentemente, caso del reloj, o cuando la cantidad de
información a transferir es muy pequeña, caso del teclado, sería muy costoso comunicar siempre el evento
al manejador de dispositivo asociado. En estos casos, el propio manejador de interrupción registra la
ocurrencia del evento, bien mediante el incremento de una variable global para el reloj o la acumulación de
caracteres en un buffer del teclado. La notificación al manejador se hace únicamente cada cierto número de
ocurrencias del evento, en el caso del reloj, o activando unflag que indica que hay datos en el buffer del
teclado.

Manejadores de dispositivos
Cada dispositivo de E/S, o cada clase de dispositivos, tiene un manejador asociado en el sistema operativo.
Dicho manejador incluye: código independiente del dispositivo para proporcionar al nivel superior del
sistema operativo una interfaz de alto nivel y el código dependiente del dispositivo necesario para
programar el controlador del dispositivo a través de sus registros y mandatos. La tarea de un manejador de
dispositivo es aceptar peticiones en formato abstracto, de la parte del código de E/S independiente del
dispositivo, traducir dichas peticiones a términos que entienda el controlador, enviar al mismo las órdenes
adecuadas en la secuencia correcta y esperar a que se cumplan. La Figura 7.9 muestra un diagrama de flujo
con las operaciones de un manejador.

Todos los manejadores tienen una lista de peticiones pendientes por dispositivo donde se encolan las
peticiones que llegan de niveles superiores. El manejador explora la lista de peticiones, extrae una petición
pendiente y ordena su ejecución. La política de extracción de peticiones de la lista es dependiente de
manejador y puede ser FIFO, con pr etc. Una vez enviada la petición al controlador, el manejador se bloquea o no, dependiendo de la velocidad del dispositivo. Para los lentos (discos) se bloquea esperando una interrupción.
Para los rápidos (pantalla, discos RAM, etcétera) responde inmediatamente. Después de recibir el fin de
operación, controla la existencia de errores y devuelve al nivel superior el estado de terminación de la
operación. Si tiene operaciones pendientes en la cola de peticiones, atiende a la siguiente, en caso de que le
toque ejecutar después de la operación de E/S. En caso contrario se bloquea.

La mayor parte del sistema de E/S es software independiente de dispositivo. Como se puede ver en la
Figura anterior este nivel incluye el sistema de archivos y el de gestión de red, el gestor de bloques, la cache de bloques y una parte de los manejadores de dispositivo. La principal función de esta capa de software es
ejecutar las funciones de E/S que son comunes a todos los dispositivos a través de una interfaz uniforme,
Internamente, en este nivel se proporciona acceso a nivel de bloques o caracteres, almacenamiento
intermedio, gestión de los dispositivos, planificación de la E/S y control de errores.
El tamaño de acceso a nivel de bloques se hace usando tamaños de bloque de acceso comunes para
todo un sistema de archivos, lo que permite ocultar que cada dispositivo puede tener distinto tamaño de
sector y distinta geometría. Estos detalles quedan ocultos por la capa de software in dependiente de
dispositivo que ofrece una interfaz sobre la base de bloques lógicos del sistema de archivos. Lo mismo
ocurre con los dispositivos de caracteres, algunos de los cuales trabajan con un carácter cada vez, como el
teclado, mientras otros trabajan con flujos de caracteres, como el módem o las redes.
Para optimizar la E/S y para armonizar las peticiones de usuario, que pueden ser de cualquier tamaño,
con los bloques que maneja el sistema de archivos, el software de E/S proporciona almacenamiento
intermedio en memoria del sistema operativo. Esta facilidad se usa para tres cosas:
• Optimizar la E/S evitando accesos a los dispositivos.
• Ocultar las diferencias de velocidad con que cada dispositivo y usuario manejan los datos.
• Facilitar la implementación de la semántica de compartición, al existir una copia única de los datos
en memoria.

El sistema de E/S mantiene buffers en distintos componentes. Por ejemplo, en la parte del manejador
del teclado independiente del dispositivo existe un buffer para almacenar los caracteres que teclea el
usuario hasta que se pueden entregar a los niveles superiores. Si se usa una línea serie para leer datos de un
sistema remoto y almacenarlos en el disco, se puede usar un buffer para guardar temporalmente los datos
hasta que tengan una cierta entidad y sea rentable escribirlos a disco. Si se está leyendo o escribiendo un
archivo, se guardan copias de los bloques en memoria para no tener que acceder al disco si se vuelven a
leer.
La gestión de los dispositivos agrupa a su vez tres servicios: nombrado, protección y control de acceso.
El nombrado permite traducir los nombres de usuario a identificadores del sistema. Por ejemplo, en UNIX,
cada dispositivo tiene un nombre (p. ej.: /dev/cdrom) que se traduce en un único identificador interno (o
nodo-i), que a su vez se traduce en un único número de dispositivo principal (clase de dispositivo) y
secundario (elemento de la clase). Cada dispositivo tiene asociada una información de protección (en UNIX
mediante 3 bits para dueño, grupo y mundo) y este nivel de software asegura que los requisitos de
protección se cumplen. Además proporciona control de acceso para que un dispositivo dedicado, como una
impresora, sea accedido por un único usuario cada vez.
Una de las funciones principales del sistema de E/S es la planificación de la E/S de los distintos
componentes. Para ello se usan colas de peticiones para cada clase de dispositivo, de las que se extraen las
peticiones de cada dispositivo en particular. Cada una de estas colas se ordena siguiendo una política de
planificación, que puede ser distinta en cada nivel. Imagine el caso de LINUX, donde existe una cola global
de peticiones de E/S, ordenadas en orden FIFO, para los discos instalados. Cuando un manejador de disco
queda libre, busca la cola global para ver si hay peticiones para él y, si existen, las traslada a su cola de peticiones particular ordenadas según la política SCAN, por ejemplo. Este mecanismo permite optimizar la E/S al conceder a cada mecanismo la importancia que, a juicio de los diseñadores del sistema operativo, se merece. En el caso de Windows NT, por ejemplo, el ratón es el dispositivo de E/S más prioritario del sistema. La razón que hay detrás de esta política es conseguir un sistema muy interactivo. En otros sistemas, como UNIX, las operaciones de disco son más prioritarias que las del ratón para poder desbloquear rápidamente a los procesos que esperan por la E/S. Sea cual sea el criterio de planificación, todos los sistemas de E/S planifican las actividades en varios lugares.
Por último, este nivel proporciona gestión de errores para aquellos casos que el manejador de
dispositivo no puede solucionar. Un error transitorio de lectura de un bloque se resuelve en el manejador
reintentando su lectura. Un error permanente de lectura no puede ser resuelto y debe ser comunicado al
usuario para que tome las medidas adecuadas. En general, todos los sistemas operativos incluyen alguna
forma de control de errores internos y de notificación al exterior en caso de que esos errores no se puedan
resolver. Imagine, por ejemplo, que una aplicación quiere leer de un dispositivo que no existe. El sistema de
E/S verá que el dispositivo no está y lo notificará a los niveles superiores hasta que el error llegue a la
aplicación. Sin embargo, es importante resaltar que los sistemas operativos son cada vez más robustos y
cada vez incluyen más control y reparación de errores, para lo cual usan métodos de paridad, checksums,
códigos correctores de error, etc. Además, la información que proporcionan cuando hay un error es cada
vez mayor. En Windows NT, por ejemplo, existen monitores que permiten ver el comportamiento de las
operaciones de E/S.

No hay comentarios:

Publicar un comentario