Relógio Físico, o qual é determinado pelo hardware oscilador/contador.
Relógio Aparente , o qual mantém o tempo do día usado pelo processo cliente.
Relógio Atual, o qual representa o tempo do día provido por uma referência externa.
Os relógios aparente e atual são mantidos como quantidades de 48 bits com 32 bits de significancia disponível para os processos clientes.
Os processos CLOCK consistem de um conjunto de variáveis de estado com um conjunto de procedimentos que são chamados como resultado de interrupções de hardware e solicitudes dos clientes.
Variáveis Locais:
CLK.CLOCK: Esta é uma variável de estado de 48 bits usada para representar o tempo do dia aparente.
CLK.COUNT: Este é um registro de hardware que incrementa em valores R. Ele pode ser representado por uma simples linha de relógio, a qual causa interrupções na taxa da linha de frecuencia, ou por um relógio programável, o qual contém um registro de 16 bits que é programado para contar numa taxa de 1000-Hz e causar uma interrupção de overflow. O registro é considerado uma variável de ponto fixo com ponto decimal a direita do bit 0.
CLK.DELTA: esta é uma variável de estado de ponto fixo com signo, com 48 bits. É usada para representar o incremento a ser somado à CLK.CLOCK para concordar com o atual tempo do dia. O ponto decimal é à direita do bit 16.
Parâmetros
ADJUST-FRACTION: Este é um inteiro que define o contador de desplazamento usado para computar a fracção que é usada como um multiplicador de CLK.DELTA para corregir CLK.CLOCK uma vez em cada intervalo de ajuste de relógio. Um valor de 7 é sugerido.
ADJUST-INTERVAL: Este é um inteiro o qual define o intervalo de ajuste de relógio em milisegundos. Um valor de 500 ( a mitade de um segundo) é sugerida para o line clock e 4000 (4 segundos) para o 1000 HZ clock.
CLOCK-TICK: Este é um inteiro de ponto fixo o qual define o incremento em milisengundos para ser somados a CLK.CLOCK como o resultado do tic do relógio. O ponto decimal esta a direita do bit 16. No casso de uma interrupção line-clock, o valor do CLOCK-TICK poderia ser 16.66666 (60 Hz) o 20.00000 (50 Hz), no caso de um relógio programável de 1000-Hz o valor poderia ser 65536.00000.
HOLD-INTERVAL: Este é um inteiro o qual define o número de segundos que HOLD que restara o contador depois que o CLK.CLOCK tenha sido reseteado. O intervalo resultante deve ser pelo menos tão grande como o máximo intervalo-HELLO usado por qualquer processo HELLO.
Eventos e Procedimentos
Evento INCREMENT-CLOCK: É invocado como resultado de uma interrupção. Ele causa que o relógio logico seja incrementado pelo valor de CLOCK-THICK. Evento DECREMENT-HOLD: Este evento é invocado uma vez por segundo para decrementar os valores do HOLD. Se o valor de HOLD é zero não faz nada, em caso contrario decrementa seu valor.
Procedimento READ-CLOCK: Este procedimento é chamado por um processo cliente. Ele retorna o tempo aparente do dia computado como a parte inteira da soma de CLK.CLOCK mais CLK.COUNT.
Procedimento SET-CLOCK: Este procedimento é chamado por um processo cliente. Ele estabelece o factor de correção do tempo do dia em milisegundos.