सामग्री पर जाएँ
GK पुस्तकालयजिज्ञासु मनों का घर
हिन्दी

एक ही संख्या को उलटा पढ़ने वाला कंप्यूटर, एंडियननेस (Endianness)

अगर दो लोगों को एक ही चिट्ठी मिले और एक उसे बाएँ से दाएँ पढ़े जबकि दूसरा दाएँ से बाएँ, तो क्या होगा? कंप्यूटर की दुनिया में सचमुच ऐसा होता है। इसका कारण यह है कि कई बाइट वाली संख्या को मेमोरी में किस क्रम में रखा जाए, यह हर कंप्यूटर में अलग होता है, और इसी क्रम को ‘एंडियननेस (Endianness)’ कहते हैं।

एंडियननेस का सरल अर्थ है ‘कई बाइट से बने मान को मेमोरी में सहेजते या भेजते समय किस सिरे की बाइट पहले रखी जाए, इसका तय क्रम’। यह नाम 1726 में प्रकाशित Jonathan Swift के उपन्यास Gulliver’s Travels से आया है। उपन्यास में Lilliput और Blefuscu के लोग इस बात पर युद्ध तक छेड़ देते हैं कि उबले अंडे को बड़े सिरे (big end) से तोड़ा जाए या छोटे सिरे (little end) से। 1980 में कंप्यूटर वैज्ञानिक Danny Cohen ने अपने लेख “On Holy Wars and a Plea for Peace” में बाइट क्रम की बहस की तुलना इसी अंडा युद्ध से की और बिग-एंडियन व लिटिल-एंडियन शब्दों को लोकप्रिय बनाया।

इस लेख में हम क्रम से देखेंगे कि एंडियननेस क्यों बनी, बिग-एंडियन और लिटिल-एंडियन में क्या अंतर है, अलग एंडियननेस वाले कंप्यूटर मिलने पर कौन-सी समस्याएँ आती हैं, और आज एंडियननेस को कैसे संभाला जाता है।


अंडे को किस सिरे से तोड़ें: एंडियननेस

1. एंडियननेस क्यों बनी

काली मेमोरी चिप्स की कतार वाला हरा कंप्यूटर मेमोरी मॉड्यूल अँधेरी मेज़ पर तिरछा रखा है और उस पर नीली रोशनी पड़ रही है

कंप्यूटर मेमोरी में बाइट (8 बिट) की इकाई में पते दिए जाते हैं। लेकिन एक पूर्णांक आमतौर पर 2 बाइट, 4 बाइट या 8 बाइट जैसी कई बाइट घेरता है। इसलिए जब एक मान को कई खानों में बाँटकर रखा जाता है, तो तय करना पड़ता है कि कौन-सी बाइट पहले रखी जाए।

(1) बाइट की इकाई में पते
मेमोरी के हर खाने का 0, 1, 2… जैसा एक पता होता है, और एक खाने में केवल 1 बाइट आती है। 4 बाइट का एक पूर्णांक सहेजने के लिए लगातार चार खाने चाहिए।

(2) बड़ा स्थान और छोटा स्थान
हेक्साडेसिमल मान 0x12345678 में 12 सबसे बड़ा स्थान सँभालने वाली सबसे महत्वपूर्ण बाइट है, और 78 सबसे छोटा स्थान सँभालने वाली सबसे कम महत्वपूर्ण बाइट है। इन चार बाइटों को निचले पते से किस क्रम में रखा जाए, यही एंडियननेस है।

(3) ऐसा चुनाव जिसका कोई सही उत्तर नहीं
कोई भी क्रम हो, अगर एक कंप्यूटर के भीतर उसे लगातार एक-सा इस्तेमाल किया जाए तो गणना का परिणाम एक ही रहता है। इसलिए शुरुआती कंप्यूटर कंपनियों ने अपने डिज़ाइन के अनुकूल तरीका चुना, और यह अंतर आज तक चला आ रहा है।


2. बिग-एंडियन और लिटिल-एंडियन का अंतर

