dispositivos de entrada-salida

dispositivos de entrada-salida

domingo, 11 de mayo de 2014

Estructuras de datos de un driver

Las rutinas de un driver para dar un correcto servicio a las peticiones de entrada / salida necesitan para cada dispositivo una serie de datos que se encuentran en estructuras de datos en forma de tabla de manera que su composición depende del sistema operativo, aunque tienen forma y nombres similares a los siguientes:

Bloque de control del driver (BCD)

Es la representación del driver desde el punto de vista del sistema operativo. Contiene aquellos parámetros que son susceptibles de ser variados dinámicamente y aquellos que definen el tipo de dispositivo que puede ser atendido por el driver. Los datos que suele contener son:

-Dirección del siguiente BCD. Nombre del driver. 
-Dirección de comienzo de los bloques de control de unidades (BCU) que controle el driver. 
-Número de unidades a servir. 
-Dirección de comienzo de la rutina de inicialización del driver. 
-Estado del driver (On/off line). 
-Dirección de comienzo de la cola de bloques de entrada / salida (BES). 
-Dirección del BES que está siendo servido. 
-Variables particulares del driver.

Bloque de control de la unidad (BCU)

Cada dispositivo físico se relaciona desde el punto de vista del sistema operativo como una unidad dentro del tipo al que le corresponda y es definido e identificado por el sistema operativo por medio de su BCU. En general, contiene los siguientes datos:

-Dirección del siguiente BCU del driver. 
-Número de unidad. 
-Estado de la unidad. 
-Número del vector de interrupción asociado. 
-Dirección de la rutina de gestión de la interrupción. 
-Dirección del puerto (port) de entrada / salida. 
-Dirección del BCD al que pertenece. 
-Dirección del PCB del proceso que tiene reservada esta unidad. 
-Dirección del comienzo de la cola de bloques de entrada / salida (BES). 
-Dirección del BES que está siendo servido. 
-Características de la unidad. 
-Variables particulares del drive.

Paquete de petición de entrada/salida (PES)

Cuando un proceso de usuario intenta hacer una operación de entrada/salida, el sistema operativo crea un paquete asociado a dicho proceso y a dicha petición para ser tratado por el driver. Este paquete se coloca en una cola prioritaria para ser atendido por el driver al que va dirigido. Los datos que normalmente contiene son:

-Dirección del siguiente PES en la cola. 
-Prioridad de la petición de entrada/salida. 
-Proceso que ha lanzado la petición. 
-Dirección dónde devolver el resultado de la petición. 
-Función a realizar (entrada o salida). 
-Identificador del dispositivo.
-Identificador de la unidad. Dirección de la lista de parámetros de entrada de la llamada al sistema operativo.


Operaciones de Entrada /salida

Tanto en la E/S programada como la basada en interrupciones, el CPU 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 el CPU y la E/S consiste en que el controlador del dispositivo se pueda encargar de efectuar la transferencia de datos, liberando de este trabajo al CPU, e interrumpirlo 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).

Si se lee el disco sin DMA: 

-El controlador lee en serie el bloque (uno o más sectores) de la unidad:

     - La lectura es bit por bit.
     - Los bits del bloque se graban en el buffer interno del controlador. 

-Se calcula la suma de verificación para corroborar que no existen errores de lectura. 
-El controlador provoca una interrupción. 
-El S. O. lee el bloque del disco por medio del buffer del controlador:
     
     -La lectura es por byte o palabra a la vez.
     -En cada iteración de este ciclo se lee un byte o una palabra del registro del controlador y se almacena en memoria. 

-Se desperdicia tiempo del CPU.


DMA se ideó para liberar al CPU de este trabajo de bajo nivel.
El CPU le proporciona al controlador: 

-La dirección del bloque en el disco. 
-La dirección en memoria a donde debe ir el bloque. 
-El número de bytes por transferir.

Luego de que el controlador leyó todo el bloque del dispositivo a su buffer y de que corroboró la suma de verificación: 

-Copia el primer byte o palabra a la memoria principal. 
-Lo hace en la dirección especificada por medio de la dirección de memoria de DMA. 
-Incrementa la dirección DMA y decrementa el contador DMA en el número de bytes que acaba de transferir. 
-Se repite este proceso hasta que el contador se anula y por lo tanto el controlador provoca una interrupción. 
-Al iniciar su ejecución el S. O. luego de la interrupción provocada, no debe copiar el bloque en la memoria, porque ya se encuentra ahí.


