Qual è l'epoca di Unix, e come Unix Tempo di lavoro?

Nov 10, 2024
Linux
Mikhail Leonov / Shutterstock

Unix memorizza il tempo come il numero di secondi dal 1 ° gennaio 1970. E questo significa anche Linux. Spieghiamo questo sistema apparentemente strano, e perché il giorno del giudizio è stato programmato per il 2038.

La prima epoca UNIX

Goethe ( 1749-1832. ) dichiarato "ogni secondo è di valore infinito". È vero, ognuno di noi ha solo tanti secondi qui sul pianeta Terra, e non sappiamo quando il nostro ultimo secondo sarà. Ma conosciamo il nostro compleanno, e quando è iniziato il nostro conto alla rovescia mortale.

Unix. -come il Regina britannica -Ha due compleanni. O, più accuratamente, ci sono state due occasioni separate su cui ha iniziato a contare i secondi della sua esistenza. La prima volta che Unix ha iniziato a contare da era a mezzanotte 1 gennaio 1971.

Possiamo vederlo abbastanza chiaramente rivedendo una sezione della prima edizione del Manuale del programmatore UNIX , datato il 3 novembre 1971. Scorri verso il basso fino a pagina 13 di quella sezione, e vedrai una descrizione del (ora defunto) tempo comando. Ci hanno detto che " tempo Restituisce il tempo da 00:00:00, 1 gennaio 1971, misurato in sessi anni di secondo. "

I sistemi di calendari e i sistemi di tempo misurano il tempo a partire da un punto significativo in passato, come un evento cosmologico, la fondazione di un impero, o il successo di una rivoluzione. Nei sistemi operativi, un tempo e una data arbitraria sono scelti come punto da cui inizia il conteggio. Questo è il epoca per quel sistema operativo.

UNIX ha utilizzato un numero intero non firmato a 32 bit per tenere il conteggio del 60 ° di secondo dall'epoca. Questa è una variabile numerica in grado di contenere valori nell'intervallo da 0 a 4,294.967.295 (2 32. -1). Sembra molto. Ma il contatore incrementato a 60 volte al secondo e, poiché il manuale del programmatore sottolinea: "L'utente cronologico notò che 2 ** 32 sessi anni di secondo è solo di circa 2,5 anni."

Con un tasso di consumo di 60 numeri al secondo, il contatore avrebbe raggiunto il suo valore massimo l'8 aprile 1973, poco meno di 829 giorni dopo.

La seconda epoca UNIX

Inutile dire che questo è stato agito rapidamente. Il numero intero non firmato è stato sostituito con un 32 bit firmato numero intero. Potrebbe sembrare una scelta sorprendente perché un numero intero firmato è in grado di tenere un numero minore di valori positivi-2,147.483.647 (2 31. ) -Chan un intero non firmato. Tuttavia, la velocità del consumo è stata ridotta anche da 60 ° di secondo a pochi secondi.

Ci vuole più tempo per contare da 0 a 2.147.483.647 contando un numero al secondo rispetto a quello che deve contare da 0 a 4.294.967.295 a 60 conteggi al secondo. E da un bel margine. Il nuovo schema non ha colpito il suo valore massimo per poco più di 68 anni. Questo sembrava finora in futuro che l'epoca era persino resettata a un momento precedente. La nuova epoca è stata messa a mezzanotte il 1 gennaio 1970, UTC.

Quel punto 68 anni in futuro è ora innerviato. Per essere precisi, lo raggiungeremo alle 03:14:07 UTC il 19 gennaio, 2038.

Uno schema semplice ma efficace

Utilizzando un singolo numero intero per il contare il numero di passaggi di tempo da un determinato punto nel tempo è un modo efficiente per memorizzare il tempo. Non è necessario memorizzare strutture complicate di anni, mesi, giorni e tempi. ed è indipendente da paese, locale e fuso orario.

Moltiplicare il numero nel numero intero da parte della dimensione del tempo step-in questo caso, un secondo ti dà il tempo dall'epoca e la conversione da quella a formati specifici della locale con le regolazioni del fuso orario è relativamente banale.

Però ti dà un limite superiore incorporato. Prima o poi, premi il valore massimo è possibile contenere il tipo di variabile scelta. Al momento della stesura di questo articolo, l'anno 2038 è a soli 17 anni di distanza.

