År 2020 är betydelsefullt för Unix: i början av året firade det ursprungliga operativsystemet 50 år. Unix-tiden, även känd som 'epoken tid', är antalet sekunder som har gått sedan den 1 januari 1970. Men vad oroar kärnutvecklarna med anledning av Unix femtioårsjubileum?

Även om vissa av de tidiga Unix-utvecklingarna föregår den officiella början på dess 'epok', förblir den 1 januari 1970 nollpunkten i tiden för POSIX. Så från och med 1 januari 2020 har plattformen officiellt fyllt 50 år.
Tid Unix i förhållande till människans tid
Sett ur människans tids perspektiv är 50 år en lång period. Ur Unix-tidens perspektiv är det inget särskilt med 50 år, 43 år skulle ha varit minst lika betydelsefullt. Unix-system (inklusive Linux) lagrar datum- och tidsvärden som antalet sekunder som har gått sedan 1970-01-01 00:00:00 UTC, med en registrering i 32 bitar. För att bestämma hur många sekunder som har gått sedan dess, och därmed det aktuella Unix-tidsvärdet, kan man köra kommandot:
$ date +%s
1576883876
Argumentet %s efter kommandot date anger visningen av det aktuella datumet och tiden som antalet sekunder sedan början av 1970-01-01.

Vilket maximalt datum kan system lagra Unix?
För att förstå hur mycket tid en Unix-system kan rymma, måste man bedöma kapaciteten hos ett 32-bitarsfält. Detta kan beräknas på följande sätt:
$ echo ‘2^32’ | bc
4294967296
Men eftersom Unix förutsätter lagring av både positiva och negativa tal, reserveras en bit för tecken, vilket minskar tidsvärdet till:
$ echo ‘2^31’ | bc
2147483648
Och eftersom Unix-numereringen börjar med 0 innebär det att vi har 2 147 483 648 värden, men det största värdet är 2 147 483 647 — Unix-datum och tid kan inte överstiga detta antal. Precis som en bils mätare inte kan visa mer än 999 999 kilometer — lägg till 1 och värdet återställs.
Hur länge varar ett år i sekunder?
Antalet sekunder på ett år kan beräknas enligt följande:
$ expr 24 * 60 * 60 * 365
31536000
Under ett skottår läggs ytterligare en dag till:
$ expr 24 * 60 * 60 * 366
31622400

Hur visade Unix sin 50:e födelsedag?
Den 1 januari 2020 klockan 00:00 kommer tidsstämpeln att vara 1577836800. Beräkningen blir något mer komplicerad eftersom skottår måste beaktas. Fram till Unix-epokens början har det funnits 12 sådana år, från 1972 fram till 2016. Det innebär att det har gått 38 vanliga år.
Så här ser expr-kommandot ut för att räkna sekunder som har gått de senaste 50 åren:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Eller så här, med tidigare gjorda beräkningar:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Detta sätt att registrera tid gjorde Unix-systemen osårbara för Y2K-problemet, som fick folk att oroa sig i slutet av 1999 för att övergången till år 2000 skulle skada datorsystem. Svårigheterna blev mycket färre än förväntat. Faktum är att endast applikationer som registrerade år i tvåsiffrigt format stötte på problem med dateringar. Många utvecklare gjorde en extra insats för att säkerställa att deras applikationer inte skulle påverkas av Y2K-problemet.
När kommer tiden Unix att stöta på problem?
Liknande svårigheter väntar Unix-system tidigast 2038, när datum som lagras i det ovan beskrivna formatet överskrider 32-bits minnesutrymme. Det är fortfarande 18 år kvar, men kärnutvecklare arbetar redan med att undvika kommande störningar.
2038-problemet kallas ibland Y2K38-problemet. Om det inte löses innan tisdagen den 19 januari 2038, kan systemen efter detta datum tro att det är år 1901. Ett sätt att lösa detta problem är att övergå till en 64-bitars representation av datum och tid. Vissa anser att detta också kommer att vara mycket mer komplicerat än vad det kan tyckas.
I vilket fall som helst är det för tidigt att få panik. Det som verkligen är viktigt idag är att det är 50-årsjubileum för Unix-system, som erkänns som en av de mest betydelsefulla operativsystemen i historien.
Källa: 3dnews.ru
