sábado, 21 de julio de 2007

Unix Time y el efecto 2038

El efecto 2000, fue un error de software causado por la norma que habían adoptado los programadores (generalmente para economizar memoria) al omitir los 2 primeros dígitos al valor del año, asumiendo que el software sólo funcionaría durante los años cuyos nombres comenzaran con 19. De esta manera, para estos programas, la fecha después del 31 de diciembre de 1999, sería el 1 de enero de 1900 en vez de 1 de enero de 2000.
Después de muchos rumores de caos y catástrofes económicas en el mundo entero, el 1 de enero del año 2000 se salvó con problemas menores.
La próxima fecha similar será el 19 de enero de 2038, en la que se producirá un desbordamiento tanto en sistemas UNIX, como en otros que usen los lenguajes C, PHP y SQL. Estos sistemas utilizan el formato de fecha/hora Unix Time Stamp, que se basa en contar el número de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00.
En la mayoría de sistemas de 32 bits, el tipo de dato time_t usado para guardar el contador de segundos es un entero de 32 bits con signo, es decir, que puede representar un rango de números entre -2.147.483.648 y 2.147.483.647 (-2^31 y 2^31-1; 1 bit para el signo, y 31 para el valor absoluto), por lo que el último segundo representable con este formato será a las 03:14:07 UTC del 19 de enero de 2038, cuando el contador llegue a 2147483647. Un segundo después, el contador se desbordará, y saltará al valor -2.147.483.648, que causará el fallo de programas que interpretarán el tiempo como que están en 1901 ó 1970 (dependiendo de la implementación), en vez de 2038.
La única solución factible a este problema, aunque todavía estemos un poco lejos de ella, sería usar un entero de 64 bits, con procesadores de 64 bits también, lo que retrasaría la fecha del problema unos 290 mil millones de años, hasta el domingo, 4 de diciembre del año 292.277.026.596 a las 15:30:08 UTC.

Link: Unix Time

No hay comentarios:

Publicar un comentario