زنگ‌تفریح تصادفی

 پيوندهاي المپياد كامپيوتر
 سايت‌هاي المپياد كامپيوتر
 
 مشكل سال 2038
مشكل سال 2038زنگ تفريح كامپيوتر
زنگ تفريح شماره 129

 مشكل سال 2000 به علت توجه زيادي كه امروزه به مديا مي‌شود، براي بيشتر مردم روشن شده‌است. مشكلي كه به مشكل Y2K معروف است. بيشتر برنامه‌هايي كه با زبان برنامه نويسي C نوشته شده‌اند نسبتاً نسبت به مشكل Y2K ايمن بودند اما در عوض به دام مشكل سال 2038 خواهند افتاد. اين مشكل از جاييكه شروع مي‌شود كه بيشتر برنامه‌هاي C از يك كتابخانه‌اي از روال‌ها كه به آن كتابخانه  استاندارد زمان گفته مي‌شود، استفاده مي‌كنند. اين كتابخانه يك استاندارد با فرمت 4 بايتي براي ذخيره مقدار زماني دارد، همچنين تعداد دستورالعمل  براي تبديل كردن، نمايش دادن و محاسبه زمان  را فراهم كرده‌است.

 

 

 

اما مشكل Y2K چه بود؟
علت پديد آمدن اين مشكل ساده است، تا چند وقت پيش برنامه‌نويسان عادت داشتند  تا در نرم‌افزار‌هاي خود از يك عدد دو رقمي براي نمايش زمان در نرم‌افزارهاي خود استفاده كنند؛ براي مثال، تاريخ انقضاي يك كارت بانكي در يك فايل كامپيوتري به صورت ساعت/روز/ماه (99/31/08) ذخيره مي‌شد. اين فرمت دو رقمي وقتي مشكل آفرين شد كه با آغاز سال 2000 ، 00 به عنوان عدد نشان‌دهنده سال وارد شد و نرم‌افزار نمي‌دانست اين 00 را چگونه تفسير كند، آن‌را سال 1900 بداند يا 2000 ؟!

 

 

 

 

 
 فرمت استاندارد 4 بايتي فرض را بر اين مي‌گذارد كه آغاز زمان تاريخ 1 ژانويه 1970 ساعت 12:00:00 نيمه شب است. اين مقدار صفر است. هر مقدار تارخ/ساعت ديگري بر اساس تعداد ثانيه‌هايي است كه از مقدار زماني صفر گذشته است، محاسبه مي‌شود. يعني براي مثال 919642718 در واقع 919642718 ثانيه‌هايي است كه از ساعت 12:00:00 نيمه شب 1 ژانويه 1970 گذشته است، كه شنبه، 21 ماه فوريه سال 1999 ساعت 16:18:38 به وقت آمريكاست. اين يك فرمت مناسب است چرا كه اگر شما دو مقدار زماني را از هم كم كنيد، آنچه به دست مي‌آيد تعداد ثانيه‌هايي است كه اختلاف زماني اين دو مقدار محسوب مي‌شود و سپس شما مي‌توانيد از دستورالعمل‌هاي اين كتابخانه براي مشخص كردن مقدار دقيق دقيقه/ساعت/روز/ماه/سال كه بين اين دو مقدار زماني بوده است مطلع شويد.
 

 

 

 


همانطور كه مي‌دانيد 4 بايت عدد صحيح ، بيشترين  مقداري كه مي‌تواند داشته باشد 2147483647 است و اين همان جايي است كه مشكل سال 2038 شروع مي شود. بيشترين مقدار زماني قبل از اينكه به سمت اعداد منفي و غير معتبر برود مقدار 2147483647 است كه مي‌شود 19 ژانويه 2038 . در اين تاريخ تمام برنامه‌هايي كه با زبان C كار مي‌كنند  و از كتابخانه زماني آن استفاده مي‌كنند در محاسبات  زماني خود دچار مشكل مي‌شوند.

 
 
حل مشكل سال 2038:
خوشبختانه حل اين مشكل از جهاتي از حل مشكل Y2K آسان‌تر است. برنامه‌ها مي‌توانند به راحتي با نسخه جديدي از كتابخانه  زماني دوباره كامپايل شوند، براي مثال كتابخانه اي با فرمت ذخيره‌سازي 8 بايتي. اين موضوع امكان‌پذير است چرا كه اين كتابخانه كل فعاليت‌هاي زماني را از ساير دستورالعمل‌ها جدا كرده است(برعكس برنامه‌هايي با پردازنده مركزي كه فرمت زماني و محاسباتي آن‌ها  استاندارد نبود)، به همين دليل حل مشكل سال 2038 به سختي حل مشكل Y2K نخواهد بود.  
 
 
اما مشكل سال 2000 چگونه حل شد؟
راه حل، مشخصاً درست كردن برنامه به گونه‌اي بود كه به درستي كار كند. براي مثال: 
دوباره كد نويسي نرم‌افزار طوري‌كه سال‌ها استاندارد باشند مثل 000,001,002,…,2000,2001,2002 
حل كردن مشكل به معناي واقعي! با استفاده از 4 رقم ديجيتالي براي سال و دوباره كدنويسي تمام نرم‌افزارها تا با 4 رقم براي تاريخ كار كنند. (ممكن است بپرسيد چرا 4 رقم براي سال و چرا 5 يا 6 رقم نه؟ پاسخ اين است كه بيشتر مردم اطمينان دارند كه كسي از اين نرم‌افزارها تا بيشتر از سال 2008 استفاده نخواهد كرد!)
 

 

1391/6/5 لينک مستقيم

نظر شما پس از تاييد در سايت قرار داده خواهد شد
نام :
پست الکترونيکي :
صفحه شخصي :
نظر:
تایید انصراف
 زنگ تفريح‌ها

 
 المپياد كامپيوتر

 

     

 

 

صفحه‌ي اصلي

     

 

راهنماي سايت

     

 

 

آموزش

     

 

بانك سوال

     

 

 

مسابقه

     

 

 

زنگ تفريح

     

 

 

مصاحبه و گزارش

     

 

 

معرفي كتاب

     

 

 

مشاوره

     

 

 

پرسش‌و‌پاسخ‌علمي

     

 

اخبار

 

فعاليت‌هاي علمي

 بازديدها
خطایی روی داده است.
خطا: بازديدها فعلا" غیر قابل دسترسی می باشد.