domingo, 15 de noviembre de 2015

CARACTERIZACIÓN DE LOS DISPOSITIVOS DE E/S

La visión del sistema de E/S puede ser muy distinta dependiendo del nivel de detalle necesario en su
estudio. Para los programadores, el sistema de E/S es una caja negra que lee y escribe datos en dispositivos
externos a través de una funcionalidad bien definida. Para los fabricantes de dispositi vos, un dispositivo es
un instrumento muy complejo que incluye cientos o miles de componentes electrónicos o electromecánicos.
Los diseñadores de sistemas operativos se encuentran en un lugar intermedio entre los dos anteriores. Les
interesa la funcionalidad del dispositivo, aunque a un nivel de detalle mucho más grande que la
funcionalidad que espera el programador de aplicaciones, pero también les interesa conocer la interfaz
física de los dispositivos y su comportamiento interno para poder optimizar los métodos de acceso a los
mismos.
En esta sección se estudia brevemente cómo se conecta un dispositivo de E/S a una computa dora y se
lleva a cabo una caracterización de los dispositivos de E/S según sus métodos y tamaño de acceso, su forma
de programación, etc.

Conexión de un dispositivo de E/S a una computadora

La Figura muestra el esquema general de conexión de periféricos a una computadora [De Miguel,
1998]. En el modelo de un periférico se distinguen dos elementos:
• Periféricos o dispositivos de E/S. Elementos que se conectan a la unidad central de proceso a
través de las unidades de entrada/salida. Son el componente mecánico que se conecta a la
computadora.
• Controladores de dispositivos o unidades de E/S. Se encargan de hacer la transferencia de
información entre la memoria principal y los periféricos. Son el componente electrónico a través
del cual se conecta el dispositivo de E/S. Tienen una conexión al bus de la computadora y otra para
el dispositivo (generalmente mediante cables internos o externos).

Los controladores son muy variados, casi tanto como los dispositivos de E/S. Muchos de ellos, como
los de disco, pueden controlar múltiples dispositivos. Otros, como los de canales de E/S, incluyen su propia
UCP y bus para controlar la E/S por programa y evitar interrupciones en la UCP de la computadora. De
cualquier forma, en los últimos años ha existido un esfuerzo importante de estandarización de los
dispositivos, lo que permite usar un mismo controlador para dispositivos de distintos fabricantes. Un buen
ejemplo lo constituyen los dispositivos SCSI (Small Computer System interface), cuyos controladores
ofrecen una interfaz común independientemente de que se trate de un disco, una cinta, un CD-ROM, etc.
Otro buen ejemplo son los controladores IDE (Integrated Drive Electronics), que suelen usarse para
conectar los discos en todas las computadoras personales. En cualquier caso, y sea como sea el controlador, su misión es convertir los datos del formato interno del dispositivo a uno externo que se ofrezca a través de una interfaz de programación bien definida.

