विकृत ज़ुल्फ़ डिज़ाइन के साथ घड़ी का चेहरा।

मिखाइल लियोनोव / शटरस्टॉक

किसी को फेसटाइम ऑडियो कैसे दें

1 जनवरी, 1970 के बाद से यूनिक्स समय को सेकंड की संख्या के रूप में संग्रहीत करता है। और इसका मतलब है कि लिनक्स भी करता है। हम इस अजीब प्रणाली की व्याख्या करते हैं, और 2038 के लिए कयामत का दिन क्यों निर्धारित किया गया था।



पहला यूनिक्स युग

गोएथे ( 1749-1832 ) घोषित किया गया प्रत्येक सेकंड अनंत मूल्य का है। यह सच है, हम में से प्रत्येक के पास पृथ्वी ग्रह पर इतने ही सेकंड हैं, और हम नहीं जानते कि हमारा अंतिम सेकंड कब होगा। लेकिन हम अपने जन्मदिन को जानते हैं, और जब हमारी नश्वर उलटी गिनती शुरू हुई।

यूनिक्स -की तरह ब्रिटिश रानी -दो जन्मदिन हैं। या, अधिक सटीक रूप से, दो अलग-अलग अवसर आए हैं जिन पर इसने अपने अस्तित्व के सेकंड गिनना शुरू कर दिया। पहली बार यूनिक्स की गिनती 1 जनवरी, 1971 की आधी रात से शुरू हुई थी।

यूनिक्स क्या है, और यह क्यों मायने रखता है? सम्बंधित यूनिक्स क्या है, और यह क्यों मायने रखता है?

के पहले संस्करण के एक भाग की समीक्षा करके हम इसे काफी स्पष्ट रूप से देख सकते हैं यूनिक्स प्रोग्रामर मैनुअल , दिनांक 3 नवंबर 1971। उस अनुभाग के पृष्ठ 13 तक नीचे स्क्रॉल करें, और आपको (अब निष्क्रिय) |_+_| का विवरण दिखाई देगा। आदेश। हमें बताया गया है कि |_+_| एक सेकंड के साठवें हिस्से में मापा गया 00:00:00, जनवरी 1, 1971 के बाद का समय लौटाता है।

कैलेंडर और समय प्रणालियाँ अतीत में किसी महत्वपूर्ण बिंदु से शुरू होने वाले समय को मापती हैं, जैसे कि एक ब्रह्माण्ड संबंधी घटना, एक साम्राज्य की स्थापना, या एक क्रांति की सफलता। ऑपरेटिंग सिस्टम में, एक मनमाना समय और तारीख को उस बिंदु के रूप में चुना जाता है जहां से गिनती शुरू होती है। यह है युग उस ऑपरेटिंग सिस्टम के लिए।

विज्ञापन

युग के बाद से एक सेकंड के 60वें हिस्से की गिनती रखने के लिए यूनिक्स ने 32-बिट अहस्ताक्षरित पूर्णांक का उपयोग किया। यह एक संख्यात्मक चर है जो 0 से 4,294,967,295 (2 .) की सीमा में मान रखने में सक्षम है32-1)। ऐसा बहुत लगता है। लेकिन काउंटर एक सेकंड में 60 गुना बढ़ गया और, जैसा कि प्रोग्रामर मैनुअल बताता है, कालानुक्रमिक-दिमाग वाला उपयोगकर्ता ध्यान देगा कि एक सेकंड का 2**32 साठवां हिस्सा केवल 2.5 वर्ष है।

60 नंबर प्रति सेकंड की खपत की दर के साथ, काउंटर 8 अप्रैल 1973 को अपने अधिकतम मूल्य पर पहुंच गया होगा, जो 829 दिनों से थोड़ा कम है।

दूसरा यूनिक्स युग

