lunes, 7 de noviembre de 2011

Administración de Dispositivos de Entrada y Salida

Los sistemas operativos son la base para el control de nuestro equipo y programas, pero también para una buena administración de los dispositivos de E/S. Ya que si no contáramos con una administración de los mismos no podríamos explotar al máximo la capacidad que estos poseen.

Tipos de entrada/salida:

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.

Los controladores de dispositivo (device drivers) son programas añadidos al núcleo del sistema operativo, concebidos inicialmente para gestionar periféricos y dispositivos especiales.  Los controladores de dispositivo pueden ser de dos tipos: orientados a caracteres (tales como los dispositivos NUL, AUX, PRN, etc. del sistema) o bien orientados a bloques, constituyendo las conocidas unidades de disco.

Un dispositivo de caracteres, es un componente de la computadora en el que la comunicación con la unidad central de proceso los datos se transmiten en forma de bytes independientes.
Ejemplos de dispositivos de caracteres son impresoras y teclados, que permiten el manejo de un solo byte a la vez.

Un dispositivo de bloques es un componente de la computadora en el que la comunicación con la unidad central de proceso los datos se transmiten en conjuntos indivisibles. Un ejemplo típico de dispositivo de bloque es un disco duro, que está ordenado internamente en sectores que típicamente son de 512 bytes, y al escribir o al leer del disco es necesario transferir esa cantidad de información como conjunto.

La diferencia fundamental entre ambos tipos de controladores es que los primeros reciben o envían la información caracter a caracter; en cambio, los controladores de dispositivo de bloques procesan, como su propio nombre indica, bloques de cierta longitud en bytes (sectores). Los controladores de dispositivo, aparecidos con el DOS 2.0, permiten añadir nuevos componentes a la computadora sin necesidad de rediseñar el sistema operativo.

El acceso a un bloque en disco consta de varias operaciones con retardos relacionados con las características físicas del dispositivo. Mientras que la selección de cabezal es una operación de carácter eléctrico y, por lo tanto, presenta un retardo nulo, el posicionamiento en un cilindro y la espera de rotación son operaciones de carácter mecánico cuyo retardo es importante y debe minimizarse para mejorar el rendimiento del sistema. Tenemos las siguientes políticas de gestión:

First-Come, First Served (FCFS)

La política más simple de planificación es la FCFS. A medida que un proceso pasa al estado listo, este es agregado a la cola de listos. Cuando el proceso que actualmente está ejecutando cesa su ejecución entonces el proceso más viejo en la cola es seleccionado para correr. La implementación de esta política es a través de colas FIFO (First-In, First-Out). Cuando el CPU está libre, éste es asignado al proceso que está en la cabeza de la cola.
FCFS es un algoritmo no apropiativo, pues una vez que el CPU es asignado a un proceso, este lo mantiene hasta que espontáneamente lo suelta, ya sea porque el proceso finalizó o por algún requerimiento de E/S. El tiempo de espera bajo esta política tiende a ser alto. Además , tiende a favorecer aquellos procesos que requieren más tiempo de CPU (CPU-bound).

SSTF (Short-Seek (o Service) Time-First).

Consiste en elegir la solicitud que requiera el menor movimiento posible del brazo del disco desde la posición actual. Esta planificacion selecciona el pedido de E/S que requiera menor movimiento del brazo del disco desde la posicion actual. Por lo tanto no favorece a ninguna parte del disco en especial, eso dependerá de los pedidos de E/S que haya y la secuencia en la que aparezcan. Esta técnica puede provocar inanición (starvation) de algunas solicitudes. Las solicitudes pueden llegar en cualquier momento.

El sistema operativo gestiona un reloj de interruciones que genera pulsos cada cierto tiempo. Un proceso mantiene el control de la CPU hasta que la libera voluntariamente (acaba su ejecución, o se bloquea), hasta que el reloj interrumpe o hasta que alguna otra interrupción desvía la atención de la CPU. Si el usuario se encuentra en ejecución y el reloj interrumpe, el sistema operativo entra en ejecución para comprobar, por ejemplo, si ha pasado el cuanto de tiempo del proceso que estaba en ejecución.