È simile ma leggermente diverso dal problema con i primi sistemi informatici del secolo scorso utilizzando due cifre per immagazzinare anni. Quando il calendario ha rotolato nel nuovo anno e nuovo secolo del 2000, un valore anno sarebbe stato immagazzinato come "00" essere interpretato come il 2000, o il 1900?

Correggere il cosiddetto " Bug Millennio "Si stima che abbia costato l'U.S. da solo oltre $ 100 miliardi e per aver preso migliaia di anni di uomo per affrontare a livello globale. Ci sono stati alcuni problemi nei primi giorni del Gennaio 2000, ma niente come i disastri che avrebbero avuto luogo se il bug fosse stato ignorato.

Il giorno del giudizio è posticipato

Poiché Linux e tutti i sistemi operativi Unix-LookAlike condividono lo stesso problema, il problema dell'anno 2038 è stato preso sul serio per un po 'di tempo, con correzioni aggiunte al kernel dal 2014. Questo è in corso con le correzioni essere aggiunto al kernel Di recente del 20 maggio del 2020 per affrontare il problema intero a 32 bit.

Naturalmente, un computer Linux funzionante contiene molto più di un kernel. Tutte le utility operative e le applicazioni userland che utilizzano il tempo di sistema attraverso le varie API e le interfacce devono essere modificate per aspettarsi valori a 64 bit. Anche i file systems. deve essere aggiornato Accettare timestamp da 64 bit per file e directory.

Linux è ovunque . Un guasto catastrofico in Linux significherebbe errori in tutti i tipi di sistemi basati su computer. Linux esegue la maggior parte del web, la maggior parte della nuvola pubblica e persino il veicolo spaziale. Gestisce case intelligenti e auto auto-guida. Gli smartphone hanno un kernel derivato UNIX nel loro cuore. Praticamente i firewall, i router e i router e i router e i modem della banda larga praticamente come i sistemi operativi incorporati all'interno della corsa di Linux.

È bello che Linux stia bene per essere riparato. Installeremo gli aggiornamenti e questo sarà quello. Ma quali sono le possibilità che tutti questi dispositivi saranno rattoppati e aggiornati? Molti di loro non saranno nemmeno in servizio da allora quindi sarà un punto moot, ma alcuni verranno ancora collegati. Nascosto in rientranze scure e polverose nelle stanze del server e nelle sale server e negli armadietti del rack forse, ma saranno lì, lavorando in silenzio, mentre i secondi scelgono di spuntare fino a circa un quarto di tre anni della mattina del 19 gennaio, 2038.

Ma i dispositivi del genere dovrebbero essere una minuscola minoranza. La stragrande maggioranza dei sistemi vedrà il tempo di crunch venire e andare senza incidenti. Ancora una volta, saremo in grado di rilassarci. Almeno, fino all'anno 2486 si avvicina, portando con sé lo stesso problema per i sistemi che utilizzano numeri interi basati su 64 bit per contare il tempo dall'epoca.

Il comando della data

Noi possiamo utilizzare il Data comando Per verificare Linux e altri derivati ​​UNIX utilizzano ancora lo schema originale e semplice di memorizzare il valore di tempo come numero di secondi dall'epoca.

Usando il Data Comando senza parametri Stampa la data e l'ora corrente sulla finestra del terminale. Hai anche mostrato il fuso orario che il tempo è regolato per. EDT è l'ora legale orientale, il che significa che il nostro computer di prova è nel fuso orario orientale e l'ora legale è in effetti. Quando l'ora legale non è in vigore, il fuso orario orientale utilizza il tempo standard orientale.

Per vedere il valore intero sottostante, possiamo utilizzare una stringa di formato di visualizzazione. Formato Le stringhe hanno un segno più "+" come primo carattere. Il token del formato "% s" significa "mostra i secondi dall'epoca."

Se prendiamo il valore dei secondi restituito da Data e nutrirlo di nuovo nel Data comando con il. -D (Visualizzazione del tempo descritto da una stringa), lo convertirà in una data e un'ora regolare.

 Data 
 Data +% s 
 Date -D  @ 1633183955  

