Sistemas operativos modernos

reloj físico. Una forma de hacerlo es mantener una tabla en la que se guarda el tiempo de se­ ñal para todos los temporizadores pendientes, así como una variable que contiene el tiempo del siguiente. Cada vez que se actualiza la hora del día, el controlador verifica si ya es hora de la señal más inminente. En tal caso, se busca en la tabla la siguiente señal esperada. Si se esperan muchas señales, resulta más eficiente simular múltiples relojes encadenando todas las solicitudes de reloj pendientes, ordenadas por tiempo, en una lista enlazada como la de la figura 5-33. Cada entrada de la lista indica cuántos tics de reloj hay que esperar después del anterior antes de generar una señal. En este ejemplo hay señales pendientes para 4203, 4207, 4213, 4215 y 4216. Hora actual Siguiente señal Figura 5-33. Simulación de varios temporizadores con un solo reloj. En la figura 5-33, la siguiente interrupción se presentará en 3 tics. En cada clic, se decre­ menta Siguiente señal. Cuando ésta llega a cero, se genera la señal correspondiente al primer elemento de la lista y se borra de la lista. Luego se ajusta Siguiente señal al valor contenido en la entrada que ahora está a la cabeza de la lista, en este ejemplo, 4. Cabe señalar que, durante una interrupción de reloj, el controlador de reloj tiene varias co­ sas que hacer; incrementar el fiempo real, decrementar el cuanto y verificar si es cero, conta­ bilizar el uso de la CPU y decrementar el contador de alarma. Sin embargo, cada una de estas operaciones se ha organizado con cuidado para que sean muy rápidas, pues fienen que repetir­ se muchas veces cada segundo. Algunas partes del sistema operativo también necesitan establecer temporizadores. Éstos se llaman temporizadores vigilantes. Por ejemplo, los discos flexibles no giran cuando no se es­ tán usando, para evitar que se desgasten el medio de grabación y la cabeza del disco. Cuando se necesitan datos de un disquete, primero hay que poner en marcha el motor. Sólo cuando el dis­ quete esté girando a toda velocidad, podrá iniciarse la E/S. Cuando un proceso intenta leer de un disco flexible inactivo, el controlador de disquete pone en marcha el motor y luego estable­ ce un temporizador vigilante para que genere una interrupción después de un intervalo de fiem­ po lo bastante largo (porque 1 a unidad de disquete no genera una interrupción para avisar que ya alcanzó la velocidad de operación). El mecanismo empleado por el controlador de reloj para operar temporizadores vigilantes es el mismo que para las señales de usuario. La única diferencia es que cuando un temporiza­ dor llega a cero, el controlador de reloj, en lugar de generar una señal, invoca un procedimien­ to especificado por el invocador. El procedimiento forma parte del código del invocador. El procedimiento invocado puede hacer todo lo necesario, incluso generar una interrupción, aun­ que dentro del kemel las interrupciones suelen ser poco recomendables y no existen señales. Es por ello que se proporciona el mecanismo de temporizador vigilante. Vale la pena señalar

RkJQdWJsaXNoZXIy MjI4NDcx