Годината 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
В Leap year се добавя още един ден:
$ 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
