Atlasingeniería

Arquitectura y sistemas operativosArquitectura del procesadorTema 5

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í

Un dispositivo lento y el procesador preguntándole cada tanto si terminó. ¿Qué problema tiene?

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.

1 / 5
Seguí la fila del procesador en los tres casos. Con sondeo está ocupado sin hacer nada útil; con interrupción se va a otra cosa y vuelve; con DMA ni siquiera copia los datos. Son tres formas de pagar la misma espera, y la diferencia se mide en trabajo perdido.

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 hardwareEn softwareEl patrón es el mismo
Sondeoconsultar en un ciclosimple y quema recursos
Interrupciónuna devolución de llamada, un eventono cuesta nada mientras no pasa
DMAtransferencia sin copiar por el medioel dato no pasa por quien coordina
Rutina de atenciónun manejador que tiene que ser cortolo pesado se difiere
Prioridad de interrupcióncola de prioridad de eventoslo urgente primero
La tabla no es una analogía: las abstracciones asincrónicas de cualquier lenguaje moderno son la misma idea que resolvió el hardware décadas antes.

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?

¿Cuál es el problema del sondeo?
¿Qué es la E/S mapeada en memoria?
¿Por qué las interrupciones son la base de la multitarea?
¿Qué lleva un bus?