El controlador es el componente más importante desde el punto de vista del sistema operativo, ya que
constituye la interfaz del dispositivo con el bus de la computadora y es el componente que se ve desde la
UCP. Su programación se lleva a cabo mediante una interfaz de muy bajo nivel que proporciona acceso a
una serie de registros del controlador, incluidos en el mapa de E/S de la computadora, que se pueden acceder mediante instrucciones de máquina de E/S. Hay tres registros importantes en casi todos los
controladores: registro de datos, estado y control. El registro de datos sirve para el intercambio de datos.
En él irá el controlador cargando los datos leídos y de él irá extrayendo los datos para su escritura en el
periférico. Un bit del registro de estado sirve para indicar que el controlador puede transferir una palabra.
En las operaciones de lectura esto significa que ha cargado en el registro de datos un nuevo valor, mientras
que en las de escritura significa que necesita un nuevo dato. Otros bits de este registro sirven para que el
controlador indique los problemas que ha encontrado en la ejecución de la última operación de E/S. El
registro de control sirve para indicarle al controlador las operaciones que ha de realizar. Los distintos bits
de este registro indican distintas acciones que ha de realizar el periférico. Para empezar una operación de
E/S, la UCP tiene que escribir sobre los registros anteriores los datos de la operación a través de una
dirección de E/S o de memoria asignada únicamente al controlador. Este modelo vale tanto para los
terminales o la pantalla como para los discos.
Las características del controlador son muy importantes, ya que definen el aspecto del periférico para
el sistema operativo. Atendiendo a las características del hardware de los dispositivos, se pueden observar
los siguientes aspectos distintivos:
• Dirección de E/S. En general hay dos modelos de direccionamiento de E/S, los que usan puertos y
los que proyectan los registros en memoria.
• Unidad de transferencia. Los dispositivos suelen usar unidades de transferencia de tamaño fijo.
Hay dos modelos clásicos de dispositivos: de caracteres y de bloques.
• Interacción computadora-controlador. La computadora tiene que interaccionar con la computadora para realizar las operaciones de E/S y saber cuándo terminan.

Dispositivos conectados por puertos o proyectados en memoria

Para empezar una operación de E/S, la UCP tiene que escribir sobre los registros anteriores los datos de la
operación a través de una dirección de E/S o de memoria asignada únicamente al controlador. Según se
haga de una u otra forma, se distingue entre dispositivos conectados por puertos o proyectados en memoria.
El modelo de dispositivos por puertos es clásico en las arquitecturas de Intel. En ellas, cuando se
instala un dispositivo, a su controlador se le asigna un puerto de E/S, una interrupción hardware y un vector de interrupción.
Para efectuar una operación de E/S la UCP ejecuta operaciones por o portout con la dirección de puerto del dispositivo y con parámetros para indicar qué registro se quiere manipular. Todas las operaciones de entrada/salida (pantalla gráfica, impresoras, ratón, discos, etc.) se realizan usando esas dos instrucciones de lenguaje máquina con los parámetros adecuados. El problema de este tipo de direccionamiento es que exige conocer las direcciones de E/S y programar las instrucciones especiales de E/S, lo que es significativamente distinto del modelo de memoria de la computadora.
El otro modelo de direccionamiento de E/S es el modelo proyectado en memoria. Este modelo, típico de las arquitecturas de Motorola, asigna a cada dispositivo de E/S un rango de direcciones de memoria a través de las cuales se escribe sobre los registros del controlador. En este modelo no hay instrucciones específicas de E/S, sino que las operaciones se llevan a cabo mediante instrucciones máquina de manejo de memoria, lo que permite gestionar un mapa único de direcciones de memoria. Sin embargo, para no tener conflictos con otros accesos a memoria y para optimizar las operaciones, se reserva una zona de memoria física para asignar las direcciones de E/S.

Dispositivos de bloques y de caracteres

Los dispositivos de almacenamiento secundario y terciario manejan la información en unidades de tamaño
fijo, denominadas bloques, por lo que a su vez se denominan dispositivos de bloques. Estos bloques se
pueden direccionar de manera independiente, lo que permite leer o escribir un bloque con independencia de
los demás. Los dispositivos de bloque lo son porque el hardware fuerza la existencia de accesos de un tamaño determinado. Un disco, por ejemplo, se divide en sectores de 512 bytes o de 1 KB, siendo un sector la unidad mínima de transferencia que el controlador del disco puede manejar.
Los dispositivos de caracteres, como los terminales, impresoras, tarjetas de red, módems, etcétera, no
almacenan información en bloques de tamaño fijo. Gestionan flujos de caracteres de forma lineal y sin
ningún tipo de estructura de bloque. Un teclado es un buen ejemplo de estos dispositivos. Está conectado a
una UART (Universal Asynchronous Receiver/Transmiter) que recibe un carácter del teclado cada vez que
se pulsa una tecla. No es posible leer un bloque de teclas de un golpe o buscar dentro del dispositivo por
ninguna unidad. Un terminal por línea serie también es un dispositivo de caracteres. Su controlador se
limita a enviar al periférico el flujo de caracteres que debe representar en la pantalla y a recibir del mismo
los caracteres tecleados por el usuario.

