जब लिनक्स कर्लिंग पेजिंग / वर्चुअल मेमोरी का समर्थन करता है तो लिनक्स एक स्वैप विभाजन का उपयोग क्यों करता है?


23

जहाँ तक मुझे पेजिंग और स्वैपिंग की समझ है, वे पूरी तरह से अलग अवधारणाएँ हैं। स्वैपिंग का मतलब है, कि एक प्रक्रिया या तो पूरी तरह से भौतिक मेमोरी में होती है या हार्ड ड्राइव पर, एक प्रक्रिया के पेजिंग भाग भौतिक मेमोरी में हो सकते हैं और अन्य भाग हार्ड ड्राइव पर हो सकते हैं।

लेकिन फिर लिनक्स को एक स्वैप विभाजन की आवश्यकता क्यों है? यदि भौतिक मेमोरी भरी हुई है, तो कुछ प्रक्रियाओं को हार्ड ड्राइव में आउटसोर्स किया जाएगा और एक नई प्रक्रिया को वर्चुअल मेमोरी से भौतिक मेमोरी में मैप किया जाएगा।

मुझे अभी नहीं पता है कि किसी को एक स्वैप विभाजन (या सामान्य रूप से स्वैपिंग) की आवश्यकता क्यों है?

या यह सिर्फ शब्दावली का मामला है और swap partition == virtual memory?


5
सावधान रहें कि कंप्यूटर आर्किटेक्चर में "वर्चुअल मेमोरी" एक तकनीक है, जबकि एमएस विंडोज (गलत तरीके से आईएमओ) इसे परिभाषित करता है "वर्चुअल मेमोरी आपके कंप्टूअर की हार्ड डिस्क पर स्टोरेज स्पेस है जिसे विंडोज रैंडम एक्सेस मेमोरी (रैम) के साथ संयोजन में उपयोग करता है।" IE गूगल विंडोज़ "वर्चुअल मेमोरी"
चूरा

जवाबों:


25

हाँ, यह केवल शब्दावली की बात है, कई मामलों में एक स्वैप विभाजन का उपयोग वर्चुअल मेमोरी के रूप में किया जाता है।

UNIX और UNIX- जैसी प्रणालियाँ पृष्ठ-फाइलों में स्वैप विभाजन को पसंद करती हैं, क्योंकि वे सन्निहित हो सकते हैं, जिसके परिणामस्वरूप पृष्ठ-फ़ाइल की तुलना में कम समय की तलाश होती है जो खंडित हो सकती है।


6
और इस तरह से लिनक्स इंस्टॉलेशन के बीच एक सिंगल स्वैप विभाजन साझा करना भी आसान है।
oKtosiTe

3
आमतौर पर एक पेजफाइल पहली बूट पर पूरी तरह से बनाया जाता है, इसलिए यह खंडित नहीं होगा (अच्छी तरह से .. अभी भी कुछ संभावनाएं हैं ..)
एंड्रियासी

12
बहुत जल्द UNIXes में केवल स्वैपिंग थी, पेजिंग नहीं थी, और केवल एक समर्पित पार्टीशन को स्वैप कर सकते थे। जैसे ही हार्डवेयर ने इसका समर्थन किया, पेजिंग लागू कर दी गई, लेकिन "स्वैप विभाजन" नाम अटक गया। किसी फ़ाइल में पेजिंग हाल ही में किया गया है और इसमें उच्च ओएस ओवरहेड के साथ-साथ विखंडन का जोखिम भी है, इसलिए यह अभी भी हतोत्साहित है।
zwol

1
"स्वैप विभाजन का उपयोग वर्चुअल मेमोरी के रूप में किया जाता है।" - केवल Microsoft विंडोज "वर्चुअल मेमोरी" के रूप में माध्यमिक भंडारण (उदाहरण के लिए डिस्क पर पेज फ़ाइल) को परिभाषित करता है। लेकिन यहां तक ​​कि वे इस उपयोग से दूर जाने की कोशिश कर रहे हैं। पहले परिणाम के लिए विंडोज़ "वर्चुअल मेमोरी" और सिनॉप्सिस को देखने की कोशिश करें ("वर्चुअल मेमोरी स्टोरेज स्पेस है ...") पेज कंटेंट से मेल नहीं खाता है। एक सही कथन "स्वैप पार्टीशन का उपयोग वर्चुअल मेमोरी द्वारा किया जाता है ।"
चूरा

14

मुझे नहीं पता कि आपको यह धारणा कहां से मिली कि "स्वैपिंग का मतलब है, कि एक प्रक्रिया पूरी तरह से भौतिक स्मृति में या हार्ड ड्राइव पर है"। वह अर्थ कुछ दशकों से उपयोग में नहीं है। उद्धरण विकिपीडिया :

