Sistemas operativos modernos
5.2.4 E/S con DMA Una desventaja obvia de la E/S controlada por interrupciones es que se presenta una interrupción con cada carácter. Las interrupciones ocupan tiempo, por lo que este esquema desperdicia cierta cantidad de tiempo de CPU. Una solución es usar DMA. Aquí, la idea consiste en dejar que la con troladora DMA alimente los caracteres a la impresora uno por uno, sin molestar a la CPU. Bási camente, el DMA es E/S programada, sólo que la controladora DMA es la que realiza todo el trabajo, no la CPU principal. En la figura 5-9 se presenta un bosquejo del código. copiar_de_usuario(buffer, p, cuenta); acusar_interrup(); preparar_controladora_DMA(); desbloquear_usuarlo(); calendarizador(); volver_de_interrup(); (a) (b) Figura 5-9. Impresión de una cadena empleando DMA. a) Código que se ejecuta cuando se efectúa la llamada al sistema para imprimir, b) Procedimiento de servicio de interrupciones. La gran ventaja de DMA es que se reduce el número de interrupciones, de una por carácter a una por búfer impreso. Si hay muchos caracteres y las interrupciones son lentas, la mejora pue de ser considerable. Por otra parte, la controladora DMA suele ser mucho más lenta que la CPU principal. Si la controladora DMA no puede operar el dispositivo a su máxima velocidad, o si la CPU de todos modos no tiene nada que hacer mientras espera la interrupción de DMA, la E/S controlada por interrupciones o incluso la E/S programada podrían ser mejores. 5.3 CAPAS DEL SOFTWARE DE E/S El software de E/S suele estar organizado en cuatro capas, como se muestra en la figura 5-10. Cada capa tiene una función bien definida que desempeñar y una interfaz bien definida con las capas adyacentes. La funcionalidad y las interfaces difieren de un sistema a otro, y por esto el análisis siguiente, que examina todas las capas comenzando por la más baja, no es específico pa ra una máquina dada. 5.3.1 Manejadores de interrupciones Aunque la E/S programada a veces es útil, en la mayoría de las operaciones de E/S las inte rrupciones son inevitables, por molestas que sean. Lo mejor es ocultarlas en las profundidades del sistema operativo, de modo que la parte de este último que tiene conocimiento de ellas sea lo más reducida posible. La mejor manera de ocultar las interrupciones es hacer que el contro lador que inicia una operación de E/S se bloquee hasta que la E/S haya terminado y se presen te la interrupción. Dicho controlador puede bloquearse ejecutando down con un semáforo, wait con una variable de condición o receive con un mensaje, o algo similar.
RkJQdWJsaXNoZXIy MjI4NDcx