Buses, interrupciones y E/S
Un procesador que tuviera que preguntarle al disco si ya terminó no haría nada más. Las interrupciones invierten la relación: el dispositivo avisa, y eso es lo que hace posible la multitarea.
Para este tema conviene tener claro:Ciclo de instrucción y camino de datos
El procesador es órdenes de magnitud más rápido que cualquier cosa a la que esté conectado. Si tuviera que esperar al disco, al teclado o a la red mirando si ya están listos, pasaría la vida esperando. Las interrupciones son la solución, y de paso son la base de la multitarea.
El bus y los registros del dispositivo
Los dispositivos se conectan por buses: caminos compartidos que llevan direcciones, datos y señales de control. Cada dispositivo tiene registros —de estado, de control, de datos— a los que el procesador accede.
Hay dos formas de llegar a ellos. Con E/S mapeada en memoria, esos registros ocupan direcciones del espacio de memoria y se leen con instrucciones comunes. Con E/S por puertos, hay instrucciones específicas y un espacio aparte. La primera es la dominante hoy.
Antes de seguir, predecí
Preguntar hasta que conteste
La forma más simple de esperar a un dispositivo es el sondeo: un ciclo que lee el registro de estado hasta que diga “listo”. Funciona, es trivial y quema el procesador entero en la espera.
Sigue siendo la opción correcta en dos casos: cuando la espera es de unos pocos microsegundos —el costo de atender una interrupción sería mayor— y en sistemas embebidos muy chicos. Para todo lo demás, desperdicia.
Se pide una lectura al disco. Va a tardar unos milisegundos, que para el procesador son millones de ciclos.
Que avise el dispositivo
Con interrupciones, el procesador pide la operación y sigue trabajando. Cuando el dispositivo termina, levanta una señal: el procesador termina la instrucción en curso, guarda su estado, y salta a una rutina de atención indicada por una tabla de vectores.
Es una llamada a función forzada desde afuera. La rutina debe ser corta —atiende con las interrupciones deshabilitadas o restringidas— y por eso los controladores dividen el trabajo: lo mínimo en la interrupción, el resto diferido a un contexto normal.
Copiar sin gastar el procesador
Queda un problema: aunque no espere, el procesador sigue copiando byte por byte entre el dispositivo y la memoria. Para un bloque de disco eso es carísimo.
El acceso directo a memoria lo resuelve: un controlador aparte hace la transferencia por su cuenta y recién al terminar interrumpe. El procesador sólo indica dirección, tamaño y destino. Es lo que hace viable mover gigabytes sin comerse la CPU, y agrega un detalle importante: como el DMA escribe en memoria sin pasar por la caché, hay que mantener la coherencia.
El mismo mecanismo, para eventos internos
El mismo mecanismo sirve para eventos internos, y ahí está la conexión con el sistema operativo. Una división por cero, un acceso a una dirección inválida o un fallo de página generan excepciones que usan la misma maquinaria.
Y las llamadas al sistema son interrupciones provocadas a propósito: el programa ejecuta una instrucción especial que transfiere el control al núcleo, cambiando de modo usuario a modo privilegiado. Esa transición controlada es lo que impide que un programa cualquiera toque el hardware directo.
El temporizador es lo que hace posible la multitarea
La pieza que faltaba para la multitarea es el temporizador. Un dispositivo que interrumpe periódicamente le devuelve el control al sistema operativo aunque el programa en ejecución no lo ceda.
Sin eso, un ciclo infinito colgaría la máquina entera: es exactamente la diferencia entre multitarea cooperativa y expropiativa. Una interrupción de reloj cada pocos milisegundos es lo que permite que el planificador exista.
Del hardware al código que escribimos
| En hardware | En software | El patrón es el mismo |
|---|---|---|
| Sondeo | consultar en un ciclo | simple y quema recursos |
| Interrupción | una devolución de llamada, un evento | no cuesta nada mientras no pasa |
| DMA | transferencia sin copiar por el medio | el dato no pasa por quien coordina |
| Rutina de atención | un manejador que tiene que ser corto | lo pesado se difiere |
| Prioridad de interrupción | cola de prioridad de eventos | lo urgente primero |
Cierre
Sondeo cuando la espera es mínima; interrupciones para que el dispositivo avise; DMA para que la transferencia no pase por el procesador. El mismo mecanismo atiende excepciones y llamadas al sistema, y la interrupción del temporizador es lo que hace posible expropiar la CPU.
Autoevaluación
¿Lo entendiste?
Práctica