2020 година е забележителна за Unix: в самото начало на годината оригиналната операционна система навършва 50 години. Времето на Unix, известно също като "дата на епохата", е количеството секунди, изминали от 1 януари 1970 година. Но какво тревожи разработчиците на ядрото по повод полувековния юбилей на Unix?

Въпреки че някои от ранните разработки на Unix предшестват официалното начало на неговата "епоха", 1 януари 1970 година остава нулевата точка във времето на POSIX. Затова от началото на 1 януари 2020 година официално платформата навърши точно 50 години.
Време Unix срещу човешкото време
От гледна точка на човешкото време, 50 години е дълъг период. От гледна точка на времето на Unix, няма нищо особено в 50 години, а 43 години биха били не по-малко значими. Unix системите (включително Linux) съхраняват стойности за дата и време като брой секунди, изминали от 1970-01-01 00:00:00 UTC, с запис в 32 бита. За да определите колко секунди са изминали от това време и следователно текущата стойност на времето на Unix, можете да изпълните командата:
$ date +%s
1576883876
Аргументът %s след командата date задава показването на текущата дата и време под формата на брой секунди от началото на 1970-01-01.

Каква е максималната дата, която могат да съхраняват системите Unix?
За да разберете колко време може да побере Unix система, трябва да оцените капацитета на 32-битовото поле. Това може да бъде изчислено по следния начин:
$ echo ‘2^32’ | bc
4294967296
Обаче, тъй като Unix предвижда запазването и на отрицателни числа, един бит се резервира за знака, което намалява стойността на времето до:
$ echo ‘2^31’ | bc
2147483648
И тъй като номерирането на Unix започва от 0, това означава, че имаме 2 147 483 648 стойности, но най-голямата е 2 147 483 647 — стойността на датата и времето на Unix не може да надвишава това число. Както километражът на автомобила не може да показва повече от 999 999 километра — добавете 1 и стойността ще се нулира.
Колко трае година в секунди?
Броят на секундите в годината може да се изчисли по следния начин:
$ expr 24 * 60 * 60 * 365
31536000
В високосна година се добавя още един ден:
$ expr 24 * 60 * 60 * 366
31622400

Как Unix показва своя 50-ти рожден ден?
На 1 януари 2020 година в 12:00 часа ще бъде времето 1577836800. Изчислението е малко усложнено, защото трябва да се вземат предвид високосните години. От началото на епохата на Unix е имало 12 такива години, започвайки от 1972 година и приключвайки през 2016 година. Тоест, обикновени години са изминали 38.
Така изглежда командата expr за броене на секундите през последните 50 години:
$ expr 24 * 60 * 60 * 365 * 38 + 24 * 60 * 60 * 366 * 12
1577836800
Или така, като се вземат предвид направените предишни изчисления:
$ expr 31536000 * 38 + 31622400 * 12
1577836800
Този начин на записване на времето направи Unix системите устойчиви на проблема Y2K, заради който хората в края на 1999 година се тревожеха, че преминаването към 2000 година може да повреди компютърните системи. Проблемите се оказаха много по-малко от очакваното. Всъщност, само приложения, записващи годините в двуцифрен формат, се сблъскаха с нулирането на датите. Много разработчици направиха допълнителна работа, за да се уверят, че техните приложения няма да бъдат засегнати от проблема Y2K.
Кога Unix ще се сблъска с проблеми?
Подобни трудности очакват Unix системите не по-рано от 2038 година, когато датите, запазени в описания по-горе формат, ще надхвърлят 32-битовото пространство. Остават още 18 години, но разработчиците на ядрото вече работят, за да избегнат предстоящите сривове.
Проблемът от 2038 година понякога се нарича проблем Y2K38. Ако не бъде решен до вторник, 19 януари 2038 година, след тази дата системите могат да мислят, че е настъпила 1901 година. Един от начините за решаване на този проблем е преминаване на 64-битово представяне на информацията за дата и време. Някои смятат, че и това ще бъде много по-сложно, отколкото изглежда.
Във всеки случай, все още е рано за паника. Всъщност, днешният важен момент е 50-годишният юбилей на системите Unix, които се признават за една от най-влиятелните операционни системи в историята.
Източник: 3dnews.ru
