Escolar Documentos
Profissional Documentos
Cultura Documentos
Los relojes (tambin conocidos como temporizadores) son esenciales para la operacin
de cualquier sistema de multiprogramacin, por una variedad de razones. Mantienen la
hora del da y evitan que un proceso monopolice la CPU, entre otras cosas. El software de
reloj puede tomar la forma de un software controlador de dispositivo, aun y cuando un
reloj no es un dispositivo de bloque (como un disco) ni un dispositivo de carcter (como un
ratn). Nuestro anlisis de los relojes seguir el mismo patrn que en la seccin anterior:
primero un vistazo al hardware del reloj y despus un vistazo a su software.
5.5.1 Hardware de reloj
Hay dos tipos de relojes de uso comn en las computadoras, y ambos son bastante
distintos de los relojes que utilizan las personas.
Los relojes ms simples estn enlazados a la lnea de energa de 110 o 220 voltios y
producen una interrupcin en cada ciclo de voltaje, a 50 o 60 Hz. Estos relojes solan
dominar el mercado, pero ahora son raros.
El otro tipo de reloj se construye a partir de tres componentes: un oscilador de cristal,
un contador y un registro contenedor, como se muestra en la figura 5-32. Cuando una
pieza de cristal de cuarzo se corta en forma apropiada y se monta bajo tensin, puede
generar una seal peridica con una precisin muy grande, por lo general en el rango de
varios cientos de megahertz, dependiendo del cristal elegido. Mediante el uso de
componentes electrnicos, esta seal base puede multiplicarse por un pequeo entero
para obtener frecuencias de hasta 1000 MHz o incluso ms. Por lo menos uno de esos
circuitos se encuentra comnmente en cualquier computadora, el cual proporciona una
seal de sincronizacin para los diversos circuitos de la misma. Esta seal se alimenta al
contador para hacer que cuente en forma descendente hasta cero. Cuando el contador
llega a cero, produce una interrupcin de la CPU.
Por lo general, los relojes programables tienen varios modos de operacin. En el modo
de un solo disparo, cuando se inicia el reloj copia el valor del registro contenedor en el
contador y despus decrementa el contador en cada pulso del cristal. Cuando el contador
llega a cero, produce una interrupcin y se detiene hasta que vuelve a ser iniciado en
forma explcita mediante el software.
En el modo de onda cuadrada, despus de llegar a cero y producir la interrupcin, el
registro contenedor se copia automticamente en el contador y todo el proceso se repite
de nuevo en forma indefinida.
Estas interrupciones peridicas se conocen como pulsos de reloj.
La ventaja del reloj programable es que su frecuencia de interrupcin se puede controlar
mediante software. Si se utiliza un cristal de 500 MHz, entonces se aplica un pulso al
contador cada 2 seg. Con registros de 32 bits (sin signo), se pueden programar
interrupciones para que ocurran a intervalos de 2 nseg hasta 8.6 seg. Los chips de reloj
programables por lo general contienen dos o tres relojes que pueden programarse de
manera independiente, y tienen muchas otras opciones tambin (por ejemplo, contar en
forma ascendente o descendente, deshabilitar interrupciones, y ms).
Para evitar que se pierda la hora actual cuando se apaga la computadora, la mayora
cuentan con un reloj de respaldo energizado por batera, implementado con el tipo de
circuitos de baja energa que se utilizan en los relojes digitales. El reloj de batera puede
leerse al iniciar el sistema.
Si no est presente, el software puede pedir al usuario la fecha y hora actuales. Tambin
hay una forma estndar para que un sistema obtenga la hora actual de un host remoto.
En cualquier caso, la hora se traduce en el nmero de pulsos de reloj desde las 12 A.M.
UTC (Universal Coordinated Time, Tiempo coordenado universal) (anteriormente conocido
como Tiempo del meridiano de Greenwich) el 1 de enero de 1970, como lo hace UNIX, o
a partir de algn otro momento de referencia.
El origen del tiempo para Windows es enero 1, 1980. En cada pulso de reloj, el tiempo
real se incrementa por un conteo. Por lo general se proporcionan programas utilitarios
para
5.5.2 Software de reloj
Todo lo que hace el hardware del reloj es generar interrupciones a intervalos conocidos.
Todo lo dems que se relacione con el tiempo debe ser realizado por el software
controlador del reloj. Las tareas exactas del controlador del reloj varan de un sistema
operativo a otro, pero por lo general incluyen la mayora de las siguientes tareas:
1. Mantener la hora del da.
2. Evitar que los procesos se ejecuten por ms tiempo del que tienen permitido.
3. Contabilizar el uso de la CPU.
4. Manejar la llamada al sistema alarm que realizan los procesos de usuario.
5. Proveer temporizadores guardianes (watchdogs) para ciertas partes del mismo sistema.
6. Realizar perfilamiento, supervisin y recopilacin de estadsticas.
La primera funcin del reloj, mantener la hora del da (tambin conocida como tiempo
real), no es difcil. Slo requiere incrementar un contador en cada pulso de reloj, como se
dijo antes. Lo nico por lo que debemos estar al pendiente es el nmero de bits en el
contador de la hora del da.
Con una velocidad de reloj de 60 Hz, un contador de 32 bits se desbordar
aproximadamente en 2 aos. Es evidente que el sistema no puede almacenar el tiempo
real como el nmero de pulsos del reloj desde enero 1, 1970 en 32 bits.
Se pueden usar tres mtodos para resolver este problema. El primero es utilizar un
contador de 64 bits, aunque para ello se vuelve ms complejo dar mantenimiento al
contador, ya que se tiene que realizar muchas veces por segundo. El segundo es
mantener la hora del da en segundos, en vez de pulsos, usando un contador subsidiario
para contar pulsos hasta que se haya acumulado un segundo completo. Como 232
segundos equivale a ms de 136 aos, este mtodo funcionar hasta el siglo XXII.
El tercer mtodo es contar en pulsos, pero hacerlo de manera relativa a la hora en que se
inici el sistema, en vez de un momento externo fijo. Cuando el reloj de respaldo se lee o
el usuario escribe la hora real, el tiempo de inicio del sistema se calcula a partir del valor
de la hora del da actual y se almacena en memoria, en cualquier forma conveniente. Ms
adelante, cuando se solicita la hora del da, se suma al contador la hora almacenada del
da para obtener la hora actual. Los tres mtodos se muestran en la figura 5-33.
La segunda funcin del reloj es evitar que los procesos se ejecuten en demasiado tiempo.
Cada vez que se inicia un proceso, el planificador inicializa un contador para el valor del
quantum de ese proceso, en pulsos de reloj. En cada interrupcin del reloj, el software
controlador del mismo decrementa el contador del quantum en 1. Cuando llega a cero, el
software controlador del reloj llama al planificador para establecer otro proceso.
haya podido realizar mucho trabajo. La contabilidad apropiada para la CPU durante las
interrupciones es demasiado complicada y se realiza en raras ocasiones.
En muchos sistemas, un proceso puede solicitar que el sistema operativo le proporcione
una advertencia despus de cierto intervalo. La advertencia es por lo general una seal,
interrupcin, mensaje o algo similar. Una aplicacin que requiere dichas advertencias es
el trabajo en red, donde un paquete que no se reconozca durante cierto intervalo de
tiempo se debe volver a transmitir. Otra aplicacin es la instruccin asistida por
computadora, donde un estudiante que no provee una respuesta dentro de cierto tiempo
la recibe automticamente.
Si el software controlador de reloj tuviera suficientes relojes, podra establecer un reloj
separado para cada peticin. Como ste no es el caso, debe simular varios relojes
virtuales con un solo reloj fsico. Una forma de hacer esto es mantener una tabla en la que
se mantenga el tiempo de la seal de todos los temporizadores pendientes, as como una
variable que proporcione el tiempo de la seal del siguiente. Cada vez que se actualiza la
hora del da, el controlador comprueba que haya ocurrido la seal ms cercana. Si as
fue, se busca en la tabla la siguiente entrada que est por ocurrir.
Si se esperan muchas seales, es ms eficiente simular varios relojes al encadenar todas
las peticiones de reloj pendientes, ordenadas con base en el tiempo, en una lista enlazada
como se muestra en la figura 5.34. Cada entrada en la lista indica cuntos pulsos de reloj
despus del anterior hay que esperar para poder producir una seal. En este ejemplo, hay
seales pendientes para 4203, 4207,
4213, 4215 y 4216.
Temporizadores de software
La mayora de las computadoras tienen un segundo reloj programable que se puede
establecer para producir interrupciones del temporizador, a cualquier velocidad que
requiera un programa. Este temporizador es aparte del temporizador principal del sistema,
cuyas funciones se describieron en la seccin anterior. Mientras que la frecuencia de
interrupcin sea baja, no habr problema al usar este segundo temporizador para fines
especficos de la aplicacin. El problema surge cuando la frecuencia del temporizador
especfico de la aplicacin es muy alta. A continuacin analizaremos de manera breve un
esquema de un temporizador basado en software que funciona bien bajo ciertas
un servidor Web con un trabajo en segundo plano para realizar clculos, la reproduccin
de audio en tiempo real en Internet, y la recompilacin del kernel de UNIX. La velocidad
de entrada promedio en el kernel tuvo una variacin de 2 seg a 18 seg, donde casi la
mitad de estas entradas eran llamadas al sistema. As, para una aproximacin de primer
orden, es viable hacer que un temporizador de software se active cada 12 seg, aunque
fallando en un tiempo lmite en ocasiones. Para las aplicaciones como el envo de
paquetes o el sondeo de paquetes entrantes, tener un retraso de 10 seg de vez en
cuando es mejor que tener interrupciones que ocupen 35% de la CPU.
Desde luego que habr periodos en los que no haya llamadas al sistema, fallos del TLB o
de pgina, en cuyo caso no se activarn temporizadores. Para colocar un lmite superior
en estos intervalos, se puede establecer el segundo temporizador de hardware para que
se active cada 1 mseg, por ejemplo. Si la aplicacin puede sobrevivir con slo 1000
paquetes/seg por intervalos ocasionales, entonces la combinacin de temporizadores de
software y un temporizador de hardware de baja frecuencia puede ser mejor que la E/S
controlada slo por interrupciones o por sondeo.