Entrada/Salida
Conceptos básicos de E/S
Un periférico contiene una serie de servomecanismos y dispositivos electrónicos que tienen que ser controlados mediante señales eléctricas.
Por ejemplo, las bobinas que mueven el brazo con las cabezas de un disco, el motor paso a paso que mueve la cabeza de un floppy, los diversos motores que mueven el papel en una impresora, etc.
Algunos periféricos primitivos reciben del exterior todas las señales de control de sus mecanismos (ej. floppy) o Los periféricos más avanzados tienen su propia lógica (puede ser hasta un microprocesador) y reciben comandos de alto nivel que él mismo interpreta (ej. disco SCSI, impresoras PostScript) .
Los periféricos no están conectados directamente al bus interno del sistema, sino que necesitan intermediarios: los controladores de E/S.
Dialogan con los periféricos usando señales diferentes a las del bus del procesador (adaptación de señales).
El controlador de E/S es capaz de llevar a cabo secuencias de operaciones de forma autónoma (ej. transferencias de bloques de bytes).
Si hay varios periféricos conectados a un mismo controlador, necesitamos un bus de E/S. Existen diversos estándares de bus de E/S en el mercado orientados a tipos de periféricos distintos. Algunos muy usados son:
Ù SCSI e IDE: dispositivos de almacenamiento de gran
velocidad de transferencia
RS-232: sensores, modems, dispositivos lentos
Centronics: impresoras, scanners
PS/2: ratones, teclados, interfaces de entrada
USB: bus genérico de mediana velocidad. Sustituye a
centronics, RS-232 y PS/2 poco a poco.
Desarrollo de una operación de E/S
La presencia de controladores inteligentes (controlador de E/S y lógica del periférico) permite que la CPU no tenga que intervenir durante el desarrollo de la operación de E/S (paralelismo entre CPU y controladores).
La CPU envía comandos al controlador mediante instrucciones IN y OUT. El controlador envía a su vez comandos a la lógica del periférico.
Secuencia de operación de lectura de un sector de disco:
La CPU envía un comando al controlador SCSI (OUT)
El controlador envía un comando SCSI al disco
La lógica del disco controla los motores y la electrónica de lectura. Se lee un sector (512 bytes) en un buffer del disco
La lógica del disco avisa al controlador de que va a enviar los datos
El controlador va recibiendo los datos y los almacena directamente en memoria mediante DMA
Al terminar, el controlador envia una IRQ a la CPU
La CPU lee el estado final de la operación (IN).
Dispositivos físicos, lógicos y devices
Cada dispositivo requiere un conjunto diferente de operaciones para dialogar con él.
Este conjunto depende del tipo de bus de conexión (IDE, SCSI, USB, ...), del tipo de periférico (discos, cintas magnéticas, scanners, ...), e incluso del fabricante.
Esto requiere porciones de software específico en el sistema para dialogar con cada tipo de periférico: cada una de ellas es un device driver.
Los programadores prefieren tener un solo conjunto de operaciones para cada tipo de periférico, e incluso para todos los tipos, si es posible.
El núcleo ofrece a los procesos una abstracción que unifica todas las variantes de un mismo tipo de periférico, el dispositivo lógico.
Cada device driver ofrece siempre el mismo interfaz genérico de operaciónes sobre el periférico que controla:
Cada device driver se corresponde con un modelo de periférico físico.
Cada dispositivo lógico se corresponde una clase entera de device drivers.
discos duros y CD-ROMs
cintas magneticas
terminales
impresoras
Cada periférico físico asignado a uno lógico constituye una unidad.
El SO ofrece un espacio de nombres para acceder a las unidades de los dispositivos lógicos. En UNIX, son ficheros especiales (devices) bajo el directorio /
Dispositivos físicos, lógicos y devices
Las operaciones que los drivers ofrecen al núcleo son siempre las mismas
Nucleo
Driver IDE
Interfaz de syscalls
Procesos
leer(hdb)
leer(ficheroB)
Driver SCSI
Disco SCSI Disco IDE
leer(hda)
leer(ficheroA)
Comandos IDE Comandos SCSI
Servicios de E/S en el S.O.
El conjunto de operaciones para todos los periféricos es estándar: lectura, escritura,
No todas las operaciones tienen sentido en todos los periféricos.
La redirección de E/S permite programar sin saber que periférico específico modo transferencia, aparcado,verificación de superficie
Modalidades de la E/S
Cruda/cocinada
Cruda: el driver transfiere sin modificaciones toda la información que lee o escribe (ej. disco duro, cinta magnética)
Cocinada: el driver interpreta el contenido que lee o escribe:
Síncrona/Asíncrona
o Síncrona: el proceso queda bloqueado hasta que termina la operación de E/S
Asíncrona: el proceso sale de la syscall y continua su ejecución. El S.O. se encarga de la operación, pero el proceso no sabe cuando acaba. Hay una syscall para preguntar al S.O. el estado de la operación.
Buffering/Spooling: Son técnicas para optimizar la E/S con periféricos lentos.
Buffering: Las datos a escribir son guardados por el S.O. en buffers y escritos de forma asíncrona mientras éste continua (solapamiento de E/S de un proceso con su ejecución)
Spooling: Todos los datos escritos son guardados en un fichero temporal (spool). Cuando el proceso termina, el S.O. se encarga de escribir el fichero en el dispositivo real.
La escritura en el buffering la lleva a cabo el núcleo en las interrupciones (IRQ) de fin de operación del periférico.
Modalidades de la E/S
lo adapta para ser entendido por el periférico (ej. impresoras)
operaciones de control.
Ejemplos de dispositivos lógico:
inicializar, leer, escribir, configurar, ...
Dispositivos físicos, lógicos y devices