सुबह की धूप वाली लकड़ी की खाने की मेज़ पर सफ़ेद चीनी मिट्टी के दो एग कप में एक-एक उबला अंडा है, एक गोल बड़े सिरे से और दूसरा नुकीले छोटे सिरे से टूटा हुआ है

मान लीजिए 0x12345678 को पता 100 से शुरू होने वाले चार खानों में रखना है। बिग-एंडियन तरीका 100 से 12, 34, 56, 78 के क्रम में रखता है, जबकि लिटिल-एंडियन तरीका उलटे 78, 56, 34, 12 के क्रम में रखता है।

एंडियननेस इन्फोग्राफिक: शीर्षक “एंडियननेस: बाइट रखने का क्रम” के नीचे 0x12345678 चार खंडों 12 (गहरा नीला), 34, 56 और 78 (नारंगी) में बँटा है, जिन पर “सबसे महत्वपूर्ण बाइट” और “सबसे कम महत्वपूर्ण बाइट” लिखा है। नीचे पता 100–103 वाली मेमोरी की दो पंक्तियाँ हैं: बड़े सिरे से टूटे अंडे के पास “बिग-एंडियन” पंक्ति में 12, 34, 56, 78 और छोटे सिरे से टूटे अंडे के पास “लिटिल-एंडियन” पंक्ति में आड़े तीरों से 78, 56, 34, 12
एक ही मान 0x12345678 को भी बिग-एंडियन बड़े स्थान से और लिटिल-एंडियन छोटे स्थान से मेमोरी में रखता है।
  • बिग-एंडियन (Big-endian): सबसे महत्वपूर्ण बाइट को सबसे निचले पते पर रखने का तरीका, जो लोगों के संख्या लिखने के क्रम जैसा है।
  • लिटिल-एंडियन (Little-endian): सबसे कम महत्वपूर्ण बाइट को सबसे निचले पते पर रखने का तरीका, जिसे Intel x86 परिवार के प्रोसेसर इस्तेमाल करते हैं।
  • बाय-एंडियन (Bi-endian): दोनों तरीकों का समर्थन करने वाला डिज़ाइन, जैसे ARM और PowerPC।
  • सबसे महत्वपूर्ण बाइट (Most Significant Byte): किसी मान में सबसे बड़ा स्थान सँभालने वाली बाइट, जिसे संक्षेप में MSB भी लिखते हैं।

(1) बिग-एंडियन की खूबी
मेमोरी की सामग्री को शुरू से सीधे देखने पर संख्या लिखने के क्रम में ही पढ़ी जाती है, इसलिए लोगों के लिए जाँचना आसान होता है। IBM मेनफ़्रेम और Motorola 68000 जैसे प्रोसेसर इसी तरीके का उपयोग करते थे।

(2) लिटिल-एंडियन की खूबी
निचले पते पर छोटा स्थान होने से, एक ही पते से 1 बाइट, 2 बाइट या 4 बाइट पढ़ने पर भी मान का निचला हिस्सा सही बैठता है। छोटे स्थान से हासिल जोड़ते हुए चलने वाले जोड़ के लिए भी यह स्वाभाविक है।

(3) बिट क्रम से अलग
एंडियननेस आमतौर पर बाइटों को रखने के क्रम को कहते हैं। एक बाइट के भीतर बिटों का क्रम प्रोग्राम में लगभग ध्यान देने की बात नहीं होती, क्योंकि प्रोसेसर बाइट को एक इकाई के रूप में संभालता है।


3. जब अलग एंडियननेस वाले कंप्यूटर मिलते हैं

गर्म रोशनी वाले डेस्क लैंप के नीचे लकड़ी की मेज़ पर दो लैपटॉप आमने-सामने रखे हैं और एक नीली नेटवर्क केबल से जुड़े हैं

एक कंप्यूटर के भीतर एंडियननेस लगभग दिखाई नहीं देती। समस्या तब आती है जब डेटा को फ़ाइल या नेटवर्क के ज़रिए अलग एंडियननेस वाले कंप्यूटर को भेजा जाता है।