कहने की जरूरत नहीं है कि इस पर तेजी से कार्रवाई की गई। अहस्ताक्षरित पूर्णांक को 32-बिट . से बदल दिया गया था पर हस्ताक्षर किए पूर्णांक। यह एक आश्चर्यजनक विकल्प लग सकता है क्योंकि एक हस्ताक्षरित पूर्णांक सकारात्मक मूल्यों की एक छोटी संख्या को धारण करने में सक्षम है — 2,147,483,647 (2)31) - एक अहस्ताक्षरित पूर्णांक की तुलना में। हालांकि, खपत की गति भी एक सेकेंड के 60वें हिस्से से घटाकर पूरे सेकेंड कर दी गई।

इसे 0 से 2,147,483,647 तक गिनने में एक नंबर प्रति सेकंड की तुलना में अधिक समय लगता है, जबकि 0 से 4,294,967,295 को 60 काउंट प्रति सेकंड पर गिनने में अधिक समय लगता है। और काफी अंतर से। नई योजना केवल 68 वर्षों में अपने अधिकतम मूल्य पर नहीं पहुंच पाएगी। यह भविष्य में इतना दूर लग रहा था कि युग को पहले के समय में भी रीसेट कर दिया गया था। नया युग 1 जनवरी, 1970, UTC की मध्यरात्रि में निर्धारित किया गया था।

वह बिंदु 68 वर्ष भविष्य में अब अनावश्यक रूप से करीब है। सटीक होने के लिए, हम इसे 19 जनवरी, 2038 को 03:14:07 UTC पर पहुंचेंगे।

एक सरल लेकिन प्रभावी योजना

किसी दिए गए बिंदु से समय चरणों की संख्या की गणना करने के लिए एकल पूर्णांक का उपयोग करना समय को संग्रहीत करने का एक प्रभावी तरीका है। आपको वर्षों, महीनों, दिनों और समय की जटिल संरचनाओं को संग्रहीत करने की आवश्यकता नहीं है। और यह देश, स्थान और समय क्षेत्र स्वतंत्र है।

विज्ञापन

पूर्णांक में संख्या को समय चरण के आकार से गुणा करना—इस मामले में, एक सेकंड—आपको युग के बाद का समय देता है, और उस से समय-क्षेत्र समायोजन के साथ स्थानीय-विशिष्ट स्वरूपों में परिवर्तित करना अपेक्षाकृत तुच्छ है।

हालांकि यह आपको बिल्ट-इन अपर लिमिट देता है। जल्दी या बाद में आप अपने चुने हुए चर प्रकार में अधिकतम मूल्य को हिट करने जा रहे हैं। इस लेख को लिखने के समय, वर्ष 2038 केवल 17 वर्ष दूर है।

यह पिछली शताब्दी के शुरुआती कंप्यूटर सिस्टम के साथ समस्या के समान है, लेकिन दो अंकों का उपयोग करके वर्षों को संग्रहीत करने के लिए है। जब कैलेंडर नए साल और 2000 की नई सदी में लुढ़क गया, तो क्या 00 के रूप में संग्रहीत एक वर्ष मान को 2000, या 1900 के रूप में व्याख्यायित किया जाएगा?

Y2K बग क्या था, और इसने दुनिया को आतंकित क्यों किया? सम्बंधित Y2K बग क्या था, और इसने दुनिया को आतंकित क्यों किया?

तथाकथित को ठीक करना मिलेनियम बग अनुमान है कि अकेले यू.एस. की लागत 0 बिलियन से अधिक है, और विश्व स्तर पर संबोधित करने के लिए हजारों मानव-वर्ष लगे हैं। जनवरी 2000 के पहले कुछ दिनों में कुछ समस्याएं थीं, लेकिन अगर बग को नजरअंदाज कर दिया गया होता तो आपदाओं जैसा कुछ नहीं होता।

कयामत स्थगित है

चूंकि लिनक्स और सभी यूनिक्स-लुकलाइक ऑपरेटिंग सिस्टम एक ही मुद्दे को साझा करते हैं, वर्ष 2038 के मुद्दे को कुछ समय के लिए गंभीरता से लिया गया है, 2014 से कर्नेल में सुधार जोड़े जा रहे हैं। यह सुधारों के साथ चल रहा है कर्नेल में जोड़ा जा रहा है 32-बिट पूर्णांक समस्या को हल करने के लिए हाल ही में जनवरी 2020 तक।

