En la norma IEEE 1003, también conocido como POSIX, se definen una serie de estándares que normalizan una serie de interfaces para sistemas operativos y, de esta forma, poder crear aplicaciones multiplataforma. Entre los estándares que define POSIX encontramos la medida de tiempos de los sistemas de 32 bits; es decir, el reloj que usan estos sistemas.
El reloj que tienen muchos computadores no es más que un contador de segundos que se va incrementando con cada segundo que pasa. La gracia de este sistema es que se toma una fecha como referencia y, cuando se quiere saber la hora, se mira el contador de segundos y se hace la traslación a formato de fecha tradicional (día, mes, año, hora, minutos y segundos). Concretemente, la fecha de referencia es el 1 de enero de 1970 y, por tanto, el tiempo se mide como el número de segundos que han pasado desde dicha referencia.
En un sistema de 32 bits, la variable del tiempo se codifica como un entero con signo y, por tanto, se deja un bit para almacenar el signo y los 31 bits restantes para codificar los segundos. Si hacemos el cálculo de 2 elevado a 31 obtenemos como resultado 2.147.483.648 segundos que es un equivalente a unos 68 años.
Este gran salto al pasado, evidentemente, no es algo simple y es un bug que se mira con cierta atención porque, al igual que ocurría en 1999, nadie sabe a ciencia cierta los efectos que podría tener en los sistemas desplegados.
¿Son los 64 bits una solución al problema? Obviamente, migrar hacia sistemas de 64 bits elimina el problema pero existen muchos sistemas antiguos (por ejemplo basados en COBOL) que sí requerirán soluciones (o migraciones).
Si alguien tiene curiosidad con este tema, quizás le interese probar la herramienta de conversión que ofrecen en Epoch Converter.
Fuente: Alt1040
0 comentarios:
Publicar un comentario