Una de las funciones principales del Sistemas Operativos es controlar los dispositivos de E/S: emitir comandos, atrapar interrupciones, manejar errores y ofrecer una interfaz sencilla e independiente del dispositivo.
Hardware de E/S
- Dispositivos de bloque (discos, SSD): datos en bloques direccionables de tamaño fijo.
- Dispositivos de caracteres (teclado, ratón, red): flujo de caracteres no direccionable.
- Controladores de dispositivo: la parte electrónica; el SO habla con el controlador, no con el dispositivo.
Comunicación con el controlador
- Puertos de E/S separados (instrucciones
IN/OUT).
- E/S mapeada a memoria: los registros del controlador aparecen como direcciones de memoria.
- Esquemas híbridos (x86).
DMA (Acceso Directo a Memoria)
El controlador DMA transfiere bloques entre dispositivo y memoria sin ocupar la CPU, y genera una interrupción al terminar.
Interrupciones
Al terminar su trabajo, el dispositivo envía una señal al controlador de interrupciones, que se la pasa a la CPU con un número que indexa el vector de interrupciones. Las interrupciones precisas dejan la máquina en un estado bien definido.
Principios del software de E/S
Metas: independencia del dispositivo, nombres uniformes, manejo de errores lo más cerca posible del hardware, transferencias síncronas (bloqueantes) vs asíncronas, uso de búferes, y dispositivos compartidos vs dedicados.
Tres formas de hacer E/S:
- E/S programada: la CPU hace todo y espera activamente (polling).
- E/S controlada por interrupciones: la CPU hace otra cosa hasta que el dispositivo interrumpe.
- E/S con DMA: el controlador DMA hace la transferencia y sólo interrumpe al final.
Capas del software de E/S
┌──────────────────────────────────────┐
│ Software de E/S en espacio de usuario│ printf, spooling
├──────────────────────────────────────┤
│ Software independiente del dispositivo│ nombres, búferes, errores
├──────────────────────────────────────┤
│ Drivers de dispositivo │ código específico
├──────────────────────────────────────┤
│ Manejadores de interrupciones │ despiertan al driver
├──────────────────────────────────────┤
│ Hardware │
└──────────────────────────────────────┘
- Manejadores de interrupciones: guardan el estado, reconocen la interrupción y desbloquean al driver (con Sistemas Operativos/Semáforos o variables de condición).
- Drivers: código específico del dispositivo, normalmente dentro del Sistemas Operativos/Kernel (o en espacio de usuario en un microkernel).
- Software independiente del dispositivo: interfaz uniforme, búferes, reporte de errores, asignación de dispositivos dedicados, tamaño de bloque uniforme.
- Espacio de usuario: bibliotecas y el spooling (un demonio y un directorio de spool para dispositivos dedicados como la impresora).
Discos
- Discos magnéticos: cilindros, pistas y sectores. Tiempo de acceso = búsqueda + latencia rotacional + transferencia.
- Algoritmos de planificación del brazo: FCFS, SSF (búsqueda más corta primero) y el algoritmo del elevador (SCAN).
- RAID: niveles 0 a 6 para rendimiento y redundancia.
- SSD: sin partes móviles; la planificación del brazo pierde sentido.
Relojes
El reloj de hardware genera interrupciones periódicas (ticks); el software de reloj mantiene la hora, controla quantums para la Sistemas Operativos/Planificación, contabiliza el uso de CPU y gestiona alarmas y temporizadores guardián (watchdog).
Gestión de energía
Apagar o suspender dispositivos inactivos, escalado de voltaje y frecuencia de la CPU.
#sistemas-operativos #tanenbaum #entrada-salida