Los relojes (también conocidos como
temporizadores) son esenciales para la operación de cualquier sistema de
multiprogramación, cumpliendo las siguientes funciones:
FUNCIONAMIENTO:
El procesador (denominado CPU,
por Central Processing Unit) es un circuito electrónico que funciona a la
velocidad de un reloj interno, gracias a un cristal de cuarzo que, sometido a
una corriente eléctrica, envía pulsos, denominados "picos".
La velocidad de reloj (también denominada ciclo), corresponde al
número de pulsos por segundo, expresados en Hertz (Hz). De este modo, un
ordenador de 200 MHz posee un reloj que envía 200.000.000 pulsos por segundo.
Por lo general, la frecuencia de reloj es un múltiplo de la frecuencia del
sistema (FSB, Front-Side Buso Bus de la Parte Frontal), es decir, un
múltiplo de la frecuencia de la placa madre.
El reloj es la parte de la CPU que
proporciona una sucesión de impulsos eléctricos (llamados ciclos) a intervalos
constantes. Cada sucesión marca el instante que debe comenzar un paso de una
instrucción.
La frecuencia de reloj es la velocidad en
ciclos por segundo (medidas en Hertz) con que una computadora realiza las operaciones
más básicas. Diferentes chips en la placa madre pueden tener diferentes
frecuencias de reloj. En general, en computación, cuando se habla de "la
frecuencia de reloj", se está haciendo referencia a la velocidad del CPU
(el microprocesador).
La velocidad de reloj se mide normalmente en
gigahercios (GHz) o miles de millones de ciclos por segundo.
RELOJ DE INTERRUPCIONES
El sistema operativo gestiona un reloj de
interrupciones que genera interrupciones cada cierto tiempo. Un proceso
mantiene el control de la CPU hasta que la libera voluntariamente (acaba su
ejecución, o se bloquea), hasta que el reloj interrumpe o hasta que alguna otra
interrupción desvía la atención de la CPU. Si el usuario se encuentra en
ejecución y el reloj interrumpe, el sistema operativo entra en ejecución para
comprobar, por ejemplo, si ha pasado el cuanto de tiempo del proceso que estaba
en ejecución.
El reloj de interrupciones asegura que ningún
proceso acapare la utilización del procesador. El sistema operativo, apoyándose
en él, intenta distribuir el tiempo de CPU entre los distintos procesos ya sean
de E/S o de cálculo. Por tanto, ayuda a garantizar tiempos de respuesta para
los usuarios interactivos, evitando que el sistema quede bloqueado en un ciclo
infinito de algún usuario y permite que los procesos respondan a eventos
dependientes de tiempo. Los procesos que deben ejecutarse periódicamente dependen
del reloj de interrupciones.
HARDWARE DEL RELOJ
Hay dos tipos de relojes:
- Los relojes más
simples están enlazados a la línea de energía de 110 o 220 voltios y
producen una interrupción en cada ciclo de voltaje, a 50 o 60 Hz. Estos
relojes solían dominar el mercado, pero ahora son raros.
- Los Relojes
programables, formados por tres componentes: Un oscilador de cristal, un
contador y un registro. Cuando una pieza de cristal de cuarzo se corta en
forma apropiada y se monta bajo tensión, puede generar una señal periódica
de muy alta precisión, generalmente entre 5 y 100 mhz. La señal se
alimenta en el contador para que cuente en forma descendente hasta cero.
Cuando el contador llega a cero, provoca una interrupción de la CPU.
SOFTWARE DEL RELOJ
Todo
lo que hace el hardware del reloj es generar interrupciones a intervalos
conocidos. Todo lo demás que se relacione con el tiempo debe ser realizado por
el software controlador del reloj. Las tareas exactas del controlador del reloj
varían de un sistema operativo a otro, pero por lo general
Incluyen
la mayoría de las siguientes tareas:
- Mantener la hora
del día.
- Evitar que los
procesos se ejecuten por más tiempo del que tienen permitido.
- Contabilizar el
uso de la CPU.
- Proveer
temporizadores guardianes (watchdogs) para ciertas partes del mismo
sistema.
- Realizar
perfilamiento, supervisión y recopilación de estadísticas.
- Mantener la hora
del día (también conocida como tiempo real): Sólo requiere incrementar un
contador en cada pulso de reloj.
- 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 interrupción 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.
- Contabilizar el
uso de la CPU. La forma más precisa de hacerlo es iniciar un segundo
temporizador, distinto del temporizador principal del sistema, cada vez
que se inicia un proceso. Cuando ese proceso se detiene, el temporizador
se puede leer para saber cuánto tiempo se ha ejecutado el proceso. Para
hacer lo correcto, el segundo temporizador se debe guardar cuando ocurre
una interrupción y se debe restaurar cuando ésta termine.
- Hay partes del
sistema operativo que también necesitan establecer temporizadores. A éstos
se les conoce como temporizadores guardianes (watchdogs). Por ejemplo, los
discos flexibles no giran cuando no están en uso, para evitar desgaste en
el medio y la cabeza del disco. Cuando se necesitan datos de un disco
flexible, primero se debe iniciar el motor. Sólo cuando el disco flexible
está girando a toda velocidad se puede iniciar la operación de E/S. Cuando
un proceso intenta leer de un disco flexible inactivo, el software
controlador del mismo inicia el motor y después establece un temporizador
guardián para que produzca una interrupción cuando haya pasado un
intervalo de tiempo suficientemente extenso (debido a que no hay un
interruptor de máxima velocidad en el disco flexible).
- Perfilamiento.
Algunos sistemas operativos proporcionan un mecanismo mediante el cual un
programa de usuario puede hacer que el sistema construya un histograma de
su contador del programa, para poder ver en dónde pasa su tiempo. Cuando
el perfilamiento es una posibilidad, en cada pulso el controlador
comprueba si se está perfilando el proceso actual y, de ser así, calcula
el número de receptáculo (un rango de direcciones) que corresponde al
contador del programa actual. Después incrementa ese receptáculo en uno.
Este mecanismo también se puede utilizar para perfilar al mismo sistema.