डेटा सेगमेंट: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Storage segment}} | {{Short description|Storage segment}} | ||
[[कम्प्यूटिंग]] में, डेटा सेगमेंट | [[कम्प्यूटिंग]] में, डेटा सेगमेंट [[वस्तु फ़ाइल]] का भाग होता है या प्रोग्राम का संबंधित [[पता स्थान|ज्ञात स्थान]] होता है जिसमें इनिशियलाइज़्ड [[स्थैतिक चर]] होते हैं, जैसे [[वैश्विक चर]] और [[स्थिर स्थानीय चर]] इस खंड का आकार कार्यक्रम के स्रोत कोड में मूल्यों के आकार से निर्धारित होता है, और [[रन टाइम (कार्यक्रम जीवनचक्र चरण)|रन टाइम]] में नहीं परवर्तित होता है । | ||
डेटा खंड पढ़ा / लिखा जाता है, क्योंकि चर के मूल्यों को रन टाइम पर परवर्तित किया जा सकता है। यह रीड-ओनली डेटा सेगमेंट | डेटा खंड पढ़ा / लिखा जाता है, क्योंकि चर के मूल्यों को रन टाइम पर परवर्तित किया जा सकता है। यह रीड-ओनली डेटा सेगमेंट, जिसमें चर के अतिरिक्त स्थिर स्थिरांक होते हैं; यह कोड सेगमेंट के विपरीत भी है, जिसे टेक्स्ट सेगमेंट के रूप में भी जाना जाता है, जो कई वास्तुकला पर केवल पढ़ने के लिए होता है। गैर-प्रारंभिक डेटा, दोनों चर और स्थिरांक, इसके अतिरिक्त बीएसएस खंड में हैं। | ||
ऐतिहासिक रूप से, आंतरिक ज्ञात रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, प्रारंभिक सीपीयू ने विभाजन की प्रणाली प्रारंभ की। जिससे वे कुछ क्षेत्रों में ऑफ़समुच्चय के रूप में उपयोग करने के लिए इंडेक्स के छोटे समुच्चय को स्टोर करेंगे। सीपीयू के [[इंटेल 8086]] परिवार ने चार खंड प्रदान किए: [[कोड खंड]], डेटा खंड, स्टैक खंड और अतिरिक्त खंड। प्रत्येक खंड को स्मृति में विशिष्ट स्थान पर सॉफ्टवेयर द्वारा निष्पादित किया गया था उन खंडों के भीतर डेटा पर संचालित सभी निर्देशों को उस खंड की प्रारंभिक के सापेक्ष निष्पादित किया गया था। इसने 16-बिट एड्रेस रजिस्टर की अनुमति दी, जो सामान्य रूप से 1 MB मेमोरी स्पेस तक पहुंचने के लिए 64 KB मेमोरी स्पेस तक पहुंचने में सक्षम होगा। | ऐतिहासिक रूप से, आंतरिक ज्ञात रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, प्रारंभिक सीपीयू ने विभाजन की प्रणाली प्रारंभ की। जिससे वे कुछ क्षेत्रों में ऑफ़समुच्चय के रूप में उपयोग करने के लिए इंडेक्स के छोटे समुच्चय को स्टोर करेंगे। सीपीयू के [[इंटेल 8086]] परिवार ने चार खंड प्रदान किए: [[कोड खंड]], डेटा खंड, स्टैक खंड और अतिरिक्त खंड। प्रत्येक खंड को स्मृति में विशिष्ट स्थान पर सॉफ्टवेयर द्वारा निष्पादित किया गया था उन खंडों के भीतर डेटा पर संचालित सभी निर्देशों को उस खंड की प्रारंभिक के सापेक्ष निष्पादित किया गया था। इसने 16-बिट एड्रेस रजिस्टर की अनुमति दी, जो सामान्य रूप से 1 MB मेमोरी स्पेस तक पहुंचने के लिए 64 KB मेमोरी स्पेस तक पहुंचने में सक्षम होगा। | ||
Line 9: | Line 9: | ||
== प्रोग्राम मेमोरी == | == प्रोग्राम मेमोरी == | ||
कंप्यूटर प्रोग्राम मेमोरी को दो वर्गों में वर्गीकृत किया जा सकता है: रीड-ओनली मेमोरी और रीड/राइट मेमोरी। यह भेद प्रारंभिक प्रणालियों से विस्तारित है, जो केवल-पढ़ने के लिए मेमोरी जैसे [[मास्क रोम]], [[ईपीरोम]], [[प्रोग्राम करने योग्य [[केवल पढ़ने के लिये मेमोरी]]]] या ईईपीरोम में अपना मुख्य कार्यक्रम रखते हैं। जैसे-जैसे प्रणाली और अधिक जटिल होते गए और रोम | कंप्यूटर प्रोग्राम मेमोरी को दो वर्गों में वर्गीकृत किया जा सकता है: रीड-ओनली मेमोरी और रीड/राइट मेमोरी। यह भेद प्रारंभिक प्रणालियों से विस्तारित है, जो केवल-पढ़ने के लिए मेमोरी जैसे [[मास्क रोम]], [[ईपीरोम]], [[प्रोग्राम करने योग्य [[केवल पढ़ने के लिये मेमोरी]]]] या ईईपीरोम में अपना मुख्य कार्यक्रम रखते हैं। जैसे-जैसे प्रणाली और अधिक जटिल होते गए और रोम से क्रियान्वित करने के अतिरिक्त अन्य मीडिया से रैम में प्रोग्राम लोड किए गए, यह विचार है कि प्रोग्राम की मेमोरी के कुछ भाग को संशोधित नहीं किया जाना चाहिए, निरंतर रखा गया था। ये कार्यक्रम के .text और .rodata खंड बन गए, और शेष जिन्हें विशिष्ट कार्यों के लिए कई अन्य खंडों में विभाजित करने के लिए लिखा जा सकता था। | ||
=== कोड === | === कोड === | ||
Line 33: | Line 33: | ||
=== हीप === | === हीप === | ||
{{main|मैनुअल मेमोरी प्रबंधन}} | {{main|मैनुअल मेमोरी प्रबंधन}} | ||
हीप सेगमेंट में गतिशील रूप से आवंटित मेमोरी होती है, सामान्यतः पर बीएसएस सेगमेंट के अंत में आरम्भ होती है और वहां से बड़े स्तरों को ज्ञात करती है। यह | हीप सेगमेंट में गतिशील रूप से आवंटित मेमोरी होती है, सामान्यतः पर बीएसएस सेगमेंट के अंत में आरम्भ होती है और वहां से बड़े स्तरों को ज्ञात करती है। यह [[malloc|मल्लोक]], काललोक, रेआललोक (realloc), और फ्री द्वारा प्रबंधित किया जाता है, जो इसके आकार को समायोजित करने के लिए [[Sbrk]] और sbrk प्रणाली कॉल का उपयोग कर सकता है (ध्यान दें कि मल्लोक / के अनुबंध को पूर्ण करने के लिए brk/sbrk और हीप सेगमेंट के उपयोग की आवश्यकता नहीं है calloc/realloc/free; प्रक्रिया '[[आभासी पता स्थान|आभासी ज्ञात स्थान]] में वर्चुअल मेमोरी के संभावित गैर-सन्निहित क्षेत्रों को आरक्षित/अनारक्षित करने के लिए उन्हें [[mmap]]/munmap का उपयोग करके भी कार्यान्वित किया जा सकता है)। हीप सेगमेंट को प्रक्रिया में सभी थ्रेड्स, भागीदारी पुस्तकालय और गतिशील रूप से लोड किए गए मॉड्यूल द्वारा भागीदारी की जाता है। | ||
=== हीप === | === हीप === | ||
{{main|कॉल स्टैक}} | {{main|कॉल स्टैक}} | ||
स्टैक सेगमेंट में [[कॉल स्टैक]], लिफो | स्टैक सेगमेंट में [[कॉल स्टैक]], लिफो संरचना होती है, जो सामान्यतः मेमोरी के उच्च भागों में स्थित होती है। स्टैक पॉइंटर रजिस्टर स्टैक के शीर्ष को ट्रैक करता है; जब कोई मान स्टैक पर समायोजित किया जाता है। फ़ंक्शन कॉल के लिए पुश किए गए मानों के समुच्चय को स्टैक फ़्रेम कहा जाता है। स्टैक फ्रेम में कम से कम रिटर्न एड्रेस होता है। स्टैक पर [[स्वचालित चर]] भी आवंटित किए जाते हैं। | ||
हीप खंड पारंपरिक रूप से हीप खंड से जुड़ा हुआ है और वे दूसरे की ओर बढ़ते हैं; जब स्टैक पॉइंटर हीप पॉइंटर से मिलता है, तो फ्री मेमोरी समाप्त हो जाती है। बड़े एड्रेस स्पेस और वर्चुअल मेमोरी तकनीकों के साथ वे अधिक स्वतंत्र रूप से रखे जाते हैं, किन्तु वे अभी भी सामान्यतः अभिसरण दिशा में बढ़ते हैं। मानक पीसी [[x86 आर्किटेक्चर|x86 वास्तुकला]] पर स्टैक ज्ञात शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक समय के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम ज्ञात पर और हीप के निकट हैं। कुछ अन्य वास्तुकला पर यह विपरीत दिशा में बढ़ता है। | हीप खंड पारंपरिक रूप से हीप खंड से जुड़ा हुआ है और वे दूसरे की ओर बढ़ते हैं; जब स्टैक पॉइंटर हीप पॉइंटर से मिलता है, तो फ्री मेमोरी समाप्त हो जाती है। बड़े एड्रेस स्पेस और वर्चुअल मेमोरी तकनीकों के साथ वे अधिक स्वतंत्र रूप से रखे जाते हैं, किन्तु वे अभी भी सामान्यतः अभिसरण दिशा में बढ़ते हैं। मानक पीसी [[x86 आर्किटेक्चर|x86 वास्तुकला]] पर स्टैक ज्ञात शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक समय के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम ज्ञात पर और हीप के निकट हैं। कुछ अन्य वास्तुकला पर यह विपरीत दिशा में बढ़ता है। |
Revision as of 01:09, 3 March 2023
कम्प्यूटिंग में, डेटा सेगमेंट वस्तु फ़ाइल का भाग होता है या प्रोग्राम का संबंधित ज्ञात स्थान होता है जिसमें इनिशियलाइज़्ड स्थैतिक चर होते हैं, जैसे वैश्विक चर और स्थिर स्थानीय चर इस खंड का आकार कार्यक्रम के स्रोत कोड में मूल्यों के आकार से निर्धारित होता है, और रन टाइम में नहीं परवर्तित होता है ।
डेटा खंड पढ़ा / लिखा जाता है, क्योंकि चर के मूल्यों को रन टाइम पर परवर्तित किया जा सकता है। यह रीड-ओनली डेटा सेगमेंट, जिसमें चर के अतिरिक्त स्थिर स्थिरांक होते हैं; यह कोड सेगमेंट के विपरीत भी है, जिसे टेक्स्ट सेगमेंट के रूप में भी जाना जाता है, जो कई वास्तुकला पर केवल पढ़ने के लिए होता है। गैर-प्रारंभिक डेटा, दोनों चर और स्थिरांक, इसके अतिरिक्त बीएसएस खंड में हैं।
ऐतिहासिक रूप से, आंतरिक ज्ञात रजिस्टर के मूल आकार से बड़े मेमोरी एड्रेस स्पेस का समर्थन करने में सक्षम होने के लिए, प्रारंभिक सीपीयू ने विभाजन की प्रणाली प्रारंभ की। जिससे वे कुछ क्षेत्रों में ऑफ़समुच्चय के रूप में उपयोग करने के लिए इंडेक्स के छोटे समुच्चय को स्टोर करेंगे। सीपीयू के इंटेल 8086 परिवार ने चार खंड प्रदान किए: कोड खंड, डेटा खंड, स्टैक खंड और अतिरिक्त खंड। प्रत्येक खंड को स्मृति में विशिष्ट स्थान पर सॉफ्टवेयर द्वारा निष्पादित किया गया था उन खंडों के भीतर डेटा पर संचालित सभी निर्देशों को उस खंड की प्रारंभिक के सापेक्ष निष्पादित किया गया था। इसने 16-बिट एड्रेस रजिस्टर की अनुमति दी, जो सामान्य रूप से 1 MB मेमोरी स्पेस तक पहुंचने के लिए 64 KB मेमोरी स्पेस तक पहुंचने में सक्षम होगा।
विशिष्ट कार्यों के साथ मेमोरी स्पेस को असतत ब्लॉकों में खंडित करना प्रोग्रामिंग भाषाओं में किया जाता है और अवधारणा अभी भी आधुनिक प्रोग्रामिंग भाषाओं में व्यापक रूप से उपयोग में है।
प्रोग्राम मेमोरी
कंप्यूटर प्रोग्राम मेमोरी को दो वर्गों में वर्गीकृत किया जा सकता है: रीड-ओनली मेमोरी और रीड/राइट मेमोरी। यह भेद प्रारंभिक प्रणालियों से विस्तारित है, जो केवल-पढ़ने के लिए मेमोरी जैसे मास्क रोम, ईपीरोम, [[प्रोग्राम करने योग्य केवल पढ़ने के लिये मेमोरी]] या ईईपीरोम में अपना मुख्य कार्यक्रम रखते हैं। जैसे-जैसे प्रणाली और अधिक जटिल होते गए और रोम से क्रियान्वित करने के अतिरिक्त अन्य मीडिया से रैम में प्रोग्राम लोड किए गए, यह विचार है कि प्रोग्राम की मेमोरी के कुछ भाग को संशोधित नहीं किया जाना चाहिए, निरंतर रखा गया था। ये कार्यक्रम के .text और .rodata खंड बन गए, और शेष जिन्हें विशिष्ट कार्यों के लिए कई अन्य खंडों में विभाजित करने के लिए लिखा जा सकता था।
कोड
कोड खंड, जिसे पाठ खंड के रूप में भी जाना जाता है, जिसमे निष्पादन योग्य कोड होता है और यह सामान्यतः केवल पढ़ने के लिए और निश्चित आकार का होता है।
डेटा
यह टेक्स्ट, विभिन्न डेटा और स्टैक और हीप सेक्शन के साथ साधारण कंप्यूटर की प्रोग्राम मेमोरी के विशिष्ट लेआउट को दिखाता है।
डेटा खंड में आरंभिक स्थैतिक चर होते हैं, जैसे वैश्विक चर और स्थानीय स्थैतिक चर जिनका परिभाषित मूल्य होता है और जिन्हें संशोधित किया जा सकता है। सी में उदाहरणों में सम्मलित हैं:
int i = 3; char a[] = "Hello World";
इन चरों के मान प्रारंभ में रीड-ओनली मेमोरी (सामान्यतः पर कोड सेगमेंट के भीतर) में संग्रहीत किए जाते हैं और प्रोग्राम को सुचारु रूप से डेटा सेगमेंट में कॉपी किया जाता है।
बीएसएस
बीएसएस सेगमेंट में गैर-प्रारंभिक स्थिर डेटा, चर और स्थिरांक दोनों सम्मलित हैं, जैसे वैश्विक चर और स्थानीय स्थैतिक चर जो शून्य से आरंभीकृत हैं या स्रोत कोड में स्पष्ट आरंभीकरण नहीं है। सी में उदाहरणों में सम्मलित हैं:
static int i; static char a[12];
हीप
हीप सेगमेंट में गतिशील रूप से आवंटित मेमोरी होती है, सामान्यतः पर बीएसएस सेगमेंट के अंत में आरम्भ होती है और वहां से बड़े स्तरों को ज्ञात करती है। यह मल्लोक, काललोक, रेआललोक (realloc), और फ्री द्वारा प्रबंधित किया जाता है, जो इसके आकार को समायोजित करने के लिए Sbrk और sbrk प्रणाली कॉल का उपयोग कर सकता है (ध्यान दें कि मल्लोक / के अनुबंध को पूर्ण करने के लिए brk/sbrk और हीप सेगमेंट के उपयोग की आवश्यकता नहीं है calloc/realloc/free; प्रक्रिया 'आभासी ज्ञात स्थान में वर्चुअल मेमोरी के संभावित गैर-सन्निहित क्षेत्रों को आरक्षित/अनारक्षित करने के लिए उन्हें mmap/munmap का उपयोग करके भी कार्यान्वित किया जा सकता है)। हीप सेगमेंट को प्रक्रिया में सभी थ्रेड्स, भागीदारी पुस्तकालय और गतिशील रूप से लोड किए गए मॉड्यूल द्वारा भागीदारी की जाता है।
हीप
स्टैक सेगमेंट में कॉल स्टैक, लिफो संरचना होती है, जो सामान्यतः मेमोरी के उच्च भागों में स्थित होती है। स्टैक पॉइंटर रजिस्टर स्टैक के शीर्ष को ट्रैक करता है; जब कोई मान स्टैक पर समायोजित किया जाता है। फ़ंक्शन कॉल के लिए पुश किए गए मानों के समुच्चय को स्टैक फ़्रेम कहा जाता है। स्टैक फ्रेम में कम से कम रिटर्न एड्रेस होता है। स्टैक पर स्वचालित चर भी आवंटित किए जाते हैं।
हीप खंड पारंपरिक रूप से हीप खंड से जुड़ा हुआ है और वे दूसरे की ओर बढ़ते हैं; जब स्टैक पॉइंटर हीप पॉइंटर से मिलता है, तो फ्री मेमोरी समाप्त हो जाती है। बड़े एड्रेस स्पेस और वर्चुअल मेमोरी तकनीकों के साथ वे अधिक स्वतंत्र रूप से रखे जाते हैं, किन्तु वे अभी भी सामान्यतः अभिसरण दिशा में बढ़ते हैं। मानक पीसी x86 वास्तुकला पर स्टैक ज्ञात शून्य की ओर बढ़ता है, जिसका अर्थ है कि अधिक समय के आइटम, कॉल श्रृंखला में गहरे, संख्यात्मक रूप से कम ज्ञात पर और हीप के निकट हैं। कुछ अन्य वास्तुकला पर यह विपरीत दिशा में बढ़ता है।
व्याख्या की गई भाषाएँ
व्याख्या की गई कुछ भाषाएँ डेटा खंड के लिए समान सुविधा प्रदान करती हैं, विशेष रूप से पर्ल[1] और रूबी (प्रोग्रामिंग भाषा)।[2] इन भाषाओं में, रेखा सहित __DATA__
(पर्ल) या __END__
(रूबी, प्राचीन पर्ल) कोड सेगमेंट के अंत और डेटा सेगमेंट की प्रारंभिक को चिह्नित करता है। केवल इस लाइन से पहले की सामग्री को निष्पादित किया जाता है, और इस लाइन के पश्चात स्रोत फ़ाइल की सामग्री फ़ाइल ऑब्जेक्ट के रूप में उपलब्ध होती है: PACKAGE::DATA
पर्ल में (उदा., main::DATA
) और DATA
रूबी में इसे यहाँ दस्तावेज़ ( फ़ाइल शाब्दिक) का रूप माना जा सकता है।
यह भी देखें
- विभाजन (मेमोरी)
- विखंडन दोष
- लिंकर (कंप्यूटिंग)
- कोड खंड
- .बीएसएस
- गैर-प्रारंभिक चर
- ढेर (सार डेटा प्रकार)
- प्रक्रिया नियंत्रण ब्लॉक
संदर्भ
- ↑ perldata: Special Literals
- ↑ Ruby: Object: __END__
बाहरी संबंध
- "C startup". bravegnu.org.
- "mem_sequence.c - sequentially lists memory regions in a process". Archived from the original on 2009-02-02.
- van der Linden, Peter (1997). Expert C Programming: Deep C Secrets (PDF). Prentice Hall. pp. 119ff.