ऐतिहासिक रूप से, स्वैपिंग को रोल-इन / रोल-आउट के रूप में जाना जाता है, इस योजना में एक समय में एक पूरे कार्यक्रम में द्वितीयक भंडारण से / तक जाने के लिए संदर्भित किया जाता है। 1960 के दशक में, वर्चुअल मेमोरी की अवधारणा को पेश करने के बाद - दो खंडों में, या तो खंडों या पृष्ठों का उपयोग करते हुए - शब्द स्वैपिंग को डिस्क और मेमोरी के बीच क्रमशः, या तो खंडों या पृष्ठों पर ले जाने के लिए लागू किया गया था। आज वर्चुअल मेमोरी के साथ ज्यादातर पेजों पर आधारित है, खंडों पर नहीं, स्वैपिंग पेजिंग का काफी करीबी पर्याय बन गया है, हालांकि एक अंतर के साथ। [संदिग्ध - चर्चा करें]

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

पेजिंग इस सामान्य प्रक्रिया को संदर्भित करता है। गमागमन स्वैप क्षेत्र (एक स्वैप विभाजन या स्वैप फ़ाइल): इस मामले में जहां डिस्क पर डेटा एक समर्पित क्षेत्र में है को दर्शाता है। रैम और फ़ाइल के बीच पेजिंग भी की जा सकती है, और इस मामले में इसे आमतौर पर स्वैपिंग के रूप में संदर्भित नहीं किया जाता है । उदाहरण के लिए, जब आप किसी प्रोग्राम को निष्पादित करते हैं, तो कोड को मेमोरी में लोड करना पड़ता है; अगर कोड पेज को किसी और चीज के लिए जगह बनाने के लिए RAM से बेदखल किया जाना है, तो स्वैप पेज पर इस पेज को लिखने की कोई आवश्यकता नहीं है, क्योंकि इसे प्रोग्राम फ़ाइल से वापस लोड किया जा सकता है। (यह केवल प्रोग्राम कोड नहीं, बल्कि सभी रीड-ओनली डेटा के लिए किया जा सकता है।)

यदि भौतिक मेमोरी (लगभग) पूर्ण है, तो कर्नेल RAM में एक पृष्ठ के लिए दिखता है (पूरी प्रक्रिया नहीं) जिसका उपयोग हाल ही में नहीं किया गया है। यदि वह पृष्ठ डिस्क फ़ाइल की सामग्री को पुन: पेश करता है (यह इंगित करने के लिए कर्नेल में टेबल हैं), तो पृष्ठ को पुनः प्राप्त किया जा सकता है। यदि नहीं, तो पृष्ठ को स्वैप करने के लिए लिखा गया है, फिर पुनः प्राप्त किया गया। किसी भी तरह से कर्नेल प्रक्रिया की वर्चुअल मेमोरी टेबल में प्रविष्टि को अद्यतन करता है (जो कि MMU तालिका बन जाती है जबकि प्रक्रिया निष्पादित होती है) इसे रैम में नहीं के रूप में चिह्नित करने के लिए और फिर किसी अन्य चीज़ के लिए भौतिक पृष्ठ का पुन: उपयोग कर सकते हैं (एक अलग प्रोग्राम, या किसी अन्य पृष्ठ पर) वही कार्यक्रम)।


आपके उत्तर का पहला पैराग्राफ उसे बताता है कि उसे विचार कहां मिला है: पुराने दस्तावेज़। (मुझे याद है कि जब स्वैपिंग और पेजिंग में अंतर था, तो भी।)
रॉनजॉन

9

वर्चुअल मैमोरी / पेजिंग सुविधा कर्नेल को यूजरस्पेस प्रोसेस में "वर्चुअलाइज" मेमोरी की सुविधा देती है। कर्नेल भौतिक मेमोरी से पृष्ठ ले सकता है, और पेजिंग के माध्यम से उन्हें व्यवस्थित कर सकता है, ताकि वे उपयोगकर्ता की प्रक्रिया के प्रति सन्निहित दिखें।

उपयोगकर्ता की प्रक्रिया की मेमोरी पर एक सीमा निर्धारित की जा सकती है और अगर यह प्रक्रिया "पृष्ठ दोष" से परे हो जाती है, जो सीपीयू अपवाद का कारण बनता है जो कर्नेल को वापस बाउंस करता है। यह कर्नेल की अनुमति के बिना, उपयोगकर्ता को कर्नेल या अन्य कार्यक्रमों को आवंटित मेमोरी के साथ खिलवाड़ करने से रोकता है।

आमतौर पर यूजरस्पेस प्रोग्राम कर्नेल को इस सीमा को अच्छी तरह से परिभाषित इंटरफेस ( उदाहरण के लिए सी फ़ंक्शन malloc()और free()उदाहरण के लिए) के माध्यम से विस्तारित करने के लिए कहते हैं । कर्नेल इस बात का ध्यान रखने के लिए ज़िम्मेदार है कि किसी प्रोग्राम को कितनी मेमोरी आवंटित की जाती है।

