9 Introducción a la Gestión de Entrada/Salida
La gestión de entrada y salida (I/O, por sus siglas en inglés) es una función esencial de todo sistema operativo: permite la comunicación entre los programas y los dispositivos externos, como discos duros, teclados, monitores o impresoras.
9.1 Rol del Sistema Operativo en la I/O
Los periféricos deben intercambiar datos con la memoria y la CPU, pero no resulta práctico —ni seguro— que los procesos se conecten directamente a ellos. Para resolver esta complejidad, el sistema operativo actúa como intermediario, ocultando los detalles técnicos de cada dispositivo y ofreciendo a los programas una interfaz uniforme.
Gracias a esta gestión centralizada:
- Los procesos pueden realizar operaciones de lectura y escritura sin preocuparse por las diferencias internas de cada periférico.
- La I/O posibilita tanto tareas sencillas, como introducir texto desde el teclado, como operaciones más complejas, por ejemplo, transferir archivos entre un disco y una impresora.
9.2 Objetivos Principales de la Gestión de I/O
El objetivo principal de la gestión de entrada y salida es doble:
Eficiencia
Garantizar que los dispositivos funcionen al máximo de sus capacidades.Multiplexación
Coordinar las solicitudes de entrada y salida de los múltiples procesos que pueden ejecutarse simultáneamente.
9.3 Relación con el Hardware: Controladores, Puertos y Buses
Para que el sistema operativo dialogue con el hardware necesita tres piezas clave: controladores, puertos y buses. Juntos forman el puente físico‑lógico que hace posible la I/O.
9.3.1 Controladores de Dispositivos
Un controlador (driver) es un programa especializado que traduce las llamadas genéricas del sistema operativo en comandos que el dispositivo entiende y viceversa.
Ejemplo:
Al imprimir un documento, la aplicación invoca la API de impresión del sistema; el kernel delega la petición al controlador de la impresora, que transforma las órdenes en el protocolo exacto que la impresora admite.
Los controladores permiten que el sistema operativo trate a dispositivos muy distintos de forma coherente y uniforme.
9.3.2 Puertos
Un puerto es el punto de conexión a través del cual fluye la información entre el sistema y el dispositivo. Puede ser:
- Físico: conectores USB, HDMI, SATA, PCIe, etc.
- Lógico: rangos de direcciones de E/S o regiones mapeadas en memoria (MMIO) reservadas al dispositivo.
Analogía:
El puerto es la “puerta” asignada a cada mensajero; el sistema sabe que para hablar con el disco debe enviar mensajes por la puerta SATA 1, por ejemplo.
9.3.3 Buses
Los buses son canales que transportan información entre CPU, memoria y dispositivos. En una arquitectura típica distinguimos:
Tipo de bus | Qué transporta | Función principal |
---|---|---|
Bus de datos | Bits de información | Mover los datos propiamente dichos |
Bus de direcciones | Posiciones de memoria o registros de I/O | Indicar dónde leer o escribir |
Bus de control | Señales de mando (lectura, escritura, reloj, interrupciones) | Coordinar el tráfico y la sincronización |
Analogía:
Imagina una red de autobuses; unos llevan pasajeros (datos), otros indican en qué parada bajar (direcciones) y otros dan las órdenes al conductor (control).
Estos tres buses, combinados con controladores y puertos, permiten que el sistema operativo gestione la I/O de forma segura y eficiente, aun cuando varios dispositivos estén activos a la vez.
9.4 Métodos de Atención a Dispositivos
Una vez que el sistema operativo sabe dónde está cada dispositivo (controladores, puertos y buses), todavía falta decidir cómo enterarse de que un dispositivo necesita atención. Existen dos enfoques clásicos:
9.4.1 Polling
Polling es un mecanismo en el que el sistema operativo (o el propio procesador) revisa de forma periódica el registro de estado de un dispositivo para saber si ya completó la operación solicitada. El ciclo típico es:
- Leer el bit “listo”.
- Si está desactivado, esperar un intervalo muy breve (o simplemente seguir en un bucle busy-wait).
- Volver a leer, y así sucesivamente hasta que el bit cambie a “listo”.
Ventajas:
- Sencillo de implementar.
- Da al kernel control total sobre el momento de la consulta.
Desventajas:
- Consume tiempo de CPU mientras la espera se produce.
- Solo resulta eficiente con periféricos extremadamente rápidos o en sistemas muy simples donde la carga de trabajo es reducida.
9.4.2 Interrupciones
Las interrupciones funcionan al revés: cuando un dispositivo termina su tarea, envía una señal eléctrica (IRQ) al controlador de interrupciones, quien a su vez notifica a la CPU. El proceso es el siguiente:
- El procesador detiene temporalmente la ejecución actual.
- Guarda su contexto.
- Salta a una rutina de servicio (ISR) que atiende el dispositivo (por ejemplo, leyendo los datos recién llegados o confirmando la finalización de la operación).
- Restaura el contexto y continúa donde se interrumpió.
Ventajas:
- Libera a la CPU mientras el dispositivo trabaja.
- Es el método preferido en sistemas multitarea.
Desventajas:
- Requiere más hardware y código (tablas de vectores, prioridades, máscaras).
- Añade un pequeño costo de cambio de contexto en cada interrupción.
9.5 Interfaz entre procesador y periférico
En un sistema informático, la interfaz entre el procesador (CPU) y los dispositivos periféricos es esencial para permitir la comunicación entre componentes que operan con tecnologías y velocidades muy distintas.
La CPU funciona de forma puramente electrónica, mientras que muchos periféricos tienen una naturaleza electromecánica o electromagnética, como impresoras, discos o pantallas. Esta diferencia fundamental en el modo de operación hace imposible que el procesador interactúe directamente con los periféricos sin una capa intermedia que traduzca y sincronice sus comunicaciones.
9.5.1 🔌 ¿Por qué se necesita una interfaz?
La interfaz entre el procesador y los periféricos resuelve varios desajustes técnicos y funcionales, como se muestra en la siguiente tabla:
Diferencia | CPU | Periféricos |
---|---|---|
Naturaleza | Electrónica digital | Electromecánica o electromagnética |
Velocidad de operación | Alta | Baja |
Formato de datos | Codificado para memoria y CPU | Varía según el dispositivo |
Modo de funcionamiento | Sincrónico, basado en reloj | Asíncrono, según eventos físicos |
Protocolos y control | Estandarizados | Propios de cada periférico |
Sin esta interfaz, la CPU no podría comunicarse con los dispositivos de forma segura ni confiable.
El sistema operativo y el hardware del controlador deben coordinar el acceso, la sincronización y la traducción de datos.
9.5.2 🧩 ¿Qué incluye una interfaz?
Una interfaz típica está compuesta por:
- Controlador del dispositivo: Hardware o software que adapta las señales del periférico a las requeridas por la CPU.
- Registros de control y datos: Sirven como intermediarios para almacenar instrucciones, estados y datos en tránsito.
- Líneas de control y estado: Indicadores eléctricos que permiten saber si un periférico está listo, ocupado o en error.
9.6 Software de control de Entrada/Salida
El software de control de entrada/salida (E/S) es la parte del sistema operativo encargada de gestionar las operaciones de comunicación entre los procesos del sistema y los dispositivos periféricos. Esta capa de software abstrae las diferencias entre los distintos tipos de hardware, ofreciendo una interfaz uniforme y eficiente para realizar operaciones de E/S.
9.6.1 🎯 Objetivos principales
El software de E/S cumple funciones críticas para el funcionamiento estable y eficiente del sistema:
- 📚 Abstracción del hardware: Proporciona una interfaz común para los dispositivos, de modo que los programas puedan realizar operaciones de E/S sin preocuparse por los detalles físicos del hardware.
- 🧩 Gestión de controladores (device drivers): Estos módulos específicos permiten al sistema operativo comunicarse con distintos periféricos traduciendo comandos genéricos a instrucciones concretas del dispositivo.
- 🔄 Sincronización y planificación: Coordina múltiples peticiones de E/S de diferentes procesos, evitando conflictos y optimizando el uso de los recursos.
- 🛡️ Manejo de interrupciones: Detecta y responde a eventos generados por los dispositivos (por ejemplo, “se completó la lectura”) sin que el procesador tenga que esperar activamente.
9.6.2 🛠️ Técnicas de mejora del rendimiento
Para asegurar operaciones rápidas y fluidas, el sistema operativo implementa mecanismos como:
- Buffering: Almacena temporalmente los datos en una zona intermedia (buffer) mientras se completa la transferencia.
- Caching: Guarda en memoria los datos más utilizados para evitar accesos repetidos a dispositivos lentos.
- Spooling: Acumula trabajos en cola (por ejemplo, trabajos de impresión) para ser procesados secuencialmente cuando el dispositivo esté disponible.
Ejemplo:
Cuando un usuario imprime un documento, este no se envía directamente a la impresora. El sistema operativo lo guarda en una cola (spool) y lo va enviando cuando el dispositivo esté listo, permitiendo al usuario seguir trabajando mientras tanto.