Los primeros PC que se fabricaron no disponían de un dispositivo
capaz de almacenar la fecha y la hora cuando éste era
desconectado de la corriente. Al arrancarlo, se nos preguntaba la
fecha y la hora y un programa interno del sistema operativo (el
DOS en este caso) se encargaba de "simular" mediante programación
un reloj. Es lo que se conoce como un "reloj virtual".
Con la aparición del modelo AT, se incorporó un dispositivo de
tiempo al PC capaz de almacenar la fecha y la hora por medio de
una batería aunque el PC estuviese apagado. Se trata de un
circuito integrado que dispone de la lógica necesaria para
funcionar como un reloj/calendario, y de unas posiciones de
memoria para almacenar estos datos tanto en marcha, como
desconectado. Se le llamó "Real Time Clock" o "Reloj de Tiempo
Real" y se le conoce por sus siglas en inglés "RTC".
La secuencia de arranque de un PC viene a ser más o menos así: Se
dispone de un "mini-sistema operativo" llamado BIOS (Basic
Input/Output System o Sistema Básico de Entrada/Salida) que se
encarga de las operaciones más elementales que permiten que la
máquina funcione. Cuando el PC se pone en marcha, automáticamente
la BIOS entra en juego. Realiza una serie de comprobaciones y
lanza el sistema operativo que es el que verdaderamente permite
la comunicación hombre-máquina, cediéndole el control a éste
último. No obstante, la BIOS consta de una serie de programas que
permanecen en ejecución mientras el PC está en marcha y que son
utilizados por el sistema operativo y por los programas que se
ejecuten en él.
En lo que respecta a la fecha y la hora, una de las primeras
funciones que realiza la BIOS es leer la que hay almacenada en el
RTC y que ha sido guardada gracias a la batería. Una vez leída e
"interpretada", la copia en un reloj propio de tipo virtual y a
partir de ahí, puede gestionar dichos datos sin necesidad de
volver a consultar al RTC a menos que le sea requerido.
Una vez la BIOS ha realizado sus operaciones y test básicos lanza
el sistema operativo y le cede el control. Una de las primeras
cosas que hace éste es leer la fecha y la hora, pero esto tiene
sus variantes según el sistema operativo que utilicemos. En el
caso más extendido como son MS-DOS, Windows 3.x y Windows 9x lo
lee del reloj de la BIOS. Otros sistemas como Windows NT o
arquitecturas de tipo Unix lo hacen directamente del RTC.
En el momento en que el sistema operativo ha leído el reloj
correspondiente, copia los datos en su propio reloj y se encarga
de mantener éste.
Así que en un PC tenemos tres relojes funcionando
simultáneamente. El RTC, que es el único reloj "físico" o "real",
el de la BIOS, y el del sistema operativo. Lo que no quiere decir
que marquen la misma hora ;)
Dependiendo del sistema operativo se pueden emplear los tres o
sólo dos.
¿Porqué un PC se "vuelve" a 1900?
El antes y el después
Hasta no hace mucho, ningún PC era capaz de realizar
correctamente la transición al año 2000, si bien la mayoría,
aunque no todos, eran capaces de trabajar con fechas superiores a
1999 y de reconocer el 2000 como bisiesto. Las primeras
correcciones que se aplicaron evitaban la mayoría de los
problemas, pero necesitaban que el ordenador fuese "rearrancado"
para ello. Esto implica que si está funcionando en el paso de la
Nochevieja al Año Nuevo, mientras en España "nos comemos las
uvas", puede haber fallos. Los plenamente "Conformes Año 2000"
funcionan siempre sin necesidad de dicho re-arranque.
El RTC dispone de unas posiciones de memoria para almacenar los
datos del reloj y calendario. Estos datos son actualizados
continuamente por la circuitería del reloj y son consultados por
la BIOS, el Sistema Operativo y/o las aplicaciones.
En cada una de estas "posiciones", se guardan dos dígitos
correspondientes a cada uno de los elementos que componen una
fecha y una hora. Es decir, una posición para los segundos, otra
para los minutos, las horas, el día de mes,... Hasta aquí no hay
problema. Los datos se empaquetan en un sistema de codificación
conocido como "Decimal codificado en binario" o BCD que permite
almacenar números de dos cifras suficiente para mostrar por
ejemplo un reloj en la forma hh:mm:ss (horas:minutos:segundos)
pero...
¡Cielos, el año tiene cuatro dígitos! "No hay problema",
pensaron, y dividieron el año en dos pares de cifras. La llamada
"año" en sí, que permite valores de entre "00" y "99", y la mal
llamada "byte del siglo" que debería mostrar el "19" o el "20".
Esta viene "de fábrica" con un 19 y por alguna extraña razón, se
dejó a la responsabilidad de la BIOS que cuando el año 99
terminase y este pasara a ser 00, se incrementase el 19 a 20.
También por una extraña razón, los fabricantes de las BIOS, no se
dieron por aludidos hasta fechas muy recientes y obviaron este
detalle, lo que como explicábamos en el problema de la
transición, provoca que al 00 se le siga anteponiendo el 19 dando
como resultado el año 1900.
Si dicha transición se produce con el ordenador funcionando, cada
uno de los tres relojes seguirá su marcha como si nada. El del
sistema operativo pasará al 2000, pero la BIOS y el RTC
dependerán de la capacidad de la versión de la primera de
corregir el problema. La situación resultante durará hasta que se
re-inicie la máquina.
Si durante la transición el PC estaba apagado, el reloj pasará a
1900 y esto podrá ser interpretado de distinta manera por la BIOS
y por el sistema operativo cuando se vuelva a arrancar. Si la
BIOS encuentra esa fecha errónea y es capaz de corregirla el
sistema operativo partirá de una buena fecha y seguirá así. Si no
la corrige o lo hace mal, este error será transmitido.
Lo que puede pasar a partir de aquí no es tan sencillo como
parece. Se pueden diferenciar cuatro tipos de comportamiento.
Tipos de comportamiento de un PC
PCés conformes año 2000
Si están en marcha durante la transición, la BIOS se encargará de
cambiar el "byte de siglo" de 19 a 20 tan pronto como se pase al
primer segundo del año 2000. Si ésta se produce con el ordenador
apagado, cuando se arranque será capaz de detectar que ha
ocurrido y realizará dicha corrección en el RTC antes de que una
fecha errónea se propague.
Igualmente será capaz de reconocer el año 2000 como bisiesto.
En cualquier caso, los tres relojes deben mostrar la fecha
correcta.
PCés que necesitan ser re-arrancados
Algunas BIOS que no son capaces de realizar bien la transición al
año 2000, realizan no obstante una comprobación en los test
iniciales al arrancar la máquina de que el año sea "coherente" y
son capaces de corregirlo en caso contrario. En general, si
encuentran un 1900 "entienden" que no es una fecha válida y
"asumen" que debe tratarse del 2000. Se utilizan varios
algoritmos para ello y pudiera darse el caso de no reconocer un
1901, 1902, etc... como 2001, 2002,... si bien esto sólo
afectaría a máquinas apagadas durante más de un año.
En todo caso, su peligro reside únicamente en que estén
funcionando durante la Nochevieja (como en el caso de servidores)
y que algún programa o rutina del sistema acceda a uno de los
relojes erróneos (RTC y/o BIOS) en vez de al del sistema
operativo para obtener la fecha. Es un riesgo muy pequeño, pero
real.
PCés que necesitan (y pueden) ser modificados manualmente
Si una vez producida la transición, la BIOS no está preparada
para corregir el problema, el RTC -y probablemente también la BIOS-
seguirán "viviendo en 1900" hasta que la máquina sea re-arrancada
por primera vez.
Aquí se da una situación curiosa. La BIOS lee la fecha del RTC
que es de 1900. El sistema operativo (el DOS) lee esa fecha de
1900 de la BIOS, pero éste no reconoce fechas anteriores a 1980,
por lo que decide establecer la fecha mínima que entiende y que
por otra extraña razón es el 4 de enero de 1980. Esta será la
fecha con la que nuestro PC empiece a trabajar y si no nos damos
cuenta de ello, nuestros documentos empezarán a mostrarla y a
operar con ella con el riesgo que esto entraña.
No obstante, si esta situación se ha producido, suele coincidir
con el caso de PCés que no son capaces de realizar la transición,
pero que admiten que manualmente le cambiemos la fecha a una de
2000 y siga trabajando con ella.
Basta con probar a ponerle una fecha de 2000 (la del primer día
en que lo pongamos en marcha) y reiniciar la máquina para
comprobar si mantiene dicha fecha.
Esto no obstante no asegura que el año 2000 sea reconocido como
bisiesto, pero es bastante probable.
PCés que no soportan fechas de año 2000
Son una minoría pero están ahí. Algunos fabricantes de BIOS
pensaron que no podía haber fechas de sistema (es decir la fecha
del día en que estamos trabajando) anteriores a la de fabricación
de la misma. Otros incluso, que dicha BIOS no tendría un tiempo
de vida superior al año 1999. Por ello limitaron el rango de
fechas válidas a un intervalo que a menudo está entre 1993 o 1996
y 1999. Si en un momento dado encuentra una fecha fuera de este
rango, lo adapta a él.
Las combinaciones aquí pueden ser sorprendentes. La transición
puede dejar el año en 99, no cambiar por tanto el 19 y rearrancar
indefinidamente en 1999. Más probable es sin embargo que el 99 se
convierta en 00 y que al rearrancar la máquina el RTC contenga el
ya famoso 1900. En este caso y como la fecha menor que puede
trabajar pueden ser años como el 93 o el 96 pone el
correspondiente 1993 o 1996 y se lo entrega al sistema operativo para el cuál
esos años sí que son válidos y no hará nada con ellos.
Si en uno de estos PCés tratamos de poner manualmente una fecha
de 2000, esto provocará que el 19 se convierta en 20, pero dichas
BIOS suelen ignorar el byte de siglo y al encontrar el 00 vuelven
a efectuar la misma operación, pero sólo con los dos últimos
dígitos, generando años como 2093 o 2096 que también son válidos
para el sistema operativo que no nos avisará de ello y se
transportará al futuro con nosotros dentro ;)
¿Puede un sistema operativo "moderno" corregir el problema del hardware?
¡Ah, sí. El después!
Se suele hablar de "los PCés antiguos" cuando se hace referencia
a su conformidad 2000. Sería difícil de admitir que hoy en día
nos encontremos en el mercado ordenadores de los dos últimos
tipos si bien no era tan difícil a principios de 1998. Sin
embargo, en 1999 se han seguido vendiendo PCés que necesitan ser
rearrancados. Algunos además "amparados" en un programa de test
para el que conforme 2000 significa muy poco.
El problema con dichos PCés es reducidísimo. Se limita a aquellos que
estén funcionando en la transición al año 2000 y que a su vez un
programa acceda directamente al RTC o a la BIOS (según fallen uno o
los dos) en ese intervalo hasta que el PC sea re-arrancado.
¿Existen programas que pueden acceder directamente al RTC? Parece ser
que sí. Aunque a veces parece más aquello de "yo no creo en meigas
(brujas en gallego) ¡pero haberlas, haylas!"
Antiguamente se utilizaba el RTC y las llamadas a la BIOS con alguna
frecuencia, pero se fue abandonando. No obstante, la poca fiabilidad y
precisión del reloj del sistema en DOS y Windows hizo que algunos
desarolladores volviesen a la "vieja práctica" cuando necesitaban una
cierta precisión para sus aplicaciones.
Algunos sistemas operativos como Windows NT impiden a las aplicaciones
acceder directamente a ellos forzando a que se utilicen las APIs o
rutinas internas del Sistema, pero... dichas APIs *sí* que acceden al
RTC y a la BIOS. De hecho, en su sexta versión de los parches (Service
Pack) para Windows NT, Microsoft sigue tratando de eliminar el riesgo
que supone el que la corrección del RTC pueda llegar a realizarse
hasta una hora después de haberse producido una transición errónea.
Al margen de esto, algunos sistemas operativos "modernos" son capaces
en ocasiones de suplir lo que no hace el RTC ni la BIOS, lo que
también puede ser una solución en determinados casos.
Windows NT comprobará la fecha en el arranque y la convertirá a fecha
de 2000 sumándole 100 años si se encuentra una fecha en el RTC entre
1900 y 1919. Al margen de esto, dispone de un "demonio" (o proceso que
se ejecuta cada cierto tiempo) que aproximadamente cada hora después
de que el ordenador se haya puesto en marcha, comparará su propio
reloj con el del RTC y si encuentra una diferencia superior al minuto,
le pondrá su fecha a éste último. Todo ello si disponemos de una
versión de Windows NT con sus correspondientes parches de año 2000.
Windows 98 realiza una comprobación en el arranque del sistema y si
encuentra un 1900 lo convertirá en un 2000 (por lo menos así debería
ser).
Windows 95, Windows 3.x y MS-DOS a partir de la versión 5.0 pueden ser
utilizados para establecer la fecha del sistema correctamente la
primera vez que se encienda el ordenador en el año 2000 mediante el
comando DATE o el Panel de Control. Siempre y cuando, la fecha que nos
encontrásemos no fuera la esperada.
En el caso de los PCés que no soportan fechas de año 2000, se puede
poner una entrada en el AUTOEXEC.BAT que nos pida la fecha y la hora
cada vez que el PC se arranca. A muchos esta práctica les traerá
recuerdos ;)
Si el RTC o la BIOS no es conforme, se puede en general seguir
utilizando dichas máquinas, pero siempre sabiendo el riesgo que esto
conlleva y con las limitaciones que supone.
Recordemos una vez más, que estamos hablando únicamente del
problema de realizar la transición al año 2000 o de reconocerlo
como bisiesto. El que esto se haga bien no implica que el resto
de operaciones con fechas también lo hagan.