06 octubre 2009

Veinte Treinta y Ocho


Muchos recordareis el panico. Hace casi 10 años una nube negra se cernia sobre el mundo. El apocalipsis llegaba, no en forma de meteorito, pandemia, agujero negro, guerra atomica, invasion alienigena o posesion demoniaca. Aquella vez, el temor que habia era el del Efecto 2000. Para los que hayais vivido en una concha durante los ultimos años, os resumo:
La mayoria de los programas informaticos desarrollados hasta los 50 usaban dos digitos para la fecha. De esta suerte 01 corresponde a 1901, 63 a 1963 y 99 a 1999. Mas tarde, según se acercaba el año 2000 vieron que cuando llegaran al final de 99 y empezaran el 00 seria 1900 y los sistemas colapsarian al tener fechas de 100 años de diferencia (en realidad es mas sutil pero basicamente es eso). Los usuarios de UNIX respiraron tranquilos.
Contar fechas se basa siempre en el mismo sistema. Se toma una fecha de referencia y se cuenta a partir de ahi. Los cristianos (mejor dicho la sociedad occidental) usan el 1 de enero del año 1 despues de Cristo (aunque ya vimos que Cristo habia nacido entre el 5 Antes de Cristo y el 9 Despues de Cristo), los musulmanes toman como inicio la "Hégira" de Mahoma, los hindues tienen varias Eras que empiezan en el año 0 (que para eso lo inventaron). Y los sistemas UNIX empiezan a contar desde el 1 de enero de 1970. La gracia del sistema de UNIX es que cuenta segundos y los almacena en una variable llamada time_t. En la mayoria de los sistemas basados en UNIX el tipo de dato para esa variable es de 32 bits (31 para el rango y 1 para el signo, de manera que puede almacenar desde el -2.147.483.648 al 2.147.483.647). Lamentablemente dos mil millones de segundos solo da para contar desde el 1 de enero de 1970 hasta el 19 de Enero de 2038 a las 3 y cuarto de la madrugada aprox. Cuando llegue ese momento, todos los relojes de todos los sistemas de 32 bits se volveran gilipuás y empezaran a contar desde Diciembre de 1901 (68 años y pico de diferencia).
Photobucket
El motivo por el que la cuenta fallara es porque todos los digitos para la fecha se encontraran "ocupados" y el desbordamiento afectara al bit del signo, pasandolo a negativo. Se conoce este fallo desde hace mucho, pero la solucion es dificil. Si bien lo ideal seria almacenar el dato en una variable de 64 bits (capaz de almacenar valores desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, lo que aplazaria el fallo hasta el 4 de diciembre del año 292.277.026.596, teniendo en cuenta que se calcula que le quedan 5.000 millones de años al Sol, no hay prisa) el cambio es complejo ya que si bien una maquina de 64 bits puede manejar un sistema de 32, no sucede al contrario. Habria que cambiar todo el sistema por uno de 64 bits, con una arquitectura de 64 bits y eso no solo cuesta pasta.Habria que desarrollar de nuevo todas las aplicaciones porque en mayor o menor medida, todas usan calculos de tiempo y aunque el sistema soporte un programa corriendo a 32 bits, en el momento en que esa aplicacion calcule una fecha, cascará.
  • La Frase de Hoy: Pierde una hora por la mañana y la estarás buscando todo el día. Richard Whately (1787-1863) Arzobispo anglicano y educador británico.
  • Para el que no lo Sepa: un bit es la unidad minima de informacion que se puede tener En el sistema binario equivalea un 1 o un 0 que combinados en sucesiones de bits pueden almacenar todo tipo de informacion agrupada en Bytes (8 bits), Kilobytes (KB=1024 Bytes, no confundir con Kb=kilobits=1024 bits), Megabytes (MB=1024 KB), Gigabytes (GB=1024 MB) en incluso Terabytes (TB=1024 GB). Cualquier simbolo escrito (llamado caracter) se puede almacenar en un Byte, por ello se toma como unidad base de facto en computacion.



¿Que son 8 Boca-bits?
Un Boca-Byte.

9 comentarios:

Sota dijo...

El último chiste es como para estrangularte, reconocelo...

Erynus D'Alecto Graeme dijo...

Venga, va. Un Bis para la aficcion.
Existen 10 tipos de personas, los que pillan el chiste y los que no :P

Sota dijo...

Que le corten la cabeza!

Logabe dijo...

'¬¬

El Mago Oskuro dijo...
Este comentario ha sido eliminado por el autor.
El Mago Oskuro dijo...

¿Por que volverían a diciembre de 1901? ¿No sería lo logico que volvieran a 1970 e "iniciaran" de nuevo el ciclo?

Erynus D'Alecto Graeme dijo...

Lo explico en la entrada. Cuando el contador se desborda en vez de dos millones de segundos cuenta "menos dos millones" y asi como 1970 + 2 millones de segundos es octubre de 2038, 1970 MENOS 2 millones de segundos es 1901. Cuando se desborda no se pone a cero, se vuelve negativo y empieza a descontar porque 0+1=1 pero 1+1=0.
La magia del binario.

Amatista dijo...

Oh no!!! pensé que nunca mas volvería a oir ese chiste!! jajaja

Que gracia un efecto 2038... ahora que estoy iniciandome en linux... si es que la suerte me persigue... pero yo corro más...

Erynus D'Alecto Graeme dijo...

Hombre, para el 2038 ya tendremos solucion. A ver que se me ocurre ;)