Qu'est-ce qu'une ère Unix et comment fonctionne l'heure Unix ?

Unix stocke le temps en nombre de secondes depuis le 1er janvier 1970. Cela signifie que Linux le fait aussi. Nous expliquons ce système apparemment étrange et pourquoi le Jugement dernier se déroule en 2038.

Qu'est-ce qu'une époque Unix et comment fonctionne le temps Unix ? -%catégories

Première ère Unix

Goethe (1749-1832) a déclaré que « chaque seconde a une valeur infinie ». C'est vrai, nous avons tous tellement de secondes ici sur la planète Terre, nous ne savons pas quand sera la dernière seconde. Mais nous connaissons notre anniversaire et quand le compte à rebours mortel a commencé.

Yonks - comme la reine britannique - a deux anniversaires. Ou, plus exactement, il y a eu deux occasions distinctes où j'ai commencé à compter les secondes de mon existence. C'était la première fois qu'Unix commençait à compter depuis minuit le 1971er janvier XNUMX.

Nous pouvons le voir clairement en examinant une section de la version 3 du Guide du programmeur Unix, datée du 1971 novembre 13. Faites défiler jusqu'à la page 00 de cette section et vous verrez une description de la commande time (qui n'existe plus) . On nous dit que "Le temps renvoie le temps depuis 00:00:1, le 1971er janvier XNUMX, mesuré en soixante secondes".

Les calendriers et les systèmes temporels mesurent le temps à partir d'un moment important du passé, tel qu'un événement cosmique, la fondation d'un empire ou le succès d'une révolution. Dans les systèmes d'exploitation, une heure et une date arbitraires sont choisies comme point de départ du décompte. C'est l'ère de ce système d'exploitation.

Unix a utilisé un entier non signé de 32 bits pour contenir 60 millisecondes depuis l'époque. Il s'agit d'une variable numérique capable de contenir des valeurs comprises entre 0 et 4 294 967 295 (232-1). Cela semble beaucoup. Mais le compteur augmente à un rythme de 60 fois par seconde, et comme le note le guide du programmeur, "un utilisateur soucieux du temps remarquera que 2**32 soixante d'une seconde ne représentent qu'environ 2.5 ans".

Avec un taux de consommation de 60 chiffres par seconde, le compteur aurait atteint sa valeur maximale le 8 avril 1973, un peu moins de 829 jours plus tard.

Deuxième ère Unix

Inutile de dire que cette action a été prise rapidement. L'entier signé a été remplacé par un entier non signé de 32 bits. Cela peut sembler un choix surprenant car un entier de signe est capable de contenir moins de valeurs positives - 2 147 483 647 (231) - qu'un entier non signé. Cependant, la vitesse de consommation a également été réduite de 60 millisecondes à des secondes entières.

Lisez aussi:  Plex utilisera ChatGPT pour créer vos propres listes de lecture musicales

Compter de 0 à 2 147 483 647 prend plus de temps que compter de 0 à 4 294 967 295 à 60 par seconde. Et par une large marge. Le nouveau régime n'atteindra pas sa valeur maximale dans un peu plus de 68 ans. Cela semblait si loin dans le futur que l'ère a été repoussée à un point antérieur dans le temps. Le Nouvel Âge est fixé à minuit le 1er janvier 1970, UTC.

Ce point 68 ans dans le futur est maintenant alarmant. Pour être exact, nous y arriverons à 03:14:07 UTC le 19 janvier 2038.

Schéma simple mais efficace

L'utilisation d'un seul entier pour compter le nombre de pas de temps à partir d'un moment donné est un moyen efficace de stocker le temps. Vous n'avez pas besoin de stocker des structures complexes pendant des années, des mois, des jours et des heures. Il est indépendant du pays, des paramètres régionaux et du fuseau horaire.

Multiplier le nombre par l'entier de la taille du pas de temps - dans ce cas, XNUMX seconde - vous donne le temps à partir de l'époque, et la conversion de cela en formats spécifiques aux paramètres régionaux avec des ajustements de fuseau horaire est relativement triviale.

Cela vous donne cependant une limite supérieure intégrée. Tôt ou tard, vous atteindrez la valeur maximale que vous pouvez conserver dans le type de variable que vous avez choisi. Au moment d'écrire cet article, 2038 n'est que dans 17 ans.

Il est similaire mais légèrement différent du problème des premiers systèmes informatiques du siècle dernier utilisant deux chiffres pour stocker les années. Lorsque le calendrier passera à la nouvelle année et le nouveau siècle à l'an 2000, la valeur de l'année stockée comme "00" sera-t-elle interprétée comme 2000 ou 1900 ?

On estime que la correction des soi-disant «erreurs du millénaire» a coûté aux États-Unis à eux seuls plus de 100 milliards de dollars et a pris des milliers d'années à résoudre à l'échelle mondiale. Il y a eu quelques problèmes au cours des premiers jours de janvier 2000, mais rien à voir avec les catastrophes qui se seraient produites si le bogue avait été ignoré.

Étant donné que Linux et tous les systèmes d'exploitation de type Unix partagent le même problème, le problème de 2038 est pris au sérieux depuis un certain temps, des correctifs étant ajoutés au noyau depuis 2014. Cela se poursuit avec les correctifs ajoutés au noyau récemment comme janvier 2020. Pour résoudre le problème des entiers 32 bits.

Lisez aussi:  5 façons de réduire les reflets IPS gênants