El controlador necesita un buffer interno porque una vez iniciada una transferencia del disco: 
-Los bits siguen llegando del disco constantemente. 
-No interesa si el controlador está listo o no para recibirlos. 
-Si el controlador intentara escribir los datos en la memoria directamente:

     -Tendría que recurrir al bus del sistema para c / u de las palabras (o bytes) transferidas.
     -El bus podría estar ocupado por otro dispositivo y el controlador debería esperar.
     -Si la siguiente palabra llegara antes de que la anterior hubiera sido almacenada, el controlador la tendría que almacenar en alguna parte.

Si el bloque se guarda en un buffer interno:

-El bus no se necesita sino hasta que el DMA comienza. 
-La transferencia DMA a la memoria ya no es un aspecto crítico del tiempo.

Los controladores simples no pueden atender la e / s simultánea:

-Mientras transfieren a la memoria, el sector que pasa debajo de la cabeza del disco se pierde; es decir que el bloque siguiente al recién leído se pierde. 
-La lectura de una pista completa se hará en dos rotaciones completas, una para los bloques pares y otra para los impares. 
-Si el tiempo necesario para una transferencia de un bloque del controlador a la memoria por medio del bus es mayor que el tiempo necesario para leer un bloque del disco:

     -Sería necesario leer un bloque y luego saltar dos o más bloques.
     -El salto de bloques:

               -Se ejecuta para darle tiempo al controlador para la transferencia de los datos a la memoria.
               -Se llama separación.
               -Al formatear el disco, los bloques se numeran tomando en cuenta el factor de separación.
               -Esto permite al S. O.:
                        
                        -Leer los bloques con numeración consecutiva. 
                        -Conservar la máxima velocidad posible del hardware.



Instrucciones máquina que el CPU puede utilizar para E/S


-START I/O Inicia una operación de E/S. El campo de dirección de la instrucción se emplea para especificar el canal y el dispositivo de E/S que participa en la operación.
- HALT I/O Finaliza la operación del canal.
-TEST CHANNEL Prueba el estado del canal.
-TEST I/O Prueba el estado del canal, el subcanal y el dispositivo de E/S.


Ejecución de instrucciones e interrupciones y estructura de E/S.


Interrupciones de E/S:


Para iniciar una operación de E/S por parte de un proceso del usuario:

-La CPU carga los registros en el controlador del dispositivo.
-El controlador examina los registros para saber qué acción realizar.
-Tras realizar la acción el controlador informa de ello a la CPU.
-Esa comunicación se efectúa generando una interrupción.

Al iniciar una E/S hay dos alternativas:

-E/S síncrona: el SO espera a que termine la E/S. 
-E/S asíncrona: el SO devuelve el control al programa del usuario sin esperar a que se complete la E/S.

Funcionamiento asíncrono + multiprogramado:

-El usuario solicita E/S mediante llamada al sistema.
-El SO tramita la operación. 
-El SO entrega el control a otro proceso (mientras se desarrolla la E/S). 
-Cuando la E/S termina genera una interrupción que:

     -Interrumpe el proceso actual.

     -Provoca la aparición del SO, que reactiva el proceso que hizo la llamada.

Espacio de usuario para software de E/S

La mayoría del software de e / s está dentro del S. O. Una pequeña parte consta de bibliotecas ligadas entre sí con los programas del usuario. La biblioteca estándar de e / s contiene varios procedimientos relacionados con e / s y todos se ejecutan como parte de los programas del usuario. Otra categoría importante de software de e / s a nivel usuario es el sistema de spooling. 

El spooling es una forma de trabajar con los dispositivos de e /s de uso exclusivo en un sistema de multiprogramación:

-El ejemplo típico lo constituye la impresora de líneas. 
-Los procesos de usuario no abren el archivo correspondiente a la impresora. 
-Se crea un proceso especial, llamado demonio en algunos sistemas. 
-Se crea un directorio de spooling.

Para imprimir un archivo: 

-Un proceso genera todo el archivo por imprimir y lo coloca en el directorio de spooling. 
-El proceso especial (demonio), único con permiso para utilizar el archivo especial de la impresora, debe imprimir los archivos en el directorio. 
-Se evita el posible problema de tener un proceso de usuario que mantenga un recurso tomado largo tiempo.

Un esquema similar también es aplicable para la transferencia de archivos entre equipos conectados: Un usuario coloca un archivo en un directorio de spooling de la red. Posteriormente, el proceso especial lo toma y transmite. Un ejemplo son los sistemas de correo electrónico.


Demonio o Daemon (Disk And Execution MONitor)