E/S programada o por interrupciones

Un controlador de dispositivo o unidad de E/S se encarga de controlar uno o más dispositivos de! mismo
tipo y de intercambiar información entre ellos y la memoria principal o unidad central de proceso de la
computadora. El controlador debe encargarse además de sincronizar la velocidad del procesador con la del
periférico y de detectar los posibles errores que se produzcan en el acceso a los periféricos. En el caso de un controlador de disco, éste debe encargarse de convertir un flujo de bits procedente del disco a un bloque de bytes detectando y corrigiendo, si es posible, los errores que se produzcan en esta transferencia. Una vez
obtenido el bloque y comprobado que se encuentra libre de errores, deberá encargarse de transferirlo a
memoria principal.

La información entre los controladores de dispositivo y la unidad central de proceso o memoria principal se puede transferir mediante un programa que ejecuta continuamente y lee o escribe los datos del (al) controlador. Con esta técnica, que se denomina E/S programada, la transferencia de información entre un periférico y el procesador se realiza mediante la ejecución de una instrucción de E/S. Con esta técnica,
es el procesador el responsable de extraer o enviar datos entre el procesador y el controlador de dispositivo, lo que provoca que el procesador tenga que esperar mientras se realiza la transferencia entre el periférico y el controlador. Dado que los periféricos son sensiblemente más lentos que el procesador, éste deberá esperar una gran cantidad de tiempo hasta que se complete la operación de E/S. En este caso no existe ningún tipo de concurrencia entre la E/S y el procesador ya que éste debe esperar a que finalice la
operación.
Aunque esta técnica es muy antigua, ya que proviene del tiempo en que los controladores no tenían
interrupciones, actualmente los canales de E/S y algunos multiprocesadores usan esta técnica para evitar
que lleguen a la UCP de la computadora muchas interrupciones de E/S. En ambos casos, la técnica es la
misma: dedicar una UCP especial para la E/S. La forma de hacerlo es muestrear continuamente los
registros de estado de los controladores para ver si están disponibles y, en ese caso, leer o escribir los
registros. Imagine un canal de E/S al que hay conectados múltiples buses de E/S que, a su vez, tienen
múltiples dispositivos de E/S. Si la UCP quiere escribir en uno de ellos, debe mirar su registro de estado
hasta que los bits indiquen que no está ocupado. Cuando esto ocurra, escribirá un bloque en los registros del
controlador y esperará hasta que los bits de estado indiquen que está disponible. Imagine que quiere leer de
otro controlador, deberá esperar a que los bits de estado le indiquen que está disponible, programar la
operación y esperar a que se indique que los datos están disponibles. Evidentemente, incluso aunque la
UCP esté controlando varios dispositivos de E/S, siempre existe pérdida de ciclos debido a la existencia de
las esperas. Sin embargo, existen situaciones en que esto no es así. En algunos sistemas de tiempo real,
como por ejemplo un satélite, la velocidad de E/S es tan rápida (byte/microsegundos) que sería imposible efectuarla con interrupciones, debido al coste de tratar cada interrupción. En estos casos, la E/S programada es la técnica de elección.

