2012-02-26 14 views
8

ऑपरेटिंग सिस्टम (मुख्य रूप से संदर्भ के रूप में लिनक्स के साथ) का अध्ययन करने में, कुछ ऐसे मुद्दे हैं जिन्हें मैंने अध्ययन की गई सामग्री में अच्छी तरह से समझाया नहीं है।आधुनिक ऑपरेटिंग सिस्टम में मेमोरी सेगमेंटेशन

मेमोरी में लोड किए गए प्रोग्राम अक्सर लिनक्स जैसे ऑपरेटिंग सिस्टम के संदर्भ में टेक्स्ट, डेटा, स्टैक इत्यादि के खंडों में विभाजित होने के रूप में वर्णित होते हैं, जहां वर्चुअल मेमोरी पूरी तरह से पेजिंग पर आधारित होती है। क्या यह मामला है कि यह सिर्फ कार्यक्रम है, न कि स्मृति खुद को जिसे सेगमेंट के रूप में जाना जाता है? यदि ऐसा है, तो मुझे शब्दावली उलझन में मिलती है।

मैंने देखा कि मॉलोक को लिनक्स में 'sbrk' का उपयोग करके कार्यान्वित किया जा सकता है जो डेटा सेगमेंट के आकार को बढ़ाता है। फिर, क्या यह 'डाटा सेगमेंट' सिर्फ स्मृति का एक क्षेत्र है जिसका उपयोग सम्मेलन द्वारा डेटा के लिए किया जाता है, न कि 'असली' सेगमेंट? (अतिरिक्त प्रश्न: 'sbrk' 'सेगमेंट' के आकार को कम करने में सक्षम नहीं प्रतीत होता है। क्या इसका मतलब यह है कि एक प्रक्रिया छोड़ने के अलावा ओएस को स्मृति जारी नहीं कर सकती है?)

मुझे भी रूचि है यह जानकर कि क्यों आधुनिक ऑपरेटिंग सिस्टम (पेजेड) सेगमेंटेशन का उपयोग नहीं कर रहे हैं। क्या यह कुछ प्रकार के हमलों को अपने स्वयं के संरक्षित सेगमेंट में रहने वाले कोड को रोक नहीं सकता है, जिससे सुरक्षा बढ़ रही है? दूसरी तरफ, क्या यह उदाहरण देगा जेआईटी संकलन असंभव/मुश्किल है?

उपरोक्त प्रश्नों के उत्तर "हां"/"नहीं" के अलावा, मुझे इस विषय पर किसी भी अंतर्दृष्टिपूर्ण विस्तार में रूचि है।

अग्रिम धन्यवाद।

+0

भी 'brk', जो * * कम मूल्य के लिए कार्यक्रम को तोड़ने सेट कर सकते हैं नहीं है। और सेगमेंट * पृष्ठों में विभाजित हैं, और प्रत्येक पृष्ठ * वास्तव में केवल पढ़ने या ना-निष्पादित हो सकता है, और टेक्स्ट सेगमेंट और ro-data सेगमेंट आमतौर पर सेट किया जाएगा। –

उत्तर

4

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

कई आर्किटेक्चर में अब विभाजन नहीं है। X86 पर, विभाजन केवल एक ऐतिहासिक पेलोड है और एक कोड और डेटा सेगमेंट स्थापित करने के लिए सेट किया गया है जो पूरे पता स्थान को कवर करता है क्योंकि सेगमेंटेशन को बाईपास नहीं किया जा सकता है।

sbrk के माध्यम से प्राप्त स्मृति को मुक्त कराने के बारे में आपके प्रश्न का जवाब यहां है: How do I free memory obtained by sbrk()?

+0

आपके उत्तर के लिए धन्यवाद। क्या _paged_ सेगमेंटेशन से हमें कोई फायदा नहीं हुआ है? ऐसा लगता है कि अपने स्वयं के पता स्थान के साथ वास्तविक खंडों में सेगमेंट होने से स्मृति प्रबंधन को सरल बनाया जाएगा और स्टैक और डेटा सेगमेंट की संभावना एक-दूसरे तक पहुंच जाएगी। सेगमेंट हैंडलिंग को कंपाइलर/लिंकर द्वारा नियंत्रित किया जा सकता है। किसी भी दर पर, मुझे लगता है कि डेटा सेगमेंट आदि में "सेगमेंट" शब्द का उपयोग सिर्फ भ्रम की मांग कर रहा है। मुझे लगता है कि मुझे कुछ विकिपीडिया पृष्ठों पर कुछ असंबद्धता नोट्स जोड़ना चाहिए :) –

+1

@Gnurou मुझे लगता है कि आप मिश्रित हो गए हैं। x86 खंडों को _linear_ (यानी वर्चुअल) पता स्थान में परिभाषित किया गया है, जिसका अर्थ है कि पेजिंग विभाजन के बाद आता है। यह इंटेल® 64 और आईए -32 आर्किटेक्चर डेवलपर मैनुअल: वॉल्यूम की धारा 3.1 में स्पष्ट रूप से बताया गया है। 3 ए] (http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html)। – reima

+0

रीमामा: आप सही हैं - इसे इंगित करने के लिए धन्यवाद। इन टिप्पणियों को हटा रहा है। – Gnurou

संबंधित मुद्दे