Suena Extraño hablar de "demonios" en los Sistemas Operativos, pero es la Traducción literal que se le puede dar a los Procesos que se ejecutan de manera no "Vista" u Oculta por el Usuario dentro del sistema, pero que se están ejecutando y que pueden ser controlados por el Administrador. En Sistemas como Windows NT son llamados "Servicios" y son los equivalentes de Windows para los demonios de UNIX, tienen el mismo Propósito. Su contraparte en Sistemas del tipo DOS es algo complicado explicar, puesto que son Monousuario y Monoproceso, es decir que solo admiten un Usuario y que solo "ejecutan" un solo programa dentro de la Memoria, (Olvidando el Kernel, Config.sys, Autoexec.bat y sin olvidar el Command.com), en estos casos se manejaban los TSR (Terminate and Stay Resident) [Termina y Sigue Residente] que era la forma más primitiva de Multitarea en DOS. En Sistemas como el Mac OS, son llamados extensiones del sistema. Hay que diferenciar entre una Aplicación activa y entre un Demonio ó Entre un Servidor Software y un Demonio, la Aplicación activa ó programa simplemente es una Aplicación que se carga en la memoria y que tiene fines específicos como un Procesador de Palabras, un Reproductor, un Navegador, etc. El demonio se ejecuta en la Memoria pero sin "Interface" y las únicas opciones que posee son las de iniciar, reiniciar o detenerse. (Esto solamente dentro de la Sesión). Un Servidor es una Aplicación en Segundo Plano (como el demonio) pero que cuenta con un interface y es configurable y que trabaja directamente con el Kernel. Un Ejemplo es un Servidor FTP. Lo demonios son programables, ya sea Iniciarlos o deternerlos de manera manual, editando algún archivo, haciendo algún Script ó programándolos para realizar determinadas tareas. Los demonios se distinguen porque están presentes en áreas sensibles del sistema. En los SO UNIX-like los demonios se arrancan cuando el Sistema Operativo

inicia y como a cualquier aplicación se les asigna un PID (Process ID) [Identificación de Procesos] es un número que Identifica al programa hasta que termina.

Estructuras de datos para manejo de dispositivos.

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 E/S 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.

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).
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 una bandera que indica que hay datos en el buffer del teclado.

Las interrupciones deben ocultarse en el S. O.: 
-
Cada proceso que inicie una operación de e / s se bloquea hasta que termina la e / s y ocurra la interrupción. 
-El procedimiento de interrupción realiza lo necesario para desbloquear el proceso que lo inició.

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 datos. 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.



Cada controlador posee uno o más registros de dispositivos: 


-Se utilizan para darle los comandos. 
-Los manejadores de dispositivos proveen estos comandos y verifican su ejecución adecuada.

La labor de un manejador de dispositivos es la de: 

-Aceptar las solicitudes abstractas que le hace el software independiente del dispositivo. 
-Verificar la ejecución de dichas solicitudes.

Si al recibir una solicitud el manejador está ocupado con otra solicitud, agregará la nueva solicitud a una cola de solicitudes pendientes.

La solicitud de E/S, por ejemplo para un disco, se debe traducir de términos abstractos a términos concretos: El manejador de disco debe:

- Estimar el lugar donde se encuentra en realidad el bloque solicitado.
- Verificar si el motor de la unidad funciona.
- Verificar si el brazo está colocado en el cilindro adecuado, etc.
- Resumiendo: debe decidir cuáles son las operaciones necesarias del controlador y su orden.
- Envía los comandos al controlador al escribir en los registros de dispositivo del mismo.
- Frecuentemente el manejador del dispositivo se bloquea hasta que el controlador realiza cierto trabajo; una interrupción lo libera de este bloqueo.
- Al finalizar la operación debe verificar los errores.
- Si todo esta en orden transferirá los datos al software independiente del dispositivo.
- Regresa información de estado sobre los errores a quien lo llamó.
- Inicia otra solicitud pendiente o queda en espera.

miércoles, 7 de mayo de 2014

Aquí un vídeo para comprender un poco mejor cuales son los dispositivos de entrada-salida (e/s).


Modelos de direccionamiento.

Para empezar una operación de e/s, el CPU 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 el CPU ejecuta operaciones port 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.
Ejemplos de controladores, sus direcciones de e/s y sus vectores de interrupción en la PC IBM pueden verse en la siguiente tabla.


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.

Controladores/Drivers de Dispositivos.

Las unidades de e/s generalmente constan de: 

-Un componente mecánico (Hardware).

-Un componente electrónico: el controlador del dispositivo o tarjeta (Driver/Controlador).

Muchos controladores pueden manejar más de un dispositivo, a su vez el SO generalmente trabaja con el controlador y no con el dispositivo.

Cada controlador posee registros que utiliza para comunicarse con el CPU:

-Pueden ser parte del espacio normal de direcciones de la memoria: e/s mapeada a memoria.

-Pueden utilizar un espacio de direcciones especial para la e/s, asignando a cada controlador una parte
de él.

¿Como se realiza la e/s?