Con E/S programada el procesador tiene que esperar hasta que el controlador esté listo para recibir o
enviar datos, y mientras tanto no realiza ningún trabajo útil. Empleando E/S dirigida por interrupciones el
procesador envía la orden de E/S al controlador de dispositivo y no espera a que éste se encuentre listo para enviar o transmitir los datos, sino que se dedica a otras tareas hasta que llega una interrupción del
dispositivo que indica que se ha realizado la operación solicitada.
El modelo de interrupciones está íntimamente ligado a la arquitectura del procesador. Casi todas las
UCP actuales incluyen interrupciones vectorizadas y enmascarables. Es decir, un rango de interrupciones
entre 0 y 255, por ejemplo, alguna de las cuales se pueden inhibir temporalmente para no recibir
interrupciones de su vector correspondiente. Cada interrupción se asigna a un dispositivo, o un rango de
ellos en caso de un controlador SCSI o una cadena de dispositivos tipo daisv chain, que usa el vector
correspondiente para indicar eventos de E/S a la UCP. Cuando se programa una operación en un
dispositivo, como por ejemplo una búsqueda en un disco, éste contesta con un ACK indicando que la ha
recibido, lo que no significa que haya terminado. En este caso existe concurrencia entre la E/S y el
procesador, puesto que éste se puede dedicar a ejecutar código de otro proceso, optimizando de esta forma el uso del procesador. Al cabo de un cierto tiempo, cuando el disco ha efectuado la búsqueda y las cabezas del disco están sobre la posición deseada, genera una interrupción (poniendo un 1 en el vector
correspondiente). La rutina de tratamiento de la interrupción se encargará de leer o enviar el dato al
controlador. Obsérvese que tanto la tabla de interrupciones como la rutina de tratamiento de la interrupción
se consideran parte del sistema operativo. Esto suele ser así por razones de seguridad; en concreto, para
evitar que los programas que ejecuta un usuario puedan perjudicar a los datos o programas de otros
usuarios.
Las computadoras incluyen varias señales de solicitud de interrupción, cada una de las cuales tiene una
determinada prioridad. En caso de activarse al tiempo varias de estas señales, se tratará la de mayor
prioridad, quedando las demás a la espera de ser atendidas. Además, la computadora incluye un mecanismo
de inhibición selectiva que permite detener todas o determinadas señales de interrupción. Las señales
inhibidas no son atendidas hasta que pasen a estar desinhibidas. La información de inhibición de las
interrupciones suele incluirse en la parte del registro de estado que solamente es modificable en nivel de
núcleo, por lo que su modificación queda restringida al sistema operativo.
¿Quién asigna las interrupciones a los dispositivos? Normalmente, el sistema operativo se hace cargo de
esa asignación cuando instala el dispositivo. Ahora bien, también suele existir la posibilidad de que el
administrador fije las interrupciones manualmente.

Nunca asigne interrupciones manualmente si no tiene experiencia con el sistema
operativo y la arquitectura de la computadora. Si origina conflictos entre
interrupciones, varios dispositivos usarán el mismo

¿ Quien proporciona la rutina de tratamiento de interrupción? Las rutinas de nterrupc suelen tener
dos partes: una genérica y otra particular para el dispositivo.La parte genérica permite:
1. Capturar la interrupción.
2. Salvaguardar el estado del procesador.
3. Activar la rutina de manejo de la interrupción.
4. Indicar al planificador que debe poner lista para ejecutar la rutina particular.
5. Desactivar la interrupción.
6. Restaurar el estado del procesador.
7. Ceder el control (RETI).
La rutina de tratamiento particular indica al planificador que encole la rutina particular, que se activa
cuando le llega su turno de planificación, posiblemente más tarde. La rutina genérica la proporciona el
sistema operativo y es independiente del dispositivo. Se limita a preparar el entorno de ejecución de la
interrupción, salvar los datos y parámetros, llamar a la rutina particular del manejador y restaurar el estado
del proceso. La rutina particular la proporciona el fabricante del dispositivo o del sistema operativo, si se
trata de un dispositivo estándar. Cuando se compra un dispositivo de E/S, como por ejemplo un ratón, es
habitual encontrar un disquete o un CD-ROM con los manejadores del dispositivo. El usuario o el
administrador debe instalar estos manejadores en el sistema operativo y reiniciarlo antes de que sea posible
acceder al dispositivo.

