Villanos.net El Villano
- el heraldo de Villagüeb -
Año 2000 y relojes
Impuesto de conexión...
¡Pégalo en tu página!
Jom
Buscar
Suscripción
Trastero
Kiosco
Top
E-mail
Editorial
Opinión
Técnicas
¡L@ hicimos!
i-niciativas
Villagüeb
Navegando
CajónDeSastre

Los relojes de Mi PC

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.

Escrito por Colegota
(Antonio Montorio en el Mundo Real)
Estas páginas se ven mejor con... ¡TARIFA PLANA! Hecho por villanos.net en Enero de 1900