El S. O. realiza la e/s al escribir comandos en los registros de los controladores; los parámetros de los
comandos también se cargan en los registros de los controladores.
Al aceptar el comando, el CPU puede dejar al controlador y dedicarse a otro trabajo.
Al terminar el comando, el controlador provoca una interrupción para permitir que el S. O.:
-Obtenga el control del CPU.
-Verifique los resultados de la operación.
El cpu obtiene los resultados y el estado del dispositivo al leer uno o más bytes de información de los
registros del controlador.

¿Que es el sistema de e/s?

El sistema de e/s es la parte del sistema operativo que se ocupa de facilitar el manejo de los dispositivos de e/s ofreciendo una visión lógica simplificada de los mismos que pueda ser usada por otros componentes del sistema operativo (como el sistema de archivos) o incluso por el usuario. Mediante esta visión lógica se ofrece a los usuarios un mecanismo de abstracción que oculta todos los detalles relacionados con los dispositivos físicos, así como del funcionamiento real de los mismos. 
El sistema operativo debe controlar el funcionamiento de todos los dispositivos de e/s para alcanzar los siguientes objetivos:

-Facilitar el manejo de los dispositivos de e/s. Para ello debe ofrecer una interfaz entre los dispositivos y el resto del sistema que sea sencilla y fácil de utilizar.

-Optimizar la e/s del sistema, proporcionando mecanismos de incremento de prestaciones donde sea necesario.

-Permitir la conexión de dispositivos nuevos de e/s, solventando de forma automática su instalación usando mecanismos del tipo plug&play.



Dispositivos de e/s: clasificación y características.

Se pueden clasificar en dos grandes categorías según el tipo de transmisión de información: dispositivos de bloque y dispositivos de caracter. 

Dispositivos de bloque. 

Las principales características de los dispositivos de bloque son:
-La información se almacena en bloques de tamaño fijo.
-Cada bloque tiene su propia dirección. 
-Los tamaños más comunes de los bloques van desde los 128 bytes hasta los 1,024 bytes. 
-Se puede leer o escribir en un bloque de forma independiente de los demás, en cualquier momento. 
-Un ejemplo típico de dispositivos de bloque son los discos.

Dispositivos de caracter.

 Las principales características de los dispositivos de caracter son: 
-La información se transfiere como un flujo de caracteres, sin sujetarse a una estructura de bloques. 
-No se pueden utilizar direcciones. No tienen una operación de búsqueda. 
-Un ejemplo típico de dispositivos de caracter son las impresoras de línea, terminales, interfaces de una red, ratones, etc.


Otras clasificaciones.


Algunos dispositivos no se ajustan a los esquemas de clasificación anteriores, por ejemplo los relojes, que no tienen direcciones por medio de bloques y no generan o aceptan flujos de caracteres.

Los dispositivos de e/s también se pueden agrupar en tres grandes grupos según su función: dispositivos de interfaz de usuario, dispositivos de almacenamiento y dispositivos de comunicación.


Dispositivos de interfaz de usuario.

Se llama así a los dispositivos que permiten la comunicación entre los usuarios y la computadora. Dentro de este grupo se incluyen todos los dispositivos que sirven para proporcionar interfaz con el usuario, tanto para entrada (ratón, teclado, etc.) como para salida (impresoras, pantalla, etc.). Existen periféricos menos habituales, pero más sofisticados, tales como un escáner, lectores de huella digital, lectores de cinta magnética, instrumentos musicales digitales (MIDI), etc.


Dispositivos de almacenamiento.

Se usan para proporcionar almacenamiento no volátil de datos y memoria. Su función primordial es abastecer de datos y almacenamiento a los programas que se ejecutan en el CPU. Según su capacidad y la inmediatez con que se puede acceder a los datos almacenados en estos dispositivos, se pueden dividir en almacenamiento secundario (discos y memorias flash) y terciario (cintas).


Dispositivos de comunicaciones.

Permiten conectar a la computadora con otras computadoras a través de una red. Los dos tipos de dispositivos más comunes de esta clase son los módems, para comunicación vía red telefónica, y las tarjetas de interfaz a la red, para conectar la computadora a una red de área local.



¿Que son los dispositivos de entrada-salida (e/s)?

Una de las funciones principales de un S. O. es el control de todos los dispositivos de e/s de la computadora.


Las principales funciones relacionadas son: 


-Enviar comandos a los dispositivos. 
-Detectar las interrupciones. 
-Controlar los errores. 
-Proporcionar una interfaz entre los dispositivos y el resto del sistema.

El código de e/s representa una fracción significativa del sistema operativo.
El uso inapropiado de los dispositivos de e/s frecuentemente genera ineficiencias del sistema, lo que afecta al performance global.