Es importante desactivar las interrupciones después de activar su tratamiento para evitar que
se presenten nuevas interrupciones antes de terminar el tratamiento y perder alguna de ellas.

Un caso especial en la arquitectura Intel es la controladora gráfica, que se encarga de gestionar la salida
a los dispositivos de mapas de bits (pantallas gráficas). Estas controladoras suelen tener su propia memoria,
sobre la cual se llevan a cabo las operaciones de E/S. Aunque la memoria de la controladora se escribe
también a partir de un puerto de E/S, sus prestaciones son muy altas (en nosegundos), por lo que el
tratamiento de las operaciones de E/S se desvía del estándar en el sistema operativo, ya que estos
dispositivos no interrumpen, por lo que se efectúa E/S programada.

Mecanismos de incremento de prestaciones

A medida que la tecnología de fabricación de controladores ha ido mejorando, la capacidad de efectuar
operaciones autónomas en los mismos se ha incrementado considerablemente. Actualmente es muy
frecuente que un controlador de dispositivo tenga capacidad de procesamiento, memoria interna (hasta 16
MB en controladoras gráficas, por ejemplo) y capacidad de solapar búsquedas en unos dispositivos con
transferencias en otros. Estas mejoras convierten al controlador en un auténtico procesador intermedio
entre la UCP y el dispositivo, lo que le permite proporcionar varios servicios para incrementar las
prestaciones de E/S del dispositivo. En esta sección se comentan los más importantes.

Acceso directo a memoria
Tanto en la E/S programada como la basada en interrupciones, la UCP debe encargarse de la transferencia
de datos una vez que sabe que hay datos disponibles en el controlador. Una mejora importante para
incrementar la concurrencia entre la UCP y la E/S consiste en que el controlador del dispositivo se pueda
encargar de efectuar la transferencia de datos, liberando de este trabajo a la UCP, e interrumpir a la UCP
sólo cuando haya terminado la operación completa de E/S. Esta técnica se denomina acceso directo a
memoria (DMA, Direct Memory Access).
Cuando se utiliza acceso directo a memoria, es el controlador el que se encarga directamente de
transferir los datos entre el periférico y la memoria principal, sin requerir intervención alguna por parte del
procesador.

Esta técnica funciona de la siguiente manera: cuando el procesador desea I Qe un bloque de datos, envía una orden al controlador indicándole la siguiente información:
• Tipo de operación: lectura o escritura.
• Periférico involucrado en la operación.
• La dirección de memoria desde la que se va a leer o a la que va a escribir directamente al
controlador de dispositivo (dirección).
• El número de bytes a transferir (contador).

Una vez emitida la orden, el procesador continúa realizando otro trabajo sin necesidad de transferir el
bloque de datos. Es el propio controlador el que se encarga de transferir el bloque de datos del periférico a
memoria. La transferencia se realiza palabra a palabra. Cuando el controlador ha completado la
transferencia, genera una interrupción que activa la rutina de tratamiento correspondiente, de tal manera
que se sepa que la operación ha concluido.
Utilizando acceso directo a memoria el procesador únicamente se ve involucrado al inicio y al final de
la transferencia. Por tanto, cuando el sistema operativo despierta al proceso que pidió la E/S, no tiene que
copiar el bloque a memoria porque ya está allí. El DMA requiere una etapa de almacenamiento intermedio
en el controlador del dispositivo para armonizar la velocidad del dispositivo de E/S con la copia de los
datos en memoria principal. La razón para este almacenamiento intermedio reside en que una vez
que el dispositivo empieza la transferencia de datos, ésta debe hacerse a velocidad constante para evitar
transferencias parciales y nuevas esperas de posicionamiento del dispositivo sobre los datos (latencia). Una
vez transferidos los datos a la memoria del controlador, éste los copia en memoria principal aprovechando
el ancho de banda libre del bus.

