Unix-ning dastlabki versiyalari tizim vaqtini 1/60 oraliqda o'lchagan. Bu 32 bitli tizimda faqat 829 kundan kamroq vaqt oralig'ini ifodalash imkoniga ega edi.
Oddiy qilib tushuntirganda:
Unix PDP-11 hisoblash mashinasi ustida qurilgan. Bunga ko'ra qurilma darajasidagi taymer 60Hz ga teng edi. (Taymerlar nega kerak desangiz bu odatda turli vazifalarni amalga oshirishda oraliq olish uchun ishlatiladi. Masalan ekranga tasvir chiqarish, kirish qurilmalaridan turli protkollarni o'z talqiniga moslash kabi)
Demakki 2ni 32-darajasida hisoblasak bizdagi counter maksimum 4 294 967 295 gacha boradi xolos. Bu esa 60Hz chastotada 71 582 788 sekund yoki 829 kunga teng bo'ladi.
Shuning uchun ham limitlarni to'g'ri taqsimlash uchun epoxa tanlab olindi. Ya'ni unix davrining boshlanishi. Unix 70-yillar orasida yaratilgani bois 1971-01-01 tanlab olindi ammo hisob kitoblarga yanada aniqlik kiritish uchun keyinchalik 1970-yilga o'zgartirildi. Bunga ko'ra qurilmalar vaqtni 1970-01-01 sanansidan boshlab hozirgi vaqtgacha bo'lgan sekundlarda hisoblanadi. Ammo soniyaning oshib borishi ham 2ning 23darajasini qachdir to'ldiradi va bu vaqt aynan 2038-01-19 kuniga to'g'ri keladi. Aynan o'sha paytda 32 bitlik tizimlarda overflow (cheklovdan oshish) sabab barchasi yana 0ga qaytadi.
64 bitlik tizimlarda ayni damda bunga yechim mavjud, bu ko'pchilik kun orada ishlatadigan time_t hisoblanadi. Agarda 2038-yilgacha 32 bitlik tizimlar qolmasa buni qo'rqinchli joyi yo'q, agarda ishlatilish davom etsa albatta o'sha kuni qurilmalar orasida apokalipsis yuz beradi.
Epochdan bo'y sunmaydigan holatlar haqida qiziqmoqchi bo'lsangiz
ushbu havoladagi post ham siz uchun qiziqarli bo'la oladi degan umiddaman.
@yetimdasturchi