پرش به محتوای اصلی

فناوری جدید شما هنوز در سال 1970 گیر کرده است - دلیل آن در اینجا آمده است

انگجت۱۴۰۵ آبان ۲۳, شنبه، ساعت ۲۰:۱۵حدود 6 دقیقه مطالعه

اگر تا به حال تاریخ دلخواه در سال 1970 را در دستگاه غیر ویندوزی خود دیده اید، نگران نباشید، مشکلی وجود ندارد. در طول فرآیند توسعه انتخاب شد.

نگران نباشید؛ کامپیوتر شما به گذشته منتقل نمی شود.

به احتمال زیاد تاریخ 1 ژانویه 1970 را روی رایانه یا دستگاه دیگری دیده اید، حتی اگر در آن زمان زنده نبودید. ممکن است فرض کنید که این یک تاریخ قابل توجه در محاسبات است، یا اینکه یک تاریخ نگهدارنده تصادفی برای زمانی است که ماشین نتواند زمان را بخواند. در واقع، در حالی که تاریخ به خودی خود خاص نیست، نشان دهنده بخش مهمی از نحوه نگهداری زمان توسط کامپیوترها است.

مانند همه چیز در محاسبات، روشی که به این تاریخ منتهی می شود محدود است، به این معنی که در آینده با آن مشکل خواهیم داشت. همه اینها به بحث جالب تری در مورد نحوه ردیابی زمان توسط رایانه ها (و انسان ها) مرتبط است، که پیچیده تر از آن چیزی است که شما ممکن است فکر کنید.

1 ژانویه 1970 ساعت 00:00 (نیمه شب) UTC عصر زمان یونیکس است. یک دوره به یک لحظه خاص و تأثیرگذار اشاره دارد که معمولا مربوط به شروع یک سیستم زمان سنجی است. یونیکس یکی از اولین سیستم عامل هایی بود که ما آن را مدرن می دانستیم و در اواخر دهه 1960 توسعه را آغاز کردیم. این اساس بسیاری از سیستم عامل های دیگر است که به عنوان "یونیکس مانند" شناخته می شوند، از جمله لینوکس، macOS و اندروید. ویندوز اصلی ترین نقطه پرت است.

زمانی که یونیکس در حال توسعه بود، توسعه دهندگان آن به راهی برای پیگیری زمان نیاز داشتند. در چند تلاش اولیه از سرعت کلاک سیستم 60 هرتز استفاده شد، اما ذخیره آن در یک عدد صحیح 32 بیتی منجر به مقداری شد که پس از کمتر از 2.5 سال از فضای خالی خارج شد. پس از مدتی، آنها زمان‌بندی را برای استفاده از ثانیه تغییر دادند و اول ژانویه 1970 را به‌عنوان تاریخ دلخواه «دور» برای شروع انتخاب کردند، با این تصور که فضای عدد صحیح 32 بیتی برای زمان به این زودی‌ها تمام نمی‌شود (اطلاعات بیشتر در مورد آن بعدا).

تا به امروز، زمان یونیکس با ردیابی تعداد ثانیه هایی که از 1 ژانویه 1970 در نیمه شب UTC گذشته است، حفظ می شود. UTC (زمان هماهنگ جهانی) یک انتخاب واضح بود زیرا در حال حاضر استانداردی برای پیگیری زمان در مناطق زمانی است. برای یک کامپیوتر ساده است که دو عدد را مقایسه کند و تفاوت بین آنها را محاسبه کند بدون اینکه نگران قوانینی که در مورد زمان داریم. این سیستم مهر زمانی، از جمله افست منطقه زمانی شما را از UTC، به قالب قابل خواندن توسط انسان تبدیل می‌کند.

ممکن است تاریخ 01-01-1970 را در صفحات گسترده، برنامه‌ها، ابرداده‌های فایل، صفحه‌های خطا و مکان‌های مختلف مشاهده کنید. مگر اینکه این تاریخ با تولد شخصی یا رویداد مهم دیگری مطابقت داشته باشد، معمولا نتیجه یک خطا است. هنگامی که یک سیستم شبیه به یونیکس سعی می کند زمان را بررسی کند و با مشکلی مواجه شود یا مقدار 0 را دریافت کند، به طور پیش فرض روی epoch قرار می گیرد. اگر در منطقه زمانی زندگی می‌کنید که پشت UTC است، احتمالا این مقادیر پیش‌فرض را در اواخر روز 31 دسامبر 1969 خواهید دید.

زمان سنتی یونیکس به عنوان یک عدد صحیح 32 بیتی علامت دار نگهداری می شود، یک مقدار باینری با 32 رقم که هر کدام می تواند 1 یا 0 باشد. اعداد صحیح علامت دار می توانند اعداد مثبت و منفی را ردیابی کنند، در حالی که اعداد صحیح بدون علامت فقط می توانند مثبت باشند. در مورد زمان ردیابی، استفاده از یک مقدار علامت‌دار برای ردیابی تاریخ‌های قبل از سال 1970 ضروری است. از آنجا که اولین (سمت چپ) بیت یک عدد صحیح علامت‌دار برای نشان دادن منفی بودن آن استفاده می‌شود، دامنه مقادیر ممکن را در مقایسه با یک عدد بدون علامت به نصف کاهش می‌دهد.

حداکثر مقدار یک عدد صحیح بدون علامت 2^31 یا 4,294,967,295 است. یک مقدار امضا شده می‌تواند نیمی از این مقدار را در هر جهت نشان دهد که به 2,147,483,647 و تا 2,147,483,648- می‌رسد. بنابراین زمان یونیکس یک "تاریخ انقضا" دارد. هنگامی که آن حد بالای ثانیه ها سپری شد، سمت چپ ترین رقم به 1 تبدیل می شود که باعث می شود بقیه عدد به عنوان منفی تفسیر شود.

