lunedì 1 dicembre 2008

Bug dell'anno 2038: catastrofe in arrivo??!?!


Come ben sappiamo,in ambiente professionale informatico,si tende ad utilizzare il Sistema Operativo "UNIX",inventato nel 1969 dai laboratori dell’ AT&T e Bell Labs.

Dato che i sistemi Unix(o Linux) hanno incominciato a misurare le date dal 1901, la variabile di tipo primitivo(TIME_T), all’interno della quale memorizzano i secondi, finirà la sua capienza nel 2038. Il giorno in cui il sistema verrà riazzerato, gli orologi così si resetteranno al Venerdì 13 Dicembre.

La misura del tempo di UNIX:

Storicamente i sistemi unix-like hanno sempre mantenuto due distinti tipi di dati per la misure dei tempi all'interno del sistema: "calendar time" (numero di sec. dalla mezzanotte del 1 GENNAIO 1970,O GMT) e "process time" (misurato in CLOCK TICK, misura il numero di interruzioni effettuate dal timer di sistema).


Per ciascun processo il kernel calcola tre tempi diversi:

* CLOCK TIME, il tempo reale.
* USER TIME, il tempo effettivo che il processore ha impiegato nell'esecuzione delle istruzioni del processo in user space.
* SYSTEM TIME, il tempo effettivo che il processore ha impiegato per eseguire codice delle system call nel kernel per conto del processo.

Analizziamo bene il problema:
La variabile "TIME_T" (numero intero a 32 bit di tipo signed) rappresenta il numero di secondi che sono trascorsi dalla mezzanotte del 1º gennaio 1970 (UTC, il tempo coordinato universale).

Il 19 gennaio 2038 alle ore 03:14:07 (GMT) la famosa variabile supererà la lunghezza dei 32 bit, pertanto i calcolatori a 32 bit potranno riscontrare diversi problemi, non essendo più in grado di rappresentare la variabile che indica con precisione la data.
Dopo questo momento, il contatore supererebbe il valore massimo, e verrebbe considerato come un numero negativo (in decimale -2147483648).

I computer leggeranno la data non come 2038 ma come 1901, causando un vero e proprio crash del sistema !!!!!

I sistemi Windows per ora non hanno ancora questo problema, dato che Windows è stato scritto molti anni dopo.

Risolvere il problema sui processori/sistemi operativi esistenti non è affatto semplice:

Cambiare il valore di time_t per usare un sistema a 64-bit renderebbe il sistema incompatibile con software, sistemi di memorizzazione e tutti gli strumenti che usano una rappresentazione binaria del tempo; il problema in sostanza sarebbe rimandato al 2106.


Infatti se usassimo una variabile di tipo "signed a 64-bit", si sposterebbe l'emergere del problema in avanti nel tempo di circa 290 miliardi di anni, spostando la data addirittura al di là della previsione di vita del sistema solare.
Proposte alternative, alcune delle quali in uso, sono il calcolo delle ore i millisecondi o i microsecondi, che abbreviano la vita utile delle macchine a soli, si fa per dire, 300.000 anni......(:o)