(1) उलटी पढ़ी जाने वाली संख्या
जब लिटिल-एंडियन कंप्यूटर पूर्णांक 1 को 4 बाइट में सहेजता है, तो वह 01 00 00 00 बनता है। अगर बिग-एंडियन कंप्यूटर इन बाइटों को जैसे का तैसा पढ़े, तो उसे 0x01000000, यानी 16,777,216 जैसा बेतुका मान मिलता है।

(2) NUXI समस्या
16 बिट की इकाई में लिटिल-एंडियन इस्तेमाल करने वाले PDP-11 का डेटा दूसरे तरीके वाली मशीन पर ले जाने पर ‘UNIX’ शब्द कभी-कभी ‘NUXI’ पढ़ा जाता था। हर दो बाइट की जोड़ी की जगह बदल गई थी, और यह नाम बाइट क्रम की समस्याओं का उपनाम बन गया।

(3) मुश्किल से पकड़ में आने वाले बग
एक ही प्रकार की मशीनों के बीच परीक्षण में सब ठीक रहता है और केवल दूसरे प्रकार से जोड़ने पर ही मान गड़बड़ाते हैं, इसलिए कारण खोजने में अक्सर बहुत समय लगता है।


4. आज एंडियननेस को कैसे संभाला जाता है

सर्वर रूम के रैक में लगा नेटवर्क स्विच, जिसके हर पोर्ट में नीली और धूसर नेटवर्क केबलें करीने से लगी हैं और छोटी हरी बत्तियाँ जल रही हैं

एंडियननेस का अंतर मिटाया नहीं जा सकता, इसलिए डेवलपर डेटा का आदान-प्रदान करते समय क्रम पहले से तय करके समस्या हल करते हैं।

(1) नेटवर्क बाइट क्रम
इंटरनेट प्रोटोकॉल (TCP/IP) ने बिग-एंडियन को मानक क्रम के रूप में अपनाया। इसलिए C भाषा जैसी जगहों पर htonl (host to network long) और ntohl जैसे फ़ंक्शन से भेजने से पहले और पाने के बाद क्रम बदला जाता है।

(2) फ़ॉर्मैट द्वारा तय क्रम
Java क्लास फ़ाइलें बिग-एंडियन में तय हैं, और अक्षर एन्कोडिंग UTF-16 सबसे आगे बाइट ऑर्डर मार्क (BOM) लगाकर बताती है कि FE FF हो तो बिग-एंडियन और FF FE हो तो लिटिल-एंडियन है।

(3) लिटिल-एंडियन का दबदबा
x86 और ज़्यादातर ARM उपकरणों के लिटिल-एंडियन में चलने से आज के पर्सनल कंप्यूटर और स्मार्टफ़ोन में व्यावहारिक रूप से लिटिल-एंडियन ही मुख्यधारा बन गई है। फिर भी नेटवर्क और कई फ़ाइल फ़ॉर्मैट में बिग-एंडियन बनी हुई है, इसलिए रूपांतरण अब भी ज़रूरी है।

जैसे अंडा किसी भी सिरे से तोड़ें उसका स्वाद एक-सा रहता है, वैसे ही एंडियननेस भी इस बात का सवाल नहीं कि कौन सही है, बल्कि आपस में तय नियम मिलाने का सवाल है। डेटा भेजने से पहले क्रम तय कर लेने का यह सरल विचार ही एंडियननेस को समझने की पहली सीढ़ी है।

PDF के रूप में सहेजें

आप अभी जो लेख पढ़ रहे हैं, उसका चुनी हुई भाषा का संस्करण खरीद रहे हैं।

US$1.00
चुनी हुई भाषा: हिन्दी

US$1.00 · 1 लेख · 1 भाषा

एक बार खरीदने के बाद, आप उसी खाते से लॉग इन करके खरीदा हुआ संस्करण फिर से प्राप्त कर सकते हैं।

PDF का नमूना देखें ↗लेख का पूरा पाठ निःशुल्क पढ़ा जा सकता है। नमूना फ़ाइल के फ़ॉन्ट और संरचना को दिखाता है।