बेशक, एक काम कर रहे लिनक्स कंप्यूटर में कर्नेल की तुलना में बहुत अधिक होता है। सभी ऑपरेटिंग यूटिलिटीज और यूजरलैंड एप्लिकेशन जो विभिन्न एपीआई और इंटरफेस के माध्यम से सिस्टम समय का उपयोग करते हैं, उन्हें 64-बिट मानों की अपेक्षा करने के लिए संशोधित करने की आवश्यकता है। फाइल सिस्टम भी अद्यतन किया जाना चाहिए फाइलों और निर्देशिकाओं के लिए 64-बिट टाइमस्टैम्प स्वीकार करने के लिए।

क्या लिनक्स ने वाणिज्यिक यूनिक्स को मार डाला? सम्बंधित क्या लिनक्स ने वाणिज्यिक यूनिक्स को मार डाला?

लिनक्स हर जगह है . लिनक्स में एक भयावह विफलता का अर्थ होगा सभी प्रकार के कंप्यूटर-आधारित सिस्टम में विफलता। Linux अधिकांश वेब, अधिकांश सार्वजनिक क्लाउड और यहां तक ​​कि अंतरिक्ष यान भी चलाता है। यह स्मार्ट होम और सेल्फ ड्राइविंग कार चलाता है। स्मार्टफोन के दिल में यूनिक्स-व्युत्पन्न कर्नेल होता है। व्यावहारिक रूप से कुछ भी - जैसे नेटवर्क फायरवॉल, राउटर और ब्रॉडबैंड मोडेम - जिसमें एम्बेडेड ऑपरेटिंग सिस्टम लिनक्स पर चलते हैं।

विज्ञापन

यह बहुत अच्छा है कि लिनक्स ठीक होने की राह पर है। हम उन्नयन स्थापित करेंगे और वह होगा। लेकिन क्या संभावना है कि उन सभी उपकरणों को पैच और अपडेट किया जाएगा? उनमें से बहुत से तब तक सेवा में भी नहीं होंगे, इसलिए यह एक महत्वपूर्ण मुद्दा होगा, लेकिन कुछ अभी भी दूर रहेंगे। सर्वर रूम और रैक कैबिनेट में अंधेरे और धूल भरे अवकाशों में बँधे हुए, लेकिन वे वहाँ होंगे, चुपचाप काम कर रहे होंगे, जबकि सेकंड 19 जनवरी, 2038 की सुबह लगभग सवा तीन बजे तक टिकते हैं।

लेकिन इस तरह के उपकरण एक छोटे से अल्पसंख्यक होने चाहिए। अधिकांश सिस्टम बिना किसी घटना के संकट के समय को आते और जाते देखेंगे। एक बार फिर, हम आराम करने में सक्षम होंगे। कम से कम, वर्ष 2486 तक, अपने साथ सिस्टम के लिए ठीक वैसी ही समस्या लेकर आता है जो युग के बाद के समय की गणना करने के लिए 64-बिट आधारित पूर्णांकों का उपयोग करते हैं।

तारीख कमान

वे कैन |_+_| . का उपयोग करें आदेश लिनक्स और अन्य यूनिक्स डेरिवेटिव्स को सत्यापित करने के लिए अभी भी समय मान को युग के बाद से सेकंड की संख्या के रूप में संग्रहीत करने की मूल, सरल योजना का उपयोग करें।

|_+_| . का उपयोग करना बिना किसी पैरामीटर के कमांड टर्मिनल विंडो पर वर्तमान दिनांक और समय को प्रिंट करता है। आपने वह समय क्षेत्र भी दिखाया है जिसके लिए समय समायोजित किया गया है। EDT पूर्वी डेलाइट टाइम है, जिसका अर्थ है कि हमारा परीक्षण कंप्यूटर पूर्वी समय क्षेत्र में है, और डेलाइट सेविंग प्रभाव में है। जब डेलाइट सेविंग टाइम प्रभावी नहीं होता है, तो पूर्वी समय क्षेत्र पूर्वी मानक समय का उपयोग करता है।