Bien sûr, un ordinateur Linux fonctionnel a bien plus qu'un simple noyau. Tous les lanceurs et applications utilisateur qui tirent parti de l'heure système via diverses API et interfaces doivent être modifiés pour s'attendre à des valeurs 64 bits. Les systèmes de fichiers doivent également être mis à jour pour accepter les horodatages 64 bits pour les fichiers et les répertoires.

Linux est partout. Une panne catastrophique de Linux pourrait signifier la panne de toutes sortes de systèmes informatiques. Linux exécute la plupart du Web, la plupart du cloud public et même des engins spatiaux. Elle exploite des maisons intelligentes et des voitures autonomes. Les smartphones ont en leur cœur un noyau dérivé d'Unix. Pratiquement tout, comme les pare-feu de réseau, les routeurs, les modems à large bande, qui possède des systèmes d'exploitation intégrés fonctionne sous Linux.

C'est bien que Linux soit sur la voie d'un correctif. Nous installerons les mises à niveau et elles le seront. Mais quelles sont les chances que tous ces appareils soient patchés et mis à jour ? Peu d'entre eux seront en service d'ici là, ce sera donc un point discutable, mais certains resteront à l'écart. Cachés dans des recoins sombres et poussiéreux des salles de serveurs et des étagères, peut-être, mais ils seront là, travaillant tranquillement, alors que les secondes vacillent jusqu'à environ trois heures et quart le matin du 19 janvier 2038.

Mais des appareils comme celui-ci devraient être une infime minorité. La grande majorité des systèmes verront le temps de crise aller et venir sans incident. Une fois de plus, nous allons pouvoir nous détendre. Au moins, jusqu'à l'approche de l'année 2486, cela posait exactement le même problème pour les systèmes utilisant des entiers 64 bits pour calculer le temps depuis l'époque.

Ordre de l'historique

Nous pouvons utiliser la commande date pour vérifier Linux et d'autres dérivés d'Unix qui utilisent toujours le schéma simple d'origine pour stocker la valeur temporelle en nombre de secondes depuis l'époque.

L'utilisation de la commande date sans aucun paramètre imprime la date et l'heure actuelles dans la fenêtre du terminal. Il vous montre également le fuseau horaire pour lequel l'heure est réglée. L'EST est l'heure avancée de l'Est, ce qui signifie que notre ordinateur de test se trouve dans le fuseau horaire de l'Est et que l'heure d'été est en vigueur. Lorsque l'heure d'été n'est pas en vigueur, le fuseau horaire de l'Est utilise l'heure standard de l'Est.

Lisez aussi:  Comment vérifier si votre téléphone est déverrouillé

Pour connaître la valeur de l'entier primaire, nous pouvons utiliser la chaîne de format d'affichage. Les chaînes de format contiennent le signe plus « + » comme premier caractère. Le jeton de format « %s » signifie « Afficher les secondes depuis l'époque ».

Si nous prenons la valeur des secondes renvoyée par date et la saisissons à nouveau dans la commande date à l'aide de l'option -d (heure d'affichage indiquée par une chaîne), nous la reconvertirons en une date et une heure normales.

données
date + %s
daté @ 1633183955

Qu'est-ce qu'une époque Unix et comment fonctionne le temps Unix ? -%catégories

Nous pouvons montrer que la valeur entière représente vraiment le temps en affichant le nombre de secondes, en dormant pendant 10 secondes et en affichant le nouveau nombre de secondes. Les deux valeurs entières différeront d'exactement 10.

date +%s && dormir 10 && date +%s

Qu'est-ce qu'une époque Unix et comment fonctionne le temps Unix ? -%catégories

Nous avons vu que nous pouvons passer un certain nombre de secondes à la commande date et cela se transforme en une heure et une date pour nous. Si nous le faisons avec zéro seconde comme valeur d'entrée, la date devrait imprimer la date et l'heure de l'ère Unix.

TZ='UTC' date -d @0 +'%x %R'

Qu'est-ce qu'une époque Unix et comment fonctionne le temps Unix ? -%catégories

Il se décompose comme suit :

  • TZ = "UTC": L'ère est définie à l'aide du temps universel coordonné (UTC, nous devons donc indiquer la date pour utiliser UTC. La configuration "TZ =" spécifie uniquement le fuseau horaire effectif pour la commande actuelle.
  • date : historique des commandes.
  • -d @ 0 : nous disons la date en utilisant une chaîne en entrée, pas l'heure "maintenant". La chaîne que nous passons n'a pas de seconde.
  • + '% x %R' : la chaîne de format de sortie. Le jeton de format « %x » indique la date pour afficher l'année, le mois et le jour. Le jeton de format « %R » indique à la date d'utiliser le format 24 heures pour les heures et les minutes. Comme il y a des espaces dans la chaîne de format, nous enveloppons la chaîne entière entre guillemets simples "" afin que la chaîne soit traitée comme un élément unique.

Comme prévu, la production est à minuit le 1er janvier 1970.

Jusqu'à la prochaine fois

La simplicité est souvent la meilleure. Compter les secondes à partir d'une donnée fixe est le moyen le plus simple de discerner le passage du temps. Mais le passage du temps apporte avec lui de nouveaux défis. Avec les réformes qui ont été mises en place, nous semblons être clairs jusqu'en 2486.

Je pense qu'il est prudent de dire que nous allons bientôt nous en inquiéter.

Vous pourriez l'aimer aussi