Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
26/07/1999

< Bug do ano 2000 III: >
< A Hora Por Favor? >


Semana passada, encerrei a coluna mencionando alguns desdobramentos inesperados do bug do ano 2000. De fato, o problema pode se manifestar de maneira totalmente inusitada. Por exemplo: durante anos os programadores (principalmente de Clipper e linguagens similares) adotaram uma técnica peculiar nas rotinas usadas para capturar dados lançados pelos usuários: empregar a data "9/9/99" como um dado falso que, ao ser digitado, encerrava a rotina e fechava a janela de entrada. Ora, é evidente que todos estes programas rejeitarão peremptoriamente qualquer tentativa de entrar esta data como um dado válido. Ocorre que já estamos em julho de 99. E se você pensava ter um semestre inteiro para se pôr a salvo dos efeitos do bug do ano 2000, prepare-se: faltam menos de dois meses para 9/9/99.

E já que o tempo urge, é conveniente começarmos a analisar os possíveis desdobramentos do bug do ano 2000 no que toca a nossos computadores pessoais respondendo a uma pergunta: como eles conseguem informar corretamente data e hora mesmo após permanecerem desligados por algum tempo?

A partir do AT, todo computador da linha PC vem equipado com um relógio interno, denominado "Real Time Clock" (RTC) que, graças a uma bateria incorporada à placa-mãe, funciona mesmo enquanto o computador está desligado (os modelos anteriores, PC e XT, por não disporem de um relógio interno, solicitavam durante o processo de inicialização que o usuário digitasse data e hora; mas era possível incorporar opcionalmente um relógio em uma das placas controladoras). Essencialmente o RTC não é muito diferente de qualquer relógio digital: um cristal alimentado pela bateria vibra em uma freqüência exata, dependente de suas dimensões e formato, disparando pulsos de corrente em intervalos precisos. Um circuito eletrônico conta os pulsos, converte a soma dos intervalos em segundos, minutos, horas e dias e anota o tempo decorrido. A principal diferença é que o RTC não tem mostrador: os valores de data e hora (juntamente com dados referentes à configuração do micro) são armazenados em um circuito integrado de memória tipo CMOS, de baixo consumo de energia, onde permanecem à disposição do sistema operacional. Na maioria dos computadores modernos, o RTC e a memória CMOS integram o mesmo chip, em geral o MC146818 da Motorola ou um similar de outro fabricante. O ajuste da data, hora e dos demais dados de configuração armazenados nesta memória é feito através de um programa denominado Setup, gravado em ROM e que pode ser executado imediatamente ao se ligar o micro (em geral premindo a tecla Del durante a inicialização), antes mesmo da carga do sistema operacional. Estes ajustes (inclusive data e hora) são conhecidos por "CMOS setup".

Uma das funções executadas pelo sistema operacional ao ser carregado é justamente ler data e hora correntes na memória CMOS. A partir deste momento a responsabilidade de atualizá-las, assim como fornecê-las quando solicitadas pelo usuário ou pelos programas, passa a ser do sistema operacional e não mais do RTC. Inclusive a atualização dos dados da CMOS. Por exemplo: toda meia noite a data armazenada na memória CMOS deve ser alterada. Se o micro está desligado, o RTC trata do assunto. Mas se o micro está ligado, isto é feito por uma rotina do BIOS, que faz parte do sistema operacional e efetua os ajustes por seus próprios meios, sem recorrer ao RTC (o que, como veremos, é uma potencial fonte de problemas).

No entanto a responsabilidade do sistema operacional se restringe à atualização e fornecimento da data e hora correntes. Se um programa solicita estes dados, o sistema se limita a fornecê-los. A maneira pela qual eles serão exibidos pelo programa e o resultado das eventuais operações matemáticas que serão feitas com eles é da responsabilidade do próprio programa, não mais do sistema.

Portanto, ao discutirmos os efeitos do bug do ano 2000 sobre nossos micros pessoais, temos que levar em conta três aspectos relativos à data: aquela gerenciada pelo RTC, a mantida pelo sistema operacional e a processada pelos programas.

Semana que vem começaremos a analisar cada um deles.

B. Piropo