अंतर्निहित पूर्णांक मान देखने के लिए, हम एक प्रदर्शन प्रारूप स्ट्रिंग का उपयोग कर सकते हैं। फ़ॉर्मेट स्ट्रिंग्स में प्लस चिह्न + उनके पहले वर्ण के रूप में होता है। %s प्रारूप टोकन का अर्थ है युग के बाद से सेकंड दिखाना।

विज्ञापन

यदि हम |_+_| . द्वारा लौटाए गए सेकंड का मान लेते हैं और इसे वापस |_+_| . में फ़ीड करें के साथ आदेश |_+_| (एक स्ट्रिंग द्वारा वर्णित प्रदर्शन समय) विकल्प, यह इसे वापस एक नियमित तिथि और समय में बदल देगा।

time time date

यूनिक्स युग के बाद से सेकंड दिखाने के लिए दिनांक का उपयोग करना

हम दिखा सकते हैं कि पूर्णांक मान वास्तव में सेकंड की संख्या प्रदर्शित करके, 10 सेकंड के लिए सो रहा है, और सेकंड की नई संख्या दिखा कर समय का प्रतिनिधित्व करता है। दो पूर्णांक मान ठीक 10 से भिन्न होंगे।

date

दो सेकंड का मान 10 सेकंड के अलावा दिखा रहा है

हमने देखा है कि हम |_+_| . को कई सेकंड पास कर सकते हैं आदेश और यह हमारे लिए एक समय और तारीख में परिवर्तित हो जाता है। यदि हम शून्य सेकंड का उपयोग हमारे मूल्य के रूप में करते हैं, तो |_+_| यूनिक्स युग की तारीख और समय मुद्रित करना चाहिए।

date

यूनिक्स युग को 0 सेकंड के इनपुट मान से प्रदर्शित करना

आदेश इस तरह टूट जाता है:

    टीजेड = 'यूटीसी': युग को कोऑर्डिनेटेड यूनिवर्सल टाइम (UTC, का उपयोग करके सेट किया गया था, इसलिए हमें UTC का उपयोग करने के लिए |_+_| बताने की आवश्यकता है। TZ= निर्माण केवल वर्तमान कमांड के लिए प्रभावी समय क्षेत्र सेट करता है। दिनांक: |_+_| आदेश। -डी@ 0: हम बताते हैं |_+_| इनपुट के रूप में एक स्ट्रिंग का उपयोग करने के लिए, अभी समय नहीं। हम जिस स्ट्रिंग से गुजरते हैं वह शून्य सेकंड रखती है। +'%x %R': आउटपुट स्वरूप स्ट्रिंग। %x प्रारूप टोकन बताता है |_+_| वर्ष, माह और दिन प्रदर्शित करने के लिए। %R प्रारूप टोकन निर्देश देता है |_+_| घंटे और मिनट के लिए 24 घंटे के प्रारूप का उपयोग करने के लिए। क्योंकि प्रारूप स्ट्रिंग में रिक्त स्थान हैं, हम पूरी स्ट्रिंग को सिंगल कोट्स में लपेटते हैं |_+_| ताकि यह स्ट्रिंग को एक ही आइटम के रूप में माना जाए।

जैसा कि अपेक्षित था, उत्पादन 1 जनवरी, 1970 की मध्यरात्रि है।

सम्बंधित: लिनक्स टर्मिनल में दिनांक और समय कैसे प्रदर्शित करें (और इसे बैश लिपियों में उपयोग करें)

अगली बार तक

सरल अक्सर सबसे अच्छा होता है। समय बीतने को चिह्नित करने के लिए एक निश्चित डेटा से सेकंड गिनना सबसे आसान तरीका है। लेकिन समय बीतने के साथ नई चुनौतियां भी आती हैं। सुधारों के साथ, ऐसा लगता है कि हम वर्ष 2486 तक स्पष्ट हैं।

मुझे लगता है कि यह कहना सुरक्षित है कि हम उस समय के बारे में चिंता करेंगे।

आगे पढ़िए
संपादक की पसंद