Entrada/Salida
Entre la CPU y cada periférico hay un módulo que hace de intérprete, y tres maneras de hacer llegar los datos: preguntar, esperar a que te avisen, o no intervenir.
Introducción
La CPU lee una palabra de la RAM en 80 nanosegundos.
Un teclado envía una tecla cuando a alguien se le ocurre pulsarla.
Un disco duro tarda unos 13 milisegundos en llevar el cabezal a donde toca — cien mil veces más que la RAM.
Una tarjeta de red habla con voltajes y temporizaciones que no se parecen a nada de lo que hay dentro del ordenador.
Conectar la CPU directamente a todo esto sería imposible, y por eso no se conecta.
Entre la CPU y cada periférico hay un módulo de entrada y salida que hace de intérprete.
Qué hace un módulo de E/S
El módulo resuelve cuatro diferencias a la vez: de velocidad, de formato de datos, de niveles eléctricos y de manera de codificar la información.
Y lo hace escondiendo el periférico detrás de una interfaz que la CPU sí entiende: un puñado de registros, colgados del bus de sistema como si fueran memoria.
Son tres registros, y cada uno sirve para una pregunta diferente:
- El registro de datos es por donde pasa la información. La CPU escribe en él el byte que quiere enviar, o lee el que ha llegado.
- El registro de estado dice cómo está el periférico: listo, ocupado, con un error, sin papel. La CPU lo lee, no lo escribe.
- El registro de control es por donde la CPU da órdenes: empieza una lectura, detente, cambia de modo, rebobina.
La CPU no sabe nada del periférico.
Solo sabe escribir y leer estos registros, y es el módulo quien traduce esto a girar un motor o encender un LED.
Tres maneras de mover los datos
Ya tenemos la interfaz. Queda el problema del tiempo: el periférico tarda y la CPU no se puede permitir esperar.
Hay tres respuestas posibles, y las tres conviven en una máquina moderna.
E/S programada
La CPU pide la operación y se queda mirando el registro de estado en un bucle hasta que el periférico dice que está listo.
Se llama sondeo (polling), y es la solución más sencilla y la peor: la CPU quema millones de ciclos preguntando «¿ya?».
Todavía se usa cuando la espera es realmente corta y montar cualquier otra cosa sale más caro que esperar — y, curiosamente, ha vuelto en redes de muy alta velocidad, donde una interrupción por paquete costaría más que el sondeo.
E/S por interrupciones
La CPU pide la operación y se va a hacer otra cosa.
Cuando el periférico acaba, activa una línea del bus de control: una interrupción.
Lo que pasa entonces es siempre igual:
- La CPU acaba la instrucción que estuviera haciendo. Nunca deja una a medias.
- Guarda en la pila el
PCy el registro de estado: es el contexto al que tendrá que volver. - Consulta la tabla de vectores de interrupción para saber en qué dirección está la rutina que atiende ese dispositivo.
- Ejecuta esa rutina, la RSI (rutina de servicio de interrupción).
- Restaura el contexto y continúa como si nada.
Esta es la manera normal de trabajar, y es lo que permite que un ordenador haga cosas mientras espera el disco.
Acceso directo a memoria
Incluso con interrupciones, mover un bloque de disco a la RAM pasa por la CPU: lee una palabra del módulo, la escribe en la memoria, repite. Para 4 KiB, miles de veces.
El DMA (Direct Memory Access) saca a la CPU de en medio.
La CPU le dice a la controladora de DMA de dónde a dónde tiene que mover cuántos bytes, y se desentiende.
La controladora coge el bus cuando la CPU no lo usa — se llama robo de ciclos — mueve el bloque por su cuenta, y cuando acaba envía una sola interrupción.
Tienes tres dispositivos: un teclado, un sensor de temperatura que tienes que leer justo cuando la CPU lo pide, y una tarjeta de red de 10 Gbit/s.
¿Qué técnica usarías para cada uno? Justifícalo.
Muestra la solución
El sensor que tienes que leer ahora mismo: E/S programada. La espera es de microsegundos y montar una interrupción costaría más que esperarla.
El teclado: interrupciones. Un humano pulsa teclas cada cientos de milisegundos, y tener a la CPU esperándolo sería absurdo. Además, el dato es pequeño: un byte por interrupción ya va bien.
La tarjeta de red: DMA, sin ninguna duda. A 10 Gbit/s llegan más de un millón de paquetes por segundo; una interrupción por paquete ahogaría a la CPU solo con el cambio de contexto. La tarjeta escribe las tramas directamente en la RAM y avisa por grupos.
La regla es sencilla: cuantos más datos y con más frecuencia, más arriba tienes que subir en esta lista.
Estás leyendo una vista previa.
Inicia sesión con Google para leer la página completa.
Inicia sesión con GoogleCon cualquier cuenta de Google. Solo te pediremos que aceptes las condiciones del servicio.