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:

  1. Eficiencia
    Garantizar que los dispositivos funcionen al máximo de sus capacidades.

  2. 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:

  1. Leer el bit “listo”.
  2. Si está desactivado, esperar un intervalo muy breve (o simplemente seguir en un bucle busy-wait).
  3. 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:

  1. El procesador detiene temporalmente la ejecución actual.
  2. Guarda su contexto.
  3. 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).
  4. 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
Importante

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

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.