این اتفاق در 19 ژانویه 2038 در ساعت 3:14:07 بامداد UTC رخ خواهد داد، به همین دلیل است که این موضوع را "مسئله سال 2038" می شنوید. هنگامی که عدد صحیح سرریز شد، زمان به اشتباه 13 دسامبر 1901 را در ساعت 8:45:52 بعد از ظهر UTC نشان می دهد و از آنجا به شمارش ادامه می دهد.

خوشبختانه، قبل از این تاریخ زمان زیادی برای پیاده سازی راه حل ها داشتیم (و هنوز هم داریم). اکثر سیستم‌های مدرن مانند یونیکس اکنون از یک عدد صحیح ۶۴ بیتی برای پیگیری زمان استفاده می‌کنند که می‌تواند ثانیه‌ها را برای ۲۹۲ میلیارد سال قبل از سرریز شدن ردیابی کند – اگر هنوز کسی تا آن زمان در اطراف باشد، انتقال زمان به یک عدد صحیح ۱۲۸ بیتی مشکل آنها خواهد بود. مک بوک مدرن شما 64 بیتی است و به خوبی کار می کند، در حالی که دستگاه 32 بیتی مانند آیفون 4 با مشکل مواجه خواهد شد.

خطر اصلی برای زمانی که 2038 در حال چرخش است، در سیستم های قدیمی است که به راحتی نمی توان آنها را به روز کرد، مانند سیستم های تعبیه شده در لوازم خانگی، وسایل نقلیه، دوربین ها و موارد مشابه. برخی از آن‌ها به شدت تحت تأثیر قرار نخواهند گرفت، حتی اگر نتوانند زمان دقیق را حفظ کنند، اما اگر زمان یک فاکتور حیاتی باشد، باید تا 12 سال دیگر هر یک از آن دستگاه‌ها را جایگزین کنیم.

ممکن است تعجب کنید که آیا این مشکل زمانی مربوط به Y2K است (که نام مشابهی نیز داشت، "مشکل سال 2000")، که نگرانی بزرگی برای هزاره جدید بود. در حالی که هر دو حول محور نگه‌داشتن زمان توسط رایانه‌ها می‌چرخند، مشکل گذشته ناشی از کوتاه‌نویسی اعشاری بود، نه سرریز باینری.

در روزهای اولیه محاسبات، حافظه بسیار گران بود، بنابراین برنامه نویسان در هر جایی که ممکن بود صرفه جویی می کردند. بنابراین استفاده از دو رقم برای نشان دادن سال معمول بود، با این فرض که دو رقم اول همیشه "19" بود. Y2K این نگرانی بود که به محض رسیدن سال به سال 2000، رایانه ها به جای سال 2000، "00" را به عنوان 1900 (یا تاریخ قبلی دیگر) تفسیر کنند و باعث ایجاد انواع مشکلات برای برنامه هایی شود که به زمان دقیق متکی هستند.

در آن زمان ترس بزرگی بود، اما در نهایت تقریبا آنطور که انتظار می‌رفت وحشتناک نبود (که بسته به اینکه از چه کسی بپرسید، یا به دلیل تلاش‌های پیشگیری بود یا به این دلیل که این موضوع در ابتدا بزرگ نبود).

زمان یونیکس تنها راهی نیست که کامپیوترها با ساعت کار می کنند. بسیاری از ماشین‌ها دارای یک ساعت بی‌درنگ هستند که مانند ساعت دیواری، زمان را ردیابی می‌کند و با خاموش شدن کامپیوتر، با استفاده از باتری CMOS برق را حفظ می‌کند. وقتی این باتری تمام می شود، ساعت رایانه شما درست نمی شود.

ویندوز، همانطور که قبلا ذکر شد، تفاوت های زمانی را در تیک های 100 نانوثانیه ای از اول ژانویه 1601 در نیمه شب UTC پیگیری می کند. در حالی که این دوران بسیار قدیمی تر از سال 1970 است، این دوره تصادفی نیست. تقویم میلادی که ما استفاده می کنیم هر 400 سال یک چرخه کامل را طی می کند، بنابراین سال 1601 شروع آخرین چرخه در زمان توسعه ویندوز بود. این یک مقدار صحیح 64 بیتی بدون علامت است (زیرا بعید است رایانه‌ای نیاز به نمایش تاریخ‌های قبل از 1601 داشته باشد) که در 14 سپتامبر 30828 نامعتبر می‌شود.

در نهایت، NTP (پروتکل زمان شبکه) وجود دارد که زمان کامپیوتر شما را با سرورهای بسیار دقیق زمان‌گیری از طریق اینترنت همگام‌سازی می‌کند. اگر روش کامپیوتر برای نگه داشتن زمان از کار بیفتد یا تغییر کند، با استفاده از NTP اصلاحات را دریافت می کند. ردیابی زمان چیزهای بیشتری وجود دارد، مانند ثانیه های کبیسه که به زودی بازنشسته می شوند، زمان صرفه جویی در روز، تغییرات منطقه زمانی، و تغییر تقویم، اما اکنون می دانید که رایانه ها برای پیگیری آن چه کاری انجام می دهند.

خواندن متن کامل در انگجتبه زبان اصلی، در سایت ناشر باز می‌شود
متن اصلی (انگلیسی)

Your new tech is still stuck in the year 1970 — here's why

If you've ever seen an arbitrary date in 1970 on your non-Windows device, don't worry, it's not glitching. It was chosen during the development process.

همه‌ی اخبار فناوری