30 بهمن 1404
چرا تاریخ کامپیوتر از ۱ ژانویه ۱۹۷۰ شروع میشود؟
آشنایی با مفهوم Epoch Time و مشکل سال ۲۰۳۸
اگر از کامپیوتر بپرسید «الان چه تاریخی است؟»، در واقع او تاریخ را نمیفهمد — بلکه فقط ثانیهها را میشمارد.
از بامداد ۱ ژانویه ۱۹۷۰، یک شمارنده در سیستمهای مبتنی بر یونیکس شروع به کار کرده است؛ شمارندهای که هر ثانیه یک واحد افزایش پیدا میکند. هر تاریخی که امروز روی صفحه میبینید، در اصل تبدیل همین عددِ ثانیهها به قالب قابل فهم برای انسان است.
به این نقطهی شروع، میگوییم:
Epoch Time (زمان مبدأ)
واژهی «Epoch» به معنای آغاز یک دوره یا عصر است. در دنیای سیستمعاملها، این مفهوم با شکلگیری Unix تثبیت شد.
زمانی که Dennis Ritchie و همکارانش روی یونیکس کار میکردند، تصمیم گرفتند برای سادهسازی مدیریت زمان، یک مبدأ مشخص تعریف کنند. نتیجه این شد:
زمان در سیستم برابر است با تعداد ثانیههای سپریشده از ۰۰:۰۰:۰۰ اول ژانویه ۱۹۷۰ (UTC)
پشت صحنه نمایش تاریخ در کامپیوتر
وقتی شما مثلاً تاریخ «۲۰ فوریه ۲۰۲۶» را میبینید، سیستم در واقع:
-
عدد بزرگی از ثانیهها را نگه داشته
-
آن را با الگوریتمهای ریاضی
-
به سال، ماه، روز، ساعت و دقیقه تبدیل کرده است
پس در سطح پایین، تاریخ چیزی جز یک عدد صحیح (Integer) نیست.
محدودیت سیستمهای ۳۲ بیتی و مشکل سال ۲۰۳۸
در کامپیوترهای ۳۲ بیتی، زمان به صورت یک عدد صحیح ۳۲ بیتی ذخیره میشود.
بازهی این عدد برابر است با:
-
از −2³¹
-
تا 2³¹ − 1
یعنی تقریباً از منفی ۲ میلیارد تا مثبت ۲ میلیارد.
حالا نکتهی مهم:
در تاریخ ۱۶ ژانویه ۲۰۳۸، این شمارنده به حداکثر مقدار خود میرسد.
با اضافه شدن یک ثانیه دیگر، عدد دچار Overflow میشود و به محدودهی منفی برمیگردد.
به این مسئله میگویند:
مشکل سال ۲۰۳۸ (Year 2038 Problem)
سیستمهای ۳۲ بیتی که هنوز از این ساختار استفاده میکنند، باید برای این موضوع راهحل داشته باشند؛ در غیر این صورت، محاسبات زمانی آنها دچار خطا خواهد شد.
چرا سیستمهای ۶۴ بیتی خیالشـان راحت است؟
در معماری ۶۴ بیتی، بازهی عدد صحیح بسیار بزرگتر است:
-
از −2⁶³
-
تا 2⁶³ − 1
این یعنی امکان شمارش حدود ۲۹۲ میلیارد سال جلوتر یا عقبتر از ۱۹۷۰ وجود دارد.
با توجه به اینکه عمر جهان حدود ۱۳.۸ میلیارد سال تخمین زده میشود، میتوان گفت از نظر زمانی، فعلاً در محدودهی امنی قرار داریم!
آیا همهی سیستمها از ۱۹۷۰ شروع میکنند؟
خیر.
بسته به اینکه:
-
سیستمعامل شما چیست
-
سختافزار شما چیست
-
و از چه زبان برنامهنویسی استفاده میکنید
ممکن است مبدأ زمان متفاوت باشد.
برای مثال، در برخی نسخههای Windows NT، مبدأ زمان به سال ۱۶۰۱ میلادی برمیگردد.
نقش UTC در زمان کامپیوترها
اکثر زمانهایی که در سیستمهای کامپیوتری ذخیره میشوند، بر اساس UTC (Coordinated Universal Time) هستند.
UTC خودش داستان مفصلی دارد؛ ترکیبی از:
-
ساعتهای اتمی
-
تصحیحات نجومی
-
و استانداردهای بینالمللی زمان
نمایش زمان محلی (مثلاً تهران) در واقع با اعمال offset روی همین UTC انجام میشود.
جمعبندی
کامپیوترها تاریخ را نمیفهمند؛ آنها فقط از سال ۱۹۷۰ شروع به شمردن ثانیهها کردهاند.
مفهوم Epoch Time پایهی تمام محاسبات زمانی در سیستمهای مدرن است، اما محدودیتهای عددی مثل مشکل سال ۲۰۳۸ نشان میدهد حتی سادهترین تصمیمهای مهندسی هم میتوانند در آینده چالشبرانگیز شوند.