Software">
Principios de Entrada Salida
Principios de Entrada Salida
Principios de Entrada Salida
Una de las funciones principales de un sistema operativo es el control de todos los dispositivos
de entrada / salida de la computadora. Debe enviar comandos a los dispositivos, detectar las
interrupciones y controlar los errores. El código de E/S representa una fracción significativa
del sistema operativo.
• Periféricos. 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.).
El procesador se comunica con los dispositivos a través de los dispositivos a través de los
puertos de entrada/salida.
En la arquitectura IBM PC, se disponen de 65536 puertos de entrada/salida
Los puertos son de 8-bits pero varios puertos consecutivos pueden ser tratados como
puertos de 16 o 32 bits.
Todo dispositivo conectado al bus de entrada/salida tiene su propio conjunto de puertos.
Los dispositivos de e/s permiten a la CPU relacionarse con el mundo exterior: teclados,
pantallas, impresoras, discos . . .
La comunicación de la CPU con un elemento externo es similar a la comunicación con la
memoria: se leen y escriben datos
El comportamiento es distinto: los datos no siempre están disponibles (Ej. teclado), y el
dispositivo puede no estar preparado para recibirlos (Ej. Impresora).
Al ser distinto el comportamiento los métodos son distintos que para el acceso a
memoria
Estructura de un sistema de e/s
En teoría los dispositivos de e/s se comunicarían con la CPU por los buses del sistema
Dado que son muy heterogéneos sería muy costoso que la CPU los manejase
directamente
Los dispositivos están conectados a una pieza de hardware llamada controlador de
dispositivo (a veces controladora o adaptador)
El controlador de dispositivo admite comandos abstractos de la CPU y se encarga de
transmitirlos al dispositivo (ej. escribir bloque 2534 a disco)
Se libera a la CPU de tareas de muy bajo nivel (escribir datos en cara X del plato Y, en cilindro Z, sector T)
Cada dispositivo hardware de la computadora es manejado por un controlador, el cual posee
un buffer de almacenamiento.
Los controladores avisan al procesador que han finalizado alguna tarea mediante
interrupciones.
Hay casos en que un controlador puede manejar varios dispositivos, por ejemplo los discos.
Los controladores se comunican con la CPU a través de unos registros o puertos.
Generalmente incluyen:
Registros de control Para enviar òrdenes al dispositivo
Registros de estado Para obtener información del estado dispositivo o controlador,
disponibilidad de datos . . .
Registros de datos Pueden ser de entrada, salida o bidireccionales
- Típicamente son registros de 1 a 8 bytes de tamaño.
- Algunos controladores tienen chips FIFO que permiten almacenar pequeñas ráfagas de datos (buffers),
mientras el host (CPU) no los puede ir recibir.
Interrupciones.
Son utilizadas por los dispositivos de entrada-salida para avisar que algo sucedió. Ej se
pulso una tecla.
Son asincrónicas porque algunos dispositivos pueden operar en forma simultánea con el
procesador y no se sabe en qué momento va a suceder la interrupción.
• Interrupciones hardware sincrónicas:
Se producen cuando el procesador realizo alguna operación no valida, como por ejemplo:
división por cero.
No siempre son un problema grave, por ejemplo: el procesador trato de leer una dirección
de memoria inválida, la página estaba en el disco, se debe cargar antes de leerla.
• Interrupciones software.
Son causadas por las llamadas al sistema, que son la interfaz entre la aplicación del
usuario y el hardware.
PRINCIPIOS DEL HARDWARE DE ENTRADA Y SALIDA (E/S)
Los dispositivos de entrada y saluda se pueden dividir de manera general en dos categorías:
dispositivos de bloque y dispositivos de carácter.
• Disco Duro: Los discos duros proporcionan un acceso más rápido a los
datos que los discos flexibles y pueden almacenar mucha más información.
Al ser las láminas rígidas, pueden superponerse unas sobre otras, de modo
que una unidad de disco duro puede tener acceso a más de una deellas.
La mayoría de los discos duros tienen de dos a ocho láminas. Un disco
duro normal gira a una velocidad de 3.600 revoluciones por minuto y las
cabezas de lectura y escritura se mueven en la superficie del disco sobre
una burbuja de aire de una profundidad de 10 a 25 millonésimas de
pulgada. El disco duro va sellado para evitar la interferencia de partículas
en la mínima distancia que existe entre las cabezas y el disco.
Las unidades de entrada y salida constan por lo general de un componente mecánico y otro
electrónico. El componente electrónico se llama controlador de dispositivo de adaptador.
La tarjeta controladora tiene por lo general un conector, en el que se puede conectar el cable
que va al dispositivo en sí. Muchos controladores pueden manejar dos, cuatro y hasta ocho
dispositivos idénticos. Si la interfaz entre el controlador y el dispositivo es estándar, ya sea
un estándar oficial, de tipo ANSI, IEEE o ISO, o bien un estándar de hecho, entonces las
compañías pueden fabricar controladores o dispositivos que se ajusten a esa interfaz.
Es importante la distinción entre controlador y dispositivo por que el sistema operativo casi
siempre trabaja con el controlador y no con el dispositivo. Casi todo el micro y mini
computadoras utilizan el modelo de un bus para la comunicación entre la CPU y los
controladores. Los grandes mainframes utilizan con frecuencia otro modelo, con varios
buses y computadoras especializadas en Entrada y Salida llamadas canales de entrada y
salida que toman cierta carga de entrada y salida fuera de la CPU principal.
La tarjeta controladora casi siempre tiene un conector en el que puede insertarse un cable que
conduce al dispositivo. Muchos controladores pueden manejar dos, cuatro o incluso ocho
dispositivos idénticos. Muchas compañías producen unidades de disco que se ajustan a las
interfaces de controlador de disco IDE (Integrated Drive Electronics) o SCSI (SmalI Computer
System Interface).
La labor del controlador es convertir el flujo de bits en serie en un bloque de bytes y llevar a
cabo cualquier corrección de errores necesaria. Lo común es que el bloque de bytes
ensamble, bit a bit, en un buffer dentro del controlador. Después a verificar la suma y declarar
al bloque libre de errores, se le puede copiar en la memoria principal.
El controlador de una terminal CRT también funciona como un dispositivo de bits en un nivel
igual de bajo.
Lee bytes que contienen caracteres a exhibir en la memoria y genera las señales utilizadas
para modular la luz CRT para que esta se escriba en la pantalla. El controlador también
genera las señales para que la luz CRT vuelva a realizar un trazo horizontal después de
terminar una línea de rastreo, así como las señales para que se vuelva a hacer un trazo
vertical después de rastrear en toda la pantalla. De no ser por el controlador CRT, el
programador del sistema operativo tendría que programar en forma explícita el rastreo
análogo del tubo de rayos catódicos. Con el controlador, el sistema operativo inicializa éste
con pocos parámetros, tales como el número de caracteres por línea y el número de líneas
en la pantalla, para dejar que el controlador se encargue de dirigir en realidad el rayo de luz.
Cada controlador tiene unos cuantos registros que se utiliza para la comunicación con la
CPU. En ciertas computadoras, estos registros son parte del espacio normal de direcciones
de la memoria.
El sistema operativo realiza la entrada y salida al escribir comandos en los registros de los
controladores. Muchos de los comandos tienen parámetros, los cuales también se cargan
de los registros del controlador. Al aceptar un comando, la CPU puede dejar al controlador
y dedicarse a otro trabajo. Al terminar el comando, el controlador provoca la interrupción
para permitir que el sistema operativo obtenga el control de la CPU y verifique los resultados
de la operación. La CPU obtiene los resultados y el estado del dispositivo al leer uno o más
bytes de información de los registros del controlador.
Manejo de Dispositivos de entrada-salida.
Técnica utilizada para dispositivos lentos. El dispositivo deberá tener una bandera que
indica si está ocupado o listo, el procesador entrara en un bucle en el cual consultara ese bit
cada cierto tiempo.
Características:
Es la forma más sencilla de realizar operaciones de E/S
La sincronización se consigue al preguntarle la CPU (poll) al dispositivo si tiene un dato
que entregar o, si es el caso, si está listo para recibir uno.
Se pierde tiempo en preguntar la dispositivo (se pierde más cuanto más a menudo se le
pregunte)
Es lento, e incluso podrían perderse datos si no se le pregunta muy a menudo
El procesador se pasa mucho tiempo dentro de un bucle esperando que los dispositivos
estén listos, por lo tanto, esta técnica es ineficiente. Recordar que uno de los objetivos del
sistema operativo es manejar los recursos de manera eficiente.
(Fuente:Tanembaum, Modern Operating Systems, 3rd ed.)
El procesador y el dispositivo realizan tareas simultáneamente, cuando el dispositivo
termino alguna tarea le avisa al procesador mediante una interrupción. Este método es
eficiente.
Cuando llega la interrupción el S.O. :
Salva el estado de lo que está haciendo
Trasfiere el control a la Rutina de Servicio de dicha interrupción
Ejecuta la Rutina de Servicio de dicha interrupción
Reanuda la ejecución donde fue interrumpida
Dichas rutinas están en memoria en unas direcciones apuntadas por los vectores de
interrupción
Es el S.O., en su proceso de inicialización, el que instala dichas rutinas
Muchos controladores, en particular los correspondientes a los dispositivos de bloque,
permiten el acceso directo a memoria o DMA.
Este método se utiliza para aquellos dispositivos capaces de transmitir o recibir datos a
alta velocidad, como por ejemplo los discos.
• Memoria principal.
Es el único medio de almacenamiento donde el procesador puede acceder directamente.
• Almacenamiento secundario.
Son medios de almacenamientos de gran capacidad y no
volátiles, que sirven para extender la memoria principal.
• Operación dual-mode.
Existen dos modos de ejecución de un programa, modo kernel o supervisor y modo
usuario.
Los que se ejecutan en modo usuario no tienen acceso a los recursos ni a las instrucciones
privilegiadas.
• Protección de I/O.
Todas las instrucciones de entrada-salida son privilegiadas, se debe asegurar que un
programa de aplicación se ejecute en modo usuario.
• Protección de memoria
Se debe proveer protección de memoria por lo menos en la tabla de vectores de
interrupciones y las rutinas de servicio de interrupciones.
El procesador posee dos registros que indican el rango de direcciones de memoria donde el
proceso puede acceder.
En la práctica la protección de memoria la realiza una parte del sistema operativo llamada
Gestor de memoria.
ESTRUCTURA DE UN SISTEMA OPERATIVO
Las llamadas al sistema son interfaces de programación que sirven para poder invocar los
servicios que el sistema operativo nos ofrece. Estas llamadas se encuentran escritas en
lenguajes de alto nivel como C y C++. En general, las llamadas a sistemas son accesadas
mediante una API (interfaz de programación de aplicaciones), en vez de invocarlas
directamente, de ésta manera se hace más fácil el trabajo para un programador de
aplicaciones.
Las API especifica un conjunto de funciones que el programador puede utilizar, incluyendo
los parámetros que son pasados a cada función y que retornan valores que el programador
puede esperar..
Las API más comunes que existen son tres:
Windows API (Windows application programming interface): son un conjunto de funciones residentes
en bibliotecas (generalmente dinámicas, también llamadas DLL por sus siglas en inglés,
término usado para referirse a éstas en Windows) que permiten que una aplicación corra
bajo un determinado sistema operativo.
o Algunos tipos de datos utilizados por las funciones no se definen como parte de la
implementación. Estos tipos se encuentran definidos en el archivo de cabecera y
acaban con el sufijo _t. o Los nombres de las funciones en POSIX son en general
cortos y con todas sus letras en minúsculas, por ejemplo fork (para crear un nuevo
proceso), read (para leer datos de un archivo), close (para cerrar un archivo).
o Las funciones, normalmente, devuelven cero si se ejecutaron con éxito o -1 en caso
de error. o La mayoría de los recursos gestionados por el sistema operativo se
referencian mediante descriptores. Un descriptor es un número entero mayor o igual
que cero.
Java API para la Java Virtual Machine (JVM): brinda funciones de uso común para el
programador como por ejemplo, creación y manejo de elementos de GUI, manejo de
archivos, funciones de red, comunicación entre programas, además de existir dentro de su
Librería clases gráficas (awt y swing), las cuales permiten crear objetos gráficos
comunesaltamente configurables y con una arquitectura independiente de la plataforma.
#include <stdio.h>
main()
{
printf"Hello World\n");
}