अनुप्रयोग बाइनरी इंटरफ़ेस

From alpha
Jump to navigation Jump to search

इन-कर्नेल और कर्नेल-टू-यूज़रस्पेस एपीआई और एबीआई की उच्च-स्तरीय तुलना
लिनक्स कर्नेल और जीएनयू सी लाइब्रेरी लिनक्स कर्नेल इंटरफेस#कर्नेल-यूजर स्पेस एपीआई को परिभाषित करते हैं। संकलन के बाद, बायनेरिज़ एक ABI प्रदान करते हैं। इस एबीआई को लंबे समय तक स्थिर रखना स्वतंत्र सॉफ्टवेयर विक्रेता के लिए महत्वपूर्ण है।

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

एक एबीआई परिभाषित करता है कि मशीन कोड में डेटा संरचनाओं या कम्प्यूटेशनल रूटीन को कैसे एक्सेस किया जाता है, जो एक निम्न-स्तरीय, हार्डवेयर-निर्भर प्रारूप है। इसके विपरीत, एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस|एपीआई स्रोत कोड में इस एक्सेस को परिभाषित करता है, जो अपेक्षाकृत उच्च-स्तरीय, हार्डवेयर-स्वतंत्र, अक्सर मानव-पठनीय प्रारूप है। एबीआई का एक सामान्य पहलू कॉलिंग कन्वेंशन है, जो यह निर्धारित करता है कि डेटा को इनपुट के रूप में कैसे प्रदान किया जाता है, या कम्प्यूटेशनल रूटीन से आउटपुट के रूप में पढ़ा जाता है। इसके उदाहरण हैं x86 कॉलिंग कन्वेंशन

एबीआई (जो आधिकारिक तौर पर मानकीकृत हो सकता है या नहीं भी हो सकता है) का पालन करना आमतौर पर एक संकलक, ऑपरेटिंग सिस्टम या लाइब्रेरी लेखक का काम होता है। हालाँकि, प्रोग्रामिंग भाषाओं के मिश्रण में प्रोग्राम लिखते समय, या अलग-अलग कंपाइलरों के साथ एक ही भाषा में लिखे गए प्रोग्राम को संकलित करते समय एक एप्लिकेशन प्रोग्रामर को सीधे ABI से निपटना पड़ सकता है।

विवरण

एबीआई द्वारा कवर किए गए विवरण में निम्नलिखित शामिल हैं:

  • प्रोसेसर इंस्ट्रक्शन सेट, रजिस्टर फाइल स्ट्रक्चर, स्टैक ऑर्गनाइजेशन, मेमोरी एक्सेस टाइप्स आदि जैसे विवरणों के साथ।
  • मूल डेटा प्रकारों के आकार, लेआउट और डेटा संरचना संरेखण जो प्रोसेसर सीधे एक्सेस कर सकते हैं
  • कॉलिंग कन्वेंशन, जो यह नियंत्रित करता है कि फ़ंक्शन (प्रोग्रामिंग) के तर्कों को कैसे पारित किया जाता है, और मूल्यों को पुनः प्राप्त किया जाता है; उदाहरण के लिए, यह निम्नलिखित को नियंत्रित करता है:
    • क्या सभी पैरामीटर स्टैक पर पास किए गए हैं, या कुछ रजिस्टरों में पास किए गए हैं
    • किस फ़ंक्शन पैरामीटर के लिए कौन से रजिस्टरों का उपयोग किया जाता है
    • स्टैक पर पारित पहला फ़ंक्शन पैरामीटर पहले या आखिरी में धकेल दिया गया है या नहीं
  • किसी एप्लिकेशन को ऑपरेटिंग सिस्टम को सिस्टम कॉल कैसे करना चाहिए, और अगर ABI सिस्टम कॉल विधि ठूंठ के लिए प्रक्रिया कॉल के बजाय डायरेक्ट सिस्टम कॉल निर्दिष्ट करता है, तो सिस्टम कॉल नंबर
  • एक पूर्ण ऑपरेटिंग सिस्टम एबीआई के मामले में, वस्तु फ़ाइलों, प्रोग्राम लाइब्रेरी इत्यादि का बाइनरी प्रारूप।

पूर्ण एबीआई

