वस्तु फ़ाइल

From alpha
Jump to navigation Jump to search

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

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

ऑब्जेक्ट प्रोग्राम शब्द कम से कम 1950 के दशक से है:

A term in automatic programming for the machine language program produced by the machine by translating a source program written by the programmer in a language similar to algebraic notation.[1]

एक कंप्यूटर प्रोग्रामर एक कंपाइलर या असेंबलर (कंप्यूटिंग) के साथ ऑब्जेक्ट कोड उत्पन्न करता है। उदाहरण के लिए, लिनक्स के तहत, जीएनयू संकलक संग्रह कंपाइलर एक .o एक्सटेंशन वाली फाइलें उत्पन्न करेगा जो निष्पादन योग्य और लिंक करने योग्य प्रारूप प्रारूप का उपयोग करते हैं। खिड़कियाँ पर संकलन एक .obj एक्सटेंशन वाली फाइलें उत्पन्न करता है जो COFF प्रारूप का उपयोग करती हैं। इसके बाद एक लिंकर का उपयोग ऑब्जेक्ट कोड को एक निष्पादन योग्य प्रोग्राम या लाइब्रेरी में आवश्यकतानुसार प्रीकंपिल्ड सिस्टम लाइब्रेरी में खींचने के लिए किया जाता है।

ऑब्जेक्ट फ़ाइल स्वरूप

कई अलग-अलग ऑब्जेक्ट फ़ाइल स्वरूप हैं; मूल रूप से प्रत्येक प्रकार के कंप्यूटर का अपना अनूठा प्रारूप था, लेकिन यूनिक्स और अन्य में porting ऑपरेटिंग सिस्टम के आगमन के साथ, निष्पादन योग्य और लिंक करने योग्य प्रारूप और सीओएफएफ जैसे कुछ प्रारूपों को विभिन्न प्रकार के सिस्टमों पर परिभाषित और उपयोग किया गया है। लिंकर (कंप्यूटिंग) इनपुट और आउटपुट दोनों के रूप में एक ही प्रारूप का उपयोग करना संभव है, और इस प्रकार पुस्तकालय (कम्प्यूटिंग) और निष्पादन योग्य फ़ाइल प्रारूप के रूप में।[2]: p.16  प्रोग्राम लोड होने पर ऑपरेटिंग सिस्टम द्वारा चुने गए सही प्रारूप के साथ कुछ प्रारूपों में विभिन्न प्रोसेसर के लिए मशीन कोड हो सकता है।[3] कुछ प्रणालियाँ उन स्वरूपों के बीच अंतर करती हैं जो सीधे निष्पादन योग्य हैं और ऐसे प्रारूप जिन्हें लिंकर द्वारा प्रसंस्करण की आवश्यकता होती है। उदाहरण के लिए, OS/360 और उत्तराधिकारी पहले प्रारूप को लोड मॉड्यूल और दूसरे को ऑब्जेक्ट मॉड्यूल कहते हैं। इस मामले में फाइलों के पूरी तरह से अलग प्रारूप हैं।

ऑब्जेक्ट फ़ाइल स्वरूप का डिज़ाइन और/या विकल्प समग्र सिस्टम डिज़ाइन का एक महत्वपूर्ण हिस्सा है। यह लिंकर के प्रदर्शन को प्रभावित करता है और इस प्रकार प्रोग्राम विकसित होने के दौरान प्रोग्रामर टर्नअराउंड होता है। यदि प्रारूप निष्पादनयोग्य के लिए उपयोग किया जाता है, तो डिज़ाइन बूटस्ट्रैपिंग # सॉफ़्टवेयर लोडिंग और निष्पादन में लगने वाले समय को भी प्रभावित करता है, और इस प्रकार उपयोगकर्ताओं के लिए जवाबदेही

निरपेक्ष फ़ाइलें

कई शुरुआती कंप्यूटर, या छोटे माइक्रो कंप्यूटर, केवल एक निरपेक्ष वस्तु प्रारूप का समर्थन करते हैं। कार्यक्रम स्थानांतरित करने योग्य नहीं हैं; विशिष्ट, पूर्वनिर्धारित पतों पर निष्पादित करने के लिए उन्हें इकट्ठा या संकलित करने की आवश्यकता है। फ़ाइल में कोई स्थानांतरण या लिंकेज जानकारी नहीं है। इन फ़ाइलों को रीड/राइट मेमोरी में लोड किया जा सकता है, या केवल पढ़ने के लिये मेमोरी में स्टोर किया जा सकता है। उदाहरण के लिए, Motorola 6800 MIKBUG मॉनिटर में कागज का टेप से एक निरपेक्ष ऑब्जेक्ट फ़ाइल (SREC (फ़ाइल स्वरूप)) को पढ़ने के लिए एक रूटीन होता है।[4] डॉस कॉम फ़ाइल # डॉस बाइनरी प्रारूप पूर्ण ऑब्जेक्ट फ़ाइलों का एक और हालिया उदाहरण है।[5]


विभाजन

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

विशिष्ट ऑब्जेक्ट फ़ाइल स्वरूपों द्वारा समर्थित डेटा के प्रकार:[6]

सेगमेंट परिभाषित होने पर निर्दिष्ट नियमों के अनुसार अलग-अलग ऑब्जेक्ट फ़ाइलों में सेगमेंट को लिंकर द्वारा जोड़ा जा सकता है। ऑब्जेक्ट फ़ाइलों के बीच साझा किए गए सेगमेंट के लिए कन्वेंशन मौजूद हैं; उदाहरण के लिए, DOS में x86 मेमोरी मॉडल हैं जो विशेष खंडों के नाम निर्दिष्ट करते हैं और यह भी कि उन्हें जोड़ा जा सकता है या नहीं।[7] डिबगिंग जानकारी या तो ऑब्जेक्ट फ़ाइल स्वरूप का एक अभिन्न अंग हो सकती है, जैसे COFF में, या डिबगिंग डेटा स्वरूप | अर्ध-स्वतंत्र प्रारूप जिसका उपयोग कई ऑब्जेक्ट स्वरूपों के साथ किया जा सकता है, जैसे कि छुरा या DWARF

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

संदर्भ

  1. Wrubel, Marshal H. (1959). A primer of programming for digital computers. New York: McGraw-Hill. p. 222. Retrieved July 31, 2020.
  2. IBM Corporation (1973). IBM OS Linkage Editor and Loader (PDF). Retrieved 2012-08-06.
  3. "FatELF: Universal Binaries for Linux". Retrieved Aug 2, 2020.
  4. Wiles, Mike; Felix, Andre. MCM6830L7 MIKBUG/MINIBUG ROM (PDF). Motorola Semiconductor Products, Inc. Retrieved July 31, 2020.
  5. Godse, D.A.; Godse, A.P. (2008). Microprocessor - I (First ed.). Pune: Technical Publications. pp. 3–15. ISBN 978-81-8431-355-0.
  6. Mauerer, Wolfgang (2010). Professional Linux Kernel Architecture. John Wiley & Sons. p. Appendix E: The ELF Binary Format. ISBN 978-0-470-34343-2. Retrieved Aug 1, 2020.
  7. Irvine, Kip R. (1993), Assembly language for the IBM-PC (2nd ed.), New York: Macmillan, ISBN 0-02-359651-1


अग्रिम पठन