El reloj de interrupciones asegura que ningún proceso acapare la utilización del procesador. El sistema operativo, apoyándose en él, intenta distribuir el tiempo de CPU entre los distintos procesos ya sean de E/S o de cálculo. Por tanto, ayuda a garantizar tiempos de respuesta para los usuarios interactivos, evitando que el sistema quede bloqueado en un ciclo infinito de algún usuario y permite que los procesos respondan a eventos dependientes de tiempo. Los procesos que deben ejecutarse periódicamente dependen del reloj de interrupciones.
No se debe confundir en ningún caso al reloj de interrupciones con el reloj de la máquina o reloj hardware. Una computadora tiene un reloj de hardware alimentado por una batería. Esa batería asegura que el reloj continúe trabajando aún cuando la computadora se encuentre sin suministro eléctrico. El reloj de hardware puede ser modificado (o definido) desde la pantalla de configuración de la BIOS o desde cualquier sistema operativo.

El kernel Linux mantiene la fecha y hora de manera independiente al reloj de hardware. Durante el inicio de un sistema Linux, el kernel configura su propio reloj de software accediendo a la fecha y hora mantenida por el reloj de hardware. Luego, ambos relojes trabajan independientemente. Linux mantiene su propio reloj debido a que leer el reloj de hardware constantemente es lento y complicado.

El reloj del kernel siempre muestra la hora universal, por lo que no necesita conocer como utilizar usos horarios. La simplicidad de este modo de trabajar proporciona alta confiabilidad y facilita actualizar la información de la zona horaria. Cada proceso realiza las conversiones de zona horaria de manera independiente (utilizando herramientas estándar que son parte del paquete de zona horaria).

El reloj de hardware puede estar en formato de hora local u hora universal. Usualmente es mejor que el reloj de hardware mantenga la hora universal, porque de esta manera no será necesario modificar la hora del reloj cuando el "horario de verano" (daylight savings time) empiece o finalice (UTC no tiene DST). Desafortunadamente, algunos sistemas operativos de PC (incluyendo a MS-DOS, Windows y OS/2) asumen que el reloj de hardware muestra la hora local. Linux puede manejar cualquiera de los dos formatos, pero si el reloj de hardware muestra la hora local, entonces debe modificarlo cada vez que el "horario de verano" empiece o finalice.

Los programas temporizadores son herramientas que permiten automatizar el CPU para que se apague, cierre aplicaciones o se ponga en modo de hibernación o ahorro de energía siguiendo los parámetros que se le proporcionen; estos contienen variables de tiempo, que son modificadas directamente por el sistema operativo del PLC (Controlador lógico programable). Los temporizadores son variables de 16 Bits, en formato S5TIME. En este
formato, los 2 bits más significativos (15 y 14) son irrelevantes. Los dos siguientes (13 y 12) definen la base de tiempos, y los otros 12 (11 a 0) codifican en BCD el valor de tiempo. Los temporizadores se denotan con la letra T, seguida de un número. El número de que puede gestionar una CPU depende del modelo.

Los discos están expuestos a numerosas causas de error. Es importante que las primitivas del núcleo del sistema operativo devuelvan un código que permita tratar el error para, si es posible, recuperar la operación. Los errores más comunes en los accesos al disco se pueden englobar en alguno de los dos tipos siguientes:

Errores de posicionamiento: el cabezal no se sitúa sobre el cilindro solicitado. Es necesario recalibrar, lo que supone poner el cabezal en el punto de referencia (cilindro 0), para poder reintentar el posicionamiento.
Errores de control de paridad: Pueden indicar la existencia de un sector dañado o la presencia de suciedad en el cabezal o la superficie del disco.

No hay comentarios:

Publicar un comentario