एक पूर्ण ABI, जैसे Intel Binary Compatibility Standard (iBCS),[1] एक ऑपरेटिंग सिस्टम से एक प्रोग्राम की अनुमति देता है जो ABI को किसी अन्य ऐसी प्रणाली पर बिना किसी संशोधन के चलाने की अनुमति देता है, बशर्ते कि आवश्यक साझा पुस्तकालय मौजूद हों, और इसी तरह की पूर्वापेक्षाएँ पूरी हों।

ABI विवरण का मानकीकरण भी कर सकते हैं जैसे कि नाम मैंगलिंग#नेम मैंगलिंग इन C++|C++ नेम मैंगलिंग,[2] अपवाद हैंडलिंग प्रचार,[3] और एक ही प्लेटफॉर्म पर कंपाइलर्स के बीच कॉलिंग कन्वेंशन, लेकिन क्रॉस-प्लेटफ़ॉर्म संगतता की आवश्यकता नहीं है।

एंबेडेड एबीआई

एक एम्बेडेड-एप्लिकेशन बाइनरी इंटरफ़ेस (EABI) एक एम्बेडेड ऑपरेटिंग सिस्टम के साथ उपयोग के लिए फ़ाइल स्वरूपों, डेटा प्रकारों, रजिस्टर उपयोग, स्टैक फ्रेम संगठन और एक अंतः स्थापित प्रणाली सॉफ़्टवेयर प्रोग्राम के फ़ंक्शन पैरामीटर पासिंग के लिए मानक सम्मेलनों को निर्दिष्ट करता है।

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

ईएबीआई को एम्बेडेड सिस्टम के सीमित संसाधनों के भीतर प्रदर्शन के लिए अनुकूलित करने के लिए डिज़ाइन किया गया है। इसलिए, ईएबीआई जटिल ऑपरेटिंग सिस्टम में कर्नेल और उपयोगकर्ता कोड के बीच बने अधिकांश सार को छोड़ देते हैं। उदाहरण के लिए, गतिशील लिंकिंग से बचा जा सकता है ताकि छोटे एक्जीक्यूटेबल और तेज लोडिंग की अनुमति दी जा सके, फिक्स्ड रजिस्टर उपयोग अधिक कॉम्पैक्ट स्टैक और कर्नेल कॉल की अनुमति देता है, और विशेषाधिकार प्राप्त मोड में एप्लिकेशन चलाने से डिवाइस ड्राइवर को कॉल करने के संकेत के बिना कस्टम हार्डवेयर ऑपरेशन तक सीधे पहुंच की अनुमति मिलती है।[4] ईएबीआई का चुनाव प्रदर्शन को प्रभावित कर सकता है।[5][6] व्यापक रूप से उपयोग किए जाने वाले ईएबीआई में पावरपीसी,[4]आर्म आर्किटेक्चर ईएबीआई[7] और MIPS आर्किटेक्चर EABI।[8] सी लाइब्रेरी जैसे विशिष्ट सॉफ्टवेयर कार्यान्वयन अधिक ठोस एबीआई बनाने के लिए अतिरिक्त सीमाएं लगा सकते हैं; एक उदाहरण एआरएम के लिए जीएनयू ओएबीआई और ईएबीआई है, जो दोनों एआरएम ईएबीआई के सबसेट हैं।[9]


यह भी देखें


संदर्भ

  1. Intel Binary Compatibility Standard (iBCS)
  2. "Itanium C++ ABI". (compatible with multiple architectures)
  3. "Itanium C++ ABI: Exception Handling". (compatible with multiple architectures)
  4. 4.0 4.1 "EABI Summary". PowerPC Embedded Application Binary Interface: 32-Bit Implementation (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1 October 1995. pp. 28–30.
  5. "Debian ARM accelerates via EABI port". Linuxdevices.com. 16 October 2016. Archived from the original on 21 January 2007. Retrieved 11 October 2007.
  6. Andrés Calderón and Nelson Castillo (14 March 2007). "Why ARM's EABI matters". Linuxdevices.com. Archived from the original on 31 March 2007. Retrieved 11 October 2007.
  7. "ABI for the Arm Architecture". Developer.arm.com. Retrieved 4 February 2020.
  8. Eric Christopher (11 June 2003). "mips eabi documentation". binutils@sources.redhat.com (Mailing list). Retrieved 19 June 2020.
  9. "ArmEabiPort". Debian Wiki. Strictly speaking, both the old and new ARM ABIs are subsets of the ARM EABI specification, but in everyday usage the term "EABI" is used to mean the new one described here and "OABI" or "old-ABI" to mean the old one.


बाहरी संबंध