Sistemas operativos modernos

problema con la espera activa. Además, en un sistema integrado donde la CPU no tiene otra co­ sa que hacer, la espera activa es razonable. En cambio, en sistemas más complejos donde la CPU tiene otras tareas que efectuar, la espera activa es ineficiente. Se requiere un mejor méto­ do de E/S. 5.2.3 E/S controlada por interrupciones Consideremos ahora el caso de imprimir en una impresora que no coloca los caracteres en un búfer sino que imprime cada uno conforme llega. Si tiene una velocidad de, digamos, 100 ca- racteres/s, la impresión de cada carácter tardará 10 ms. Esto implica que después de escribir cada carácter en el registro de datos de la impresora, la CPU dará vueltas en un ciclo inactivo durante 10 ms en espera de que le permitan enviar el siguiente carácter. Este tiempo es más que suficiente para reahzar una conmutación de contexto y ejecutar algún otro proceso durante los 10 ms que se desperdiciarían de otra manera. La forma de permitir que la CPU haga otra cosa mientras espera que la impresora esté lista es usar interrupciones. Cuando se emite la llamada al sistema para imprimir la cadena, el búfer se copia en el espacio de kemel, como vimos antes, y el primer carácter se copia en la impreso­ ra tan pronto como ésta esté dispuesta a aceptar uno. En ese momento la CPU invoca al calenda­ rizador y se ejecuta algún otro proceso. El proceso que pidió que se imprimiera la cadena quedará bloqueado hasta que ésta termine de imprimirse. En la figura 5-8a se muestra el trabajo que se efectúa durante la llamada al sistema. copiar_de_usuario{buffer, p, cuenta); if (cuenta == 0) { habiiitarJnterrupciones(); desbloquear_usuario(); while (. printer_status_reg !=READY); } else { . printer_data_register = p(0]; - printer_data_register =p[i]: calendarizador(); cuenta = cuenta •1; i = i+1; } acusar_interrup(); volver_de_interrup(); (a) (b) Figura 5-8. Escritura de una cadena en la impresora, empleando E/S controlada por interrupciones, a) Código que se ejecuta cuando se emite la llamada al sistema pa­ ra imprimir, b) Procedimiento de servicio de interrupciones. Cuando la impresora ha impreso el carácter y está preparada para aceptar el siguiente, genera una interrupción, lo que detiene el proceso actual y guarda su estado. Luego se ejecuta el procedi­ miento de servicio de interrupciones. En la figura 5-8b se muestra una versión burda de este códi­ go. Si ya no hay más caracteres que imprimir, el manejador de interrupciones realiza alguna acción para desbloquear al usuario. En caso contrario, envía a la salida el siguiente carácter, acusa recibo de la interrupción y vuelve al proceso que se estaba ejecutando justo antes de la interrupción, mis­ mo que confinúa desde el punto en que se quedó.

RkJQdWJsaXNoZXIy MjI4NDcx