Los pasos a seguir en una operación de E/S con DMA son los siguientes:
1. Programación de la operación de E/S. Se indica al controlador la operación, los datos a transferir y
la dirección de memoria sobre la que se efectuará la operación.
2. El controlador contesta aceptando la petición de E/S.
3. El controlador le ordena al dispositivo que lea (para operación de lectura) una cierta cantidad de datos desde una posición determinada del dispositivo a su memoria interna.
4. Cuando los datos están listos, el controlador los copia a la posición de memoria que tiene en sus
registros, incrementa dicha posición de memoria y decrementa el contador de datos pendientes de
transferir.
5. Los pasos 3 y 4 se repiten hasta que no quedan más datos por leer.
6. Cuando el registro de contador está a cero, el controlador interrumpe a la UCP para indicar que la
operación de DMA ha terminado.

Canales de E/S con DMA

Un canal de E/S se puede mejorar si se incluye el concepto de DMA que permite al controlador ejecutar
instrucciones de E/S. Con estos sistemas, las instrucciones de E/S se almacenan en memoria principal y
son ejecutadas ordenando al procesador del canal que ejecute un programa en memoria. Dicho programa se
encarga de designar dispositivos y zonas de memoria de E/S.
Hay dos tipos principales de canales de E/S: canal selector y canal multiplexor. Ambos pueden
interaccionar con varios dispositivos de E/S, pero mientras el canal selector sólo puede transferir datos de
un dispositivo a la vez, el canal multiplexor puede transferir datos de varios dispositivos simultáneamente.

Caches de disco en el controlador

Las caches de datos, tan populares en sistemas operativos, han irrumpido en el mundo de los controladores
de disco con mucha fuerza. La idea es aprovechar la memoria interna de los controladores para leer los
datos por adelantado, evitando muchas operaciones de búsqueda en el disco y sobre todo los tiempos de
latencia necesarios para esperar a que los datos pasen de nuevo bajo las cabezas del disco [Biswas, 19931.
La proximidad espacial permite optimizar la E/S en el ámbito de controlador, ya que en lugar de leer un
sector, o un grupo de ellos, se leen pistas enteras en cada vuelta de disco, lo que permite traer múltiples
bloques de datos en una única operación. En los canales de E/S, donde suele haber mucha memoria interna,
se guardan en memoria varias pistas por cada dispositivo de E/S.
Estos mecanismos permiten optimizar mucho la E/S, especialmente en operaciones de lectura con un
comportamiento conocido. Para evitar afectar al rendimiento de las operaciones que no responden a
patrones de proximidad espacial predecibles, los controladores incluyen instrucciones para desactivar este
mecanismo, siempre que el sistema operativo lo crea conveniente.
Solapamiento de búsquedas y transferencias
Los controladores de disco actuales permiten la conexión de varios dispositivos de E/S y tienen un canal de
comunicaciones con ellos de varios MB. Un controlador SCSI-2 permite conectar hasta ocho dispositivos y
tiene un ancho de banda de 40 MB/segundo. Un problema grave de los dispositivos es que las operaciones
de búsqueda son lentas y, mientras el controlador espera la respuesta, el bus de comunicaciones está vacío
porque no está siendo usado por ningún dispositivo.
Para optimizar el uso del conjunto de los dispositivos, muchos controladores actuales programan las
operaciones de búsqueda en los dispositivos y mientras reciben la respuesta transfieren datos de otros
dispositivos listos para leer o escribir. De esta forma existe paralelismo real entre los dispositivos, lo que
permite explotar al máximo el canal de comunicaciones. ¿Cómo sabe el controlador cuándo ha terminado
la espera? Pues con un sistema similar al de la E/S no bloqueante: programa un temporizador y cuando
vence le pregunta al dispositivo si ya está listo para transmitir.

No hay comentarios:

Publicar un comentario