यह "पृष्ठ दोष" तंत्र कर्नेल को उस पृष्ठ को स्वैप करने की भी अनुमति दे सकता है जिस प्रक्रिया को डिस्क से एक के साथ एक्सेस करने का प्रयास किया जा रहा था, यदि कर्नेल मेमोरी को ओवरप्रूव करने में सक्षम है (और विंडोज और लिनक्स दोनों इसे सपोर्ट करते हैं) इसलिए इसे स्वैपिंग कहा जाता है। यदि मेमोरी एक्सेस वास्तव में अमान्य थी (यानी यह प्रक्रिया उस मेमोरी को एक्सेस करने की कोशिश कर रही है जिसे उसने पहले नहीं पूछा था) तो आमतौर पर इस प्रक्रिया को एक SIGSEGV के साथ मार दिया जाएगा।

तो "स्वैपिंग" एक अतिरिक्त विशेषता है (लिनक्स में आप वास्तव में इसे पूरी तरह से अक्षम कर सकते हैं यदि आप चाहते हैं) जो कि वर्चुअल मेमोरी / पेजिंग पर निर्भर करता है, लेकिन केवल इसलिए आवश्यक नहीं है क्योंकि सीपीयू में वर्चुअल मेमोरी / पेजिंग है। अवधारणाएं समान नहीं हैं, लेकिन स्वैपिंग मौजूद होने के लिए पेजिंग / वर्चुअल मेमोरी पर निर्भर करती है।


इसके अलावा, आपके प्रश्न को और अधिक बारीकी से पढ़ने के बाद, "पेजिंग" को कभी-कभी "स्वैपिंग" के लिए एक पर्याय के रूप में उपयोग किया जाता है - लेकिन मैंने "स्वैपिंग" के बारे में कभी नहीं सुना है जिसका अर्थ है कि पूरी प्रक्रिया की मेमोरी को बनाम "पेजिंग" के रूप में स्वैप किया गया है जिसका अर्थ है इसकी अदला-बदली की जाती है।

लेकिन फिर लिनक्स को एक स्वैप विभाजन की आवश्यकता क्यों है? यदि भौतिक मेमोरी भरी हुई है, तो कुछ प्रक्रियाओं को हार्ड ड्राइव में आउटसोर्स किया जाएगा और एक नई प्रक्रिया को वर्चुअल मेमोरी से भौतिक मेमोरी में मैप किया जाएगा।

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


2

सामान्य स्वैप में वर्चुअल मेमोरी के बराबर विभाजन नहीं होता है।

प्रक्रियाओं को वास्तविक भौतिक मेमोरी की तुलना में अधिक मेमोरी की आवश्यकता हो सकती है, इसलिए ओएस डेवलपर्स ने यह मानने का फैसला किया कि सिस्टम में अधिक मेमोरी है जिसे "वर्चुअल मेमोरी" कहा जाता है।

यह वर्चुअल मेमोरी मूल रूप से भौतिक मेमोरी और डिस्क का एक हिस्सा है। लिनक्स में डिस्क के इस हिस्से को "स्वैप" कहा जाता है।

साथ ही डेवलपर्स ने प्रस्तावित किया कि हार्ड डिस्क पर स्थित वर्चुअल मेमोरी के भाग का उपयोग यथासंभव कम होना चाहिए। इसके लिए, सभी आभासी मेमोरी को छोटे भागों में विभाजित किया गया था जिन्हें "पेज" कहा जाता है। बहुत सारे पृष्ठ कम दर में उपयोग किए जाते हैं, इन पृष्ठों को हार्ड डिस्क पर वर्चुअल मेमोरी के भाग के लिए लिखा जाना चाहिए। इस ऑपरेशन को "स्वैप आउट" कहा जाता है। ओएस को यह पता रखना होगा कि कौन से पेज जरूरत पड़ने पर उन्हें खोजने के लिए भौतिक मेमोरी में नहीं हैं। पृष्ठ दोष तब होता है जब कोई प्रोग्राम उस मेमोरी के एक भाग को लिखना / पढ़ना चाहता है जिसे स्वैप किया गया हो।

अपने प्रश्न का उत्तर देने के लिए: लिनक्स को स्मृति के कुछ पृष्ठों को स्वैप करने के लिए एक स्वैप विभाजन की आवश्यकता होती है और आप इसके लिए वर्चुअल मेमोरी उपयोग का एक आँकड़ा देख सकते हैं vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache    si   so    bi    bo   in   cs us sy id wa
2  0  35424 524560 134164 1858728    0    0    13    11   55   42  5  1 94  0
0  0  35424 526720 134164 1857872    0    0     0     0 2774 5224  7  2 91  0
1  0  35424 516328 134172 1870116    0    0     0     6 3464 6561 13  3 84  0
0  0  35424 522992 134212 1862676    0    0     0   125 4135 7135 12  4 84  1

'स्वैप' कॉलम स्वैप और स्टेटिस्टिक में दिखाता है। इसके अलावा इस लिंक आभासी स्मृति और के उपयोग बताते हैं vmstatके रूप में अच्छी तरह से।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.