Possiamo dimostrare che il valore intero rappresenta davvero il tempo visualizzando il numero di secondi, dormendo per 10 secondi e mostrando il nuovo numero di secondi. I due valori interi saranno diversi da esattamente 10.

 Data +% s & amp; & amp; Sleep 10 & amp; & amp; Data +% s 

Abbiamo visto che possiamo passare un numero di secondi al Data comando e converte in un tempo e data per noi. Se facciamo solo quello usando zero secondi come input il nostro valore, Data dovrebbe stampare la data e l'ora dell'Unix Epoch.

 TZ = 'UTC' DATE -D  @ 0  + '% X% R' 

Il comando si rompe in questo modo:

  • TZ = 'UTC' : L'epoca è stata impostata utilizzando il tempo universale coordinato (UTC, quindi dobbiamo dire Data usare UTC. Il costrutto "TZ =" imposta solo il fuso orario efficace per il comando corrente.
  • Data : Il Data comando.
  • -D @ 0. : Diciamo Data Per utilizzare una stringa come input, non il tempo "in questo momento." La stringa che passiamo contiene zero secondi.
  • + '% X% r' : La stringa di formato di output. Il token del formato "% x" dice Data per visualizzare l'anno, il mese e il giorno. Il token del formato "% r" indica Data Per utilizzare il formato 24 ore per le ore e i minuti. Poiché ci sono spazi nella stringa di formato, avvolgiamo l'intera stringa in virgolette singole " " "In modo che la corda trattata come un singolo oggetto.

Come previsto, l'uscita è a mezzanotte il 1 ° gennaio 1970.

IMPARENTATO: Come visualizzare la data e l'ora nel terminale Linux (e usarlo in Script di Bash)

Fino alla prossima volta

Semplice è spesso il migliore. Il conteggio dei secondi da un dato fisso è il modo più semplice per segnare il passare del tempo. Ma il passaggio del tempo porta nuove sfide. Con le correzioni che sono state messe in atto, sembra che siamo chiari fino all'anno 2486.

Penso che sia sicuro dire che ci preoccuperemo di questo un po 'più vicino al tempo.


Linux - Articoli più popolari

Come utilizzare DB Browser per SQLite su Linux

Linux Dec 16, 2024

Fatmawati Achmad Zaenuri / Shutterstock Browser DB per SQLite Consente di visualizzare e modificare i database SQLITE su Linux. È possibile progettar..


Come elaborare una riga di file per linea in uno script Bash Linux

Linux Feb 3, 2025

Fatmawati Achmad Zaenuri / Shutterstock E 'abbastanza facile da leggere il contenuto di una riga file di testo di Linux per riga in un guscio di script finch..


Come nascondere tutte le icone del desktop su Mac

Linux Jun 23, 2025

Krisda / Shutterstock. Il tuo Mac Desktop è un casino? Non voglio davvero organizzare tutto? Non preoccuparti, puoi utilizzare un comando terminale per nascon..


Come utilizzare Strace per monitorare le chiamate di sistema Linux

Linux Jun 23, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com I programmi Linux chiedono il kernel fare alcune cose per loro. Il strace Comando rivela qu..


Docker per principianti: tutto ciò che devi sapere

Linux Jun 15, 2025

Docker. crea applicazioni confezionate chiamato container. Ogni contenitore fornisce un ambiente isolato simile a a macchina virtuale (VM). A differenza dei ..


Cosa c'è di nuovo in Debian 11 "Bullseye"

Linux Jul 22, 2025

Debian. , il progenitore di molte altre distribuzioni Linux, ha reso la versione 11 disponibile nella fase di test. Stai pesando le virtù del potenziamento, o sei solo curioso ..


Ubuntu 21.10 arriva con un gnome 40 desktop personalizzato

Linux Oct 14, 2025

Ubuntu. Se sei un utente di Ubuntu, o qualcuno che sta pensando di provarlo, oggi è una buona giornata. Canonical ha ufficialmente rilasciato Ubuntu 21.10 con un desktop..


Come trovare il PID di un processo Linux con PIDOF o PGREP

Linux Nov 15, 2024

Lavorare con un processo Linux spesso significa conoscere il suo ID di processo o PID. È un numero unico dato a ogni software di corsa. Ecco due modi per scoprire di cosa si tratta. ..


Categorie