Sistemas operativos modernos
Ahora el proceso de usuario obtiene la impresora para escribir, emitiendo una llamada al sistema que la abre. Si en ese momento la impresora está siendo utilizada por otro proceso, es ta llamada fracasará y devolverá un código de error, o se bloqueará hasta que la impresora esté disponible, dependiendo del sistema operativo y de los parámetros de la llamada. Cuando el pro ceso de usuario tenga la impresora, emitirá una llamada al sistema para ordenarle que imprima la cadena. A continuación (por lo regular) el sistema operativo copia el búfer que contiene la cadena en un arreglo, digamos p, en espacio de kernel donde puede tener acceso a él con más facili dad (porque el kemel podría tener que cambiar el mapa de memoria para llegar al espacio de usuario). Luego verifica si la impresora está disponible. Si no lo está, espera hasta que lo esté. Tan pronto como la impresora esté disponible, el sistema operativo copia el primer carácter en el registro de datos de la impresora, en este ejemplo usando E/S con correspondencia en me moria. Esta acción activa la impresora. Es posible que el carácter no aparezca todavía porque algunas impresoras colocan en búfer una línea o una página antes de imprimir algo. Sin embar go, en la figura 5-6b vemos que se ha impreso el primer carácter y que el sistema marcó la “B” como siguiente carácter a imprimir. Tan pronto como el sistema operativo ha copiado el primer carácter a la impresora, verifica si está lista para aceptar otro. Por lo regular, la impresora tiene un segundo registro que indica su estado. El acto de escribir en el registro de datos hace que el estado cambie a “no lista”. Una vez que la controladora de la impresora ha procesado el carácter actual, indica su disponibilidad en cendiendo algún bit de su registro de estado o colocando algún valor en él. Ahora el sistema operativo espera que la impresora esté lista otra vez. Cuando eso sucede, imprime el siguiente carácter, como se muestra en la figura 5-6c. Este ciclo confinúa hasta que se imprime toda la cadena. Luego el control regresa al proceso de usuario. Las acciones del sistema operativo se resumen en la figura 5-7. Primero se copian los da tos en el kernel. Luego el sistema operativo entra en un ciclo corlo y envía a la salida los ca racteres uno por uno. El aspecto fundamental de la E/S programada, que se ilustra con claridad en esta figura, es que después de enviar a la salida un carácter, la CPU interroga en forma con tinua al dispositivo para ver si está listo para aceptar otro. Este comportamiento se conoce co mo sondeo (polling) o espera activa. copiar_de_usuario(buffer, p, cuenta); /* p es el búfer del kernel V for (i = 0; i < cuenta; i++) { /* repite para cada carácter ’/ while ( . printer_status_reg != READY); /* itera mientras está lista */ . printer_data_ register = p [i]; /" envía un carácter */ } volver_al_usuario( ); Figura 5-7. Escritura de una cadena en la impresora, empleando E/S programada. La E/S programada es sencilla pero tiene la desventaja de ocupar la CPU en forma confi nua hasta que termina la E/S. Si el fiempo requerido para “imprimir” un carácter es muy corto (porque lo único que hace la impresora es copiar el nuevo carácter en un búfer interno), no hay
RkJQdWJsaXNoZXIy MjI4NDcx