विखंडन (कंप्यूटिंग): Difference between revisions
No edit summary |
No edit summary |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Inefficient use of storage space}} | {{Short description|Inefficient use of storage space}} | ||
[[कंप्यूटर भंडारण|संगणक भंडारण]] में, '''विखंडन''' एक घटना है जिसमें भंडारण स्थान, मुख्य भंडारण या द्वितीयक भंडारण भंडारण, क्षमता या प्रदर्शन को कम करने और अधिकांश दोनों को अक्षम रूप से उपयोग किया जाता है। विखंडन के यथार्थ परिणाम उपयोग में भंडारण आवंटन की विशिष्ट प्रणाली और विखंडन के विशेष रूप पर निर्भर करते हैं। कई स्थितियों में, विखंडन से भंडारण स्थान बर्बाद हो जाता है, और उस स्थिति में यह शब्द व्यर्थ स्थान को भी संदर्भित करता है। | |||
[[कंप्यूटर भंडारण|संगणक भंडारण]] में, विखंडन एक घटना है जिसमें भंडारण स्थान, मुख्य भंडारण या द्वितीयक भंडारण भंडारण, क्षमता या प्रदर्शन को कम करने और अधिकांश दोनों को अक्षम रूप से उपयोग किया जाता है। विखंडन के यथार्थ परिणाम उपयोग में भंडारण आवंटन की विशिष्ट प्रणाली और विखंडन के विशेष रूप पर निर्भर करते हैं। कई स्थितियों में, विखंडन से भंडारण स्थान बर्बाद हो जाता है, और उस स्थिति में यह शब्द व्यर्थ स्थान को भी संदर्भित करता है। | |||
== मूल सिद्धांत == | == मूल सिद्धांत == | ||
जब कोई संगणक प्रोग्राम संगणक प्रणाली से मेमोरी के ब्लॉक का अनुरोध करता है, तो ब्लॉक को चंक्स में आवंटित किया जाता है। जब संगणक प्रोग्राम एक चंक के साथ समाप्त हो जाता है, तो यह इसे प्रणाली में वापस मुक्त कर सकता है, इसे बाद में फिर से दूसरे या उसी प्रोग्राम को आवंटित करने के लिए उपलब्ध करा सकता है। | जब कोई संगणक प्रोग्राम संगणक प्रणाली से मेमोरी के ब्लॉक का अनुरोध करता है, तो ब्लॉक को चंक्स में आवंटित किया जाता है। जब संगणक प्रोग्राम एक चंक के साथ समाप्त हो जाता है, तो यह इसे प्रणाली में वापस मुक्त कर सकता है, इसे बाद में फिर से दूसरे या उसी प्रोग्राम को आवंटित करने के लिए उपलब्ध करा सकता है। कोई प्रोग्राम द्वारा आयोजित एक हिस्सा का आकार और समय अलग-अलग होता है। अपने जीवनकाल के दौरान, एक संगणक प्रोग्राम मेमोरी के कई हिस्सों का अनुरोध कर सकता है और मुक्त कर सकता है। | ||
जब कोई प्रोग्राम शुरू किया जाता है, मुक्त मेमोरी क्षेत्र लंबे और निकटवर्ती होते हैं। समय के साथ और उपयोग के साथ, लंबे निकटवर्ती क्षेत्र छोटे और छोटे निकटवर्ती क्षेत्रों में खंडित हो जाते हैं। आखिरकार, प्रोग्राम के लिए मेमोरी के बड़े निकटवर्ती भाग प्राप्त करना असंभव हो सकता है। | जब कोई प्रोग्राम शुरू किया जाता है, मुक्त मेमोरी क्षेत्र लंबे और निकटवर्ती होते हैं। समय के साथ और उपयोग के साथ, लंबे निकटवर्ती क्षेत्र छोटे और छोटे निकटवर्ती क्षेत्रों में खंडित हो जाते हैं। आखिरकार, प्रोग्राम के लिए मेमोरी के बड़े निकटवर्ती भाग प्राप्त करना असंभव हो सकता है। | ||
Line 79: | Line 74: | ||
</ref> | </ref> | ||
जिस तरह संघनन बाहरी विखंडन को समाप्त कर सकता है, उसी तरह डेटा भंडारण को पुनर्व्यवस्थित करके डेटा विखंडन को समाप्त किया जा सकता है ताकि संबंधित टुकड़े एक साथ पास हों। उदाहरण के लिए, एक [[defragmentation| | जिस तरह संघनन बाहरी विखंडन को समाप्त कर सकता है, उसी तरह डेटा भंडारण को पुनर्व्यवस्थित करके डेटा विखंडन को समाप्त किया जा सकता है ताकि संबंधित टुकड़े एक साथ पास हों। उदाहरण के लिए, एक [[defragmentation|क्रमबद्ध]] टूल का प्राथमिक काम डिस्क पर ब्लॉक को पुनर्व्यवस्थित करना है ताकि प्रत्येक फ़ाइल के ब्लॉक निकटवर्ती हों। अधिकांश क्रमबद्ध उपयोगिताएँ मुक्त स्थान विखंडन को कम करने या समाप्त करने का भी प्रयास करती हैं। कुछ मूविंग गारबेज कलेक्शन (संगणक साइंस), उपयोगिताएँ जो स्वचालित मेमोरी प्रबंधन करती हैं, कैश प्रदर्शन को बेहतर बनाने के लिए संबंधित वस्तुओं को एक साथ पास ले जाएँगी (इसे कॉम्पैक्टिंग कहा जाता है)। | ||
चार प्रकार की प्रणालियाँ हैं जो कभी भी डेटा विखंडन का अनुभव नहीं करती हैं - वे हमेशा प्रत्येक फ़ाइल को निकटवर्ती रूप से संग्रहीत करती हैं। कम से कम कुछ अस्थायी डेटा विखंडन की अनुमति देने वाले प्रणाली की तुलना में सभी चार प्रकारों में महत्वपूर्ण नुकसान हैं: | चार प्रकार की प्रणालियाँ हैं जो कभी भी डेटा विखंडन का अनुभव नहीं करती हैं - वे हमेशा प्रत्येक फ़ाइल को निकटवर्ती रूप से संग्रहीत करती हैं। कम से कम कुछ अस्थायी डेटा विखंडन की अनुमति देने वाले प्रणाली की तुलना में सभी चार प्रकारों में महत्वपूर्ण नुकसान हैं: | ||
Line 90: | Line 85: | ||
बाहरी विखंडन की तुलना में, ओवरहेड और आंतरिक विखंडन व्यर्थ मेमोरी और कम प्रदर्शन के स्थितियों में बहुत कम नुकसान के लिए खाते हैं। इसे इस प्रकार परिभाषित किया गया है: | बाहरी विखंडन की तुलना में, ओवरहेड और आंतरिक विखंडन व्यर्थ मेमोरी और कम प्रदर्शन के स्थितियों में बहुत कम नुकसान के लिए खाते हैं। इसे इस प्रकार परिभाषित किया गया है: | ||
: | : <math> {\text{External Memory Fragmentation} = 1 - } \frac{\text{Largest Block Of Free Memory}}{\text{Total Free Memory}} </math> | ||
0% के विखंडन का अर्थ है कि सभी मुक्त मेमोरी एक बड़े ब्लॉक में है; विखंडन 90% है (उदाहरण के लिए) जब 100 एमबी फ्री मेमोरी उपस्थित है लेकिन स्टोरेज के लिए मेमोरी का सबसे बड़ा फ्री ब्लॉक सिर्फ 10 एमबी है। | 0% के विखंडन का अर्थ है कि सभी मुक्त मेमोरी एक बड़े ब्लॉक में है; विखंडन 90% है (उदाहरण के लिए) जब 100 एमबी फ्री मेमोरी उपस्थित है लेकिन स्टोरेज के लिए मेमोरी का सबसे बड़ा फ्री ब्लॉक सिर्फ 10 एमबी है। | ||
Line 99: | Line 94: | ||
=== भंडारण विफलता === | === भंडारण विफलता === | ||
इससे बचने के लिए, आवंटक, विफल होने के | |||
विखंडन के कारण होने वाली सबसे गंभीर समस्या एक प्रक्रिया या प्रणाली के विफल होने का कारण है, समय से पहले संसाधन समाप्त होने के कारण: यदि एक निकटवर्ती ब्लॉक को संग्रहीत किया जाना चाहिए और संग्रहीत नहीं किया जा सकता है, तो विफलता होती है। विखंडन के कारण ऐसा होता है, भले ही संसाधन पर्याप्त हो लेकिन सन्निहित राशि नहीं होना चाहिए। उदाहरण के लिए, यदि किसी संगणक में 4 GiB मेमोरी है और 2 GiB फ्री हैं, लेकिन मेमोरी 1 MiB के वैकल्पिक अनुक्रम में खंडित है, 1 MiB फ्री है, तो मेमोरी के 1 निकटवर्ती GiB के अनुरोध को संतुष्ट नहीं किया जा सकता है, भले ही 2 GiB कुल निःशुल्क हैं। | |||
इससे बचने के लिए, आवंटक, विफल होने के अतिरिक्त, एक डीफ़्रैग्मेन्टेशन (या मेमोरी संघनन चक्र) या अन्य संसाधन सुधार, जैसे कि एक प्रमुख कचरा संग्रह चक्र, को इस उम्मीद में ट्रिगर कर सकता है कि यह तब अनुरोध को पूरा करने में सक्षम होगा। यह प्रक्रिया को आगे बढ़ने देता है, लेकिन प्रदर्शन को गंभीर रूप से प्रभावित कर सकता है। | |||
=== प्रदर्शन में गिरावट === | === प्रदर्शन में गिरावट === | ||
विखंडन कई कारणों से प्रदर्शन में गिरावट का कारण बनता है। सबसे मूल रूप से, विखंडन संसाधन आवंटित करने और उस तक पहुंचने के लिए आवश्यक कार्य को बढ़ाता है। उदाहरण के लिए, एक हार्ड ड्राइव या टेप ड्राइव पर, अनुक्रमिक डेटा पढ़ना बहुत तेज़ होता है, लेकिन एक अलग पते की | विखंडन कई कारणों से प्रदर्शन में गिरावट का कारण बनता है। सबसे मूल रूप से, विखंडन संसाधन आवंटित करने और उस तक पहुंचने के लिए आवश्यक कार्य को बढ़ाता है। उदाहरण के लिए, एक हार्ड ड्राइव या टेप ड्राइव पर, अनुक्रमिक डेटा पढ़ना बहुत तेज़ होता है, लेकिन एक अलग पते की खोज धीमी होती है, इसलिए खंडित फ़ाइल को पढ़ने या लिखने के लिए कई खोज की आवश्यकता होती है और डिवाइस पर अधिक पहनने के अतिरिक्त यह बहुत धीमी होती है। इसके अतिरिक्त, यदि कोई संसाधन विखंडित नहीं है, तो मुक्त क्षेत्र की प्रारंभ से केवल एक ब्लॉक लौटाकर आवंटन अनुरोध को संतुष्ट किया जा सकता है। चूँकि यह खंडित है, अनुरोध के लिए या तो एक बड़े पर्याप्त मुक्त ब्लॉक की खोज की आवश्यकता होती है, जिसमें लंबा समय लग सकता है, या कई छोटे ब्लॉकों द्वारा अनुरोध को पूरा करना (यदि यह संभव है), जिसके परिणामस्वरूप यह आवंटन खंडित हो जाता है, और कई टुकड़ों को प्रबंधित करने के लिए अतिरिक्त ओवरहेड की आवश्यकता होती है। | ||
एक सूक्ष्म समस्या यह है कि विखंडन समय से पहले एक कैश को समाप्त कर सकता है, जिससे थ्रैशिंग (संगणक विज्ञान) हो सकता है, कैश होल्डिंग ब्लॉक के कारण, व्यक्तिगत डेटा | एक सूक्ष्म समस्या यह है कि विखंडन समय से पहले एक कैश को समाप्त कर सकता है, जिससे थ्रैशिंग (संगणक विज्ञान) हो सकता है, कैश होल्डिंग ब्लॉक के कारण, यह व्यक्तिगत डेटा नहीं है। उदाहरण के लिए, मान लें कि किसी प्रोग्राम में 256 KiB का [[कार्य का संग्रह]] है, और 256 KiB कैश (L2 इंस्ट्रक्शन + डेटा कैश) के साथ एक संगणक पर चल रहा है, इसलिए पूरा वर्किंग सेट कैश में फिट हो जाता है और कम से कम कैश हिट के मामले में जल्दी से निष्पादित होता है। आगे मान लीजिए कि इसमें 64 [[अनुवाद लुकसाइड बफर]] (टीएलबी) प्रविष्टियां हैं, प्रत्येक 4 कीबी पेज (संगणक मेमोरी) के लिए: प्रत्येक मेमोरी एक्सेस के लिए वर्चुअल-टू-फिजिकल ट्रांसलेशन की आवश्यकता होती है, जो तेज है यदि पेज कैश में है (यहां टीएलबी) . यदि वर्किंग सेट अखंडित है, तो यह बिल्कुल 64 पेजों पर फिट होगा (पेज वर्किंग सेट 64 पेज का होगा), और सभी मेमोरी लुकअप को कैश से सर्व किया जा सकता है। चूँकि, यदि कार्य सेट खंडित है, तो यह 64 पृष्ठों में फिट नहीं होगा, और थ्रैशिंग के कारण निष्पादन धीमा हो जाएगा: पृष्ठों को बार-बार जोड़ा जाएगा और ऑपरेशन के दौरान TLB से हटा दिया जाएगा। इस प्रकार [[व्यवस्था]] डिज़ाइन में कैश आकार में विखंडन के लिए खाते में मार्जिन सम्मिलित होना चाहिए। | ||
मेमोरी विखंडन प्रणाली प्रबंधकों द्वारा सामना की जाने वाली सबसे गंभीर समस्याओं में से एक है।{{citation needed|date=February 2013}} समय के साथ, यह प्रणाली के प्रदर्शन में गिरावट की ओर जाता है। आखिरकार, मेमोरी विखंडन से (एप्लिकेशन-प्रयोग करने योग्य) मुक्त मेमोरी का पूर्ण नुकसान हो सकता है। | मेमोरी विखंडन प्रणाली प्रबंधकों द्वारा सामना की जाने वाली सबसे गंभीर समस्याओं में से एक है।{{citation needed|date=February 2013}} समय के साथ, यह प्रणाली के प्रदर्शन में गिरावट की ओर जाता है। आखिरकार, मेमोरी विखंडन से (एप्लिकेशन-प्रयोग करने योग्य) मुक्त मेमोरी का पूर्ण नुकसान हो सकता है। | ||
Line 113: | Line 111: | ||
== अनुरूप घटनाएं == | == अनुरूप घटनाएं == | ||
जबकि विखंडन को मेमोरी आवंटन में एक समस्या के रूप में जाना जाता है, अन्य प्रणाली [[सिस्टम संसाधन| | जबकि विखंडन को मेमोरी आवंटन में एक समस्या के रूप में जाना जाता है, अन्य प्रणाली [[सिस्टम संसाधन|संसाधनों]], विशेष रूप से प्रोसेसर के लिए समान घटनाएँ होती हैं।<ref name="ousterhout">{{cite news | ||
|author-link=John Ousterhout | |author-link=John Ousterhout | ||
|first=J. K. | |first=J. K. | ||
Line 121: | Line 119: | ||
|year=1982 | |year=1982 | ||
|pages=22–30 | |pages=22–30 | ||
}}</ref> उदाहरण के लिए, एक प्रणाली में जो [[प्रीमेप्टिव मल्टीटास्किंग]] के लिए [[समय बताना]] का उपयोग करता है, लेकिन यह जांच नहीं करता है कि कोई प्रक्रिया अवरुद्ध है या नहीं, एक प्रक्रिया जो अपने [[समय का टुकड़ा]] के हिस्से के लिए निष्पादित होती है लेकिन फिर ब्लॉक हो जाती है और शेष समय के लिए आगे नहीं बढ़ सकती है। टाइम स्लाइस के परिणामी आंतरिक विखंडन के कारण। अधिक मौलिक रूप से, समय-साझाकरण स्वयं प्रक्रियाओं के बाहरी विखंडन का कारण बनता है, क्योंकि उन्हें खंडित समय स्लाइस में चलाने के बजाय एक ही अखंड रन में चलाने के कारण होता है। [[प्रक्रिया स्विच]] | }}</ref> उदाहरण के लिए, एक प्रणाली में जो [[प्रीमेप्टिव मल्टीटास्किंग]] के लिए [[समय बताना]] का उपयोग करता है, लेकिन यह जांच नहीं करता है कि कोई प्रक्रिया अवरुद्ध है या नहीं, एक प्रक्रिया जो अपने [[समय का टुकड़ा]] के हिस्से के लिए निष्पादित होती है लेकिन फिर ब्लॉक हो जाती है और शेष समय के लिए आगे नहीं बढ़ सकती है। टाइम स्लाइस के परिणामी आंतरिक विखंडन के कारण। अधिक मौलिक रूप से, समय-साझाकरण स्वयं प्रक्रियाओं के बाहरी विखंडन का कारण बनता है, क्योंकि उन्हें खंडित समय स्लाइस में चलाने के बजाय एक ही अखंड रन में चलाने के कारण होता है। [[प्रक्रिया स्विच|प्रक्रिया स्विचिंग]] की परिणामी लागत और एक ही कैश का उपयोग करने वाली कई प्रक्रियाओं से [[कैश दबाव]] में वृद्धि के परिणामस्वरूप खराब प्रदर्शन हो सकता है। | ||
समवर्ती प्रणालियों में, विशेष रूप से वितरित प्रणालियों में, जब प्रक्रियाओं के एक समूह को प्रगति के लिए बातचीत करनी चाहिए, यदि प्रक्रियाएँ अलग-अलग समय पर या अलग-अलग मशीनों (समय या मशीनों में खंडित) पर निर्धारित होती हैं, तो एक-दूसरे की प्रतीक्षा में या संचार करने में लगने वाला समय एक दूसरे के साथ प्रदर्शन को गंभीर रूप से नीचा दिखा सकते हैं। इसके बजाय, प्रदर्शनकारी प्रणालियों को समूह के सहनिर्धारण की आवश्यकता होती है।<ref name="ousterhout"/> | समवर्ती प्रणालियों में, विशेष रूप से वितरित प्रणालियों में, जब प्रक्रियाओं के एक समूह को प्रगति के लिए बातचीत करनी चाहिए, यदि प्रक्रियाएँ अलग-अलग समय पर या अलग-अलग मशीनों (समय या मशीनों में खंडित) पर निर्धारित होती हैं, तो एक-दूसरे की प्रतीक्षा में या संचार करने में लगने वाला समय एक दूसरे के साथ प्रदर्शन को गंभीर रूप से नीचा दिखा सकते हैं। इसके बजाय, प्रदर्शनकारी प्रणालियों को समूह के सहनिर्धारण की आवश्यकता होती है।<ref name="ousterhout"/> | ||
Line 150: | Line 148: | ||
*C++ पदचिह्न और प्रदर्शन अनुकूलन, आर. अलेक्जेंडर; जी. बेन्सले, सैम्स प्रकाशक, प्रथम संस्करण, पृष्ठ संख्या: 128, आईएसबीएन संख्या: 9780672319044 | *C++ पदचिह्न और प्रदर्शन अनुकूलन, आर. अलेक्जेंडर; जी. बेन्सले, सैम्स प्रकाशक, प्रथम संस्करण, पृष्ठ संख्या: 128, आईएसबीएन संख्या: 9780672319044 | ||
*वही, पृष्ठ संख्या:129 | *वही, पृष्ठ संख्या:129 | ||
{{Authority control}} | {{Authority control}} | ||
[[Category: | [[Category:All articles with unsourced statements]] | ||
[[Category:Articles with short description]] | |||
[[Category:Articles with unsourced statements from February 2013]] | |||
[[Category:CS1 français-language sources (fr)]] | |||
[[Category:CS1 maint]] | |||
[[Category:CS1 Ελληνικά-language sources (el)]] | |||
[[Category:Citation Style 1 templates|W]] | |||
[[Category:Collapse templates]] | |||
[[Category:Created On 14/12/2022]] | [[Category:Created On 14/12/2022]] | ||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates based on the Citation/CS1 Lua module]] | |||
[[Category:Templates generating COinS|Cite web]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates used by AutoWikiBrowser|Cite web]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Wikipedia fully protected templates|Cite web]] | |||
[[Category:Wikipedia metatemplates]] |
Latest revision as of 14:12, 16 January 2023
संगणक भंडारण में, विखंडन एक घटना है जिसमें भंडारण स्थान, मुख्य भंडारण या द्वितीयक भंडारण भंडारण, क्षमता या प्रदर्शन को कम करने और अधिकांश दोनों को अक्षम रूप से उपयोग किया जाता है। विखंडन के यथार्थ परिणाम उपयोग में भंडारण आवंटन की विशिष्ट प्रणाली और विखंडन के विशेष रूप पर निर्भर करते हैं। कई स्थितियों में, विखंडन से भंडारण स्थान बर्बाद हो जाता है, और उस स्थिति में यह शब्द व्यर्थ स्थान को भी संदर्भित करता है।
मूल सिद्धांत
जब कोई संगणक प्रोग्राम संगणक प्रणाली से मेमोरी के ब्लॉक का अनुरोध करता है, तो ब्लॉक को चंक्स में आवंटित किया जाता है। जब संगणक प्रोग्राम एक चंक के साथ समाप्त हो जाता है, तो यह इसे प्रणाली में वापस मुक्त कर सकता है, इसे बाद में फिर से दूसरे या उसी प्रोग्राम को आवंटित करने के लिए उपलब्ध करा सकता है। कोई प्रोग्राम द्वारा आयोजित एक हिस्सा का आकार और समय अलग-अलग होता है। अपने जीवनकाल के दौरान, एक संगणक प्रोग्राम मेमोरी के कई हिस्सों का अनुरोध कर सकता है और मुक्त कर सकता है।
जब कोई प्रोग्राम शुरू किया जाता है, मुक्त मेमोरी क्षेत्र लंबे और निकटवर्ती होते हैं। समय के साथ और उपयोग के साथ, लंबे निकटवर्ती क्षेत्र छोटे और छोटे निकटवर्ती क्षेत्रों में खंडित हो जाते हैं। आखिरकार, प्रोग्राम के लिए मेमोरी के बड़े निकटवर्ती भाग प्राप्त करना असंभव हो सकता है।
प्रकार
विखंडन के तीन अलग-अलग भाग होते है, लेकिन ये तीनों भाग आपस में संबंधित रूप हैं: बाहरी विखंडन, आंतरिक विखंडन, और डेटा विखंडन, विखंडन के तीनों भाग जो अलगाव या संयोजन में उपस्थित हो सकते हैं। गति या सरलता में सुधार के बदले में विखंडन को अधिकांश स्वीकार किया जाता है। प्रोसेसर जैसे अन्य संसाधनों के लिए अनुरूप घटनाएं होती हैं; नीचे देखें।
आंतरिक विखंडन
मेमोरी पेजिंग आंतरिक विखंडन पैदा करती है क्योंकि एक संपूर्ण पृष्ठ (संगणक मेमोरी) को आवंटित किया जाएगा चाहे उतनी स्टोरेज की आवश्यकता हो या नहीं।[1]
मेमोरी आवंटन को नियंत्रित करने वाले नियमों के कारण, कभी-कभी आवश्यकता से अधिक कंप्यूटर मेमोरी आवंटित की जाती है। उदाहरण के लिए, मेमोरी केवल प्रोग्रामों को चंक्स (सामान्यतः 4 बाइट्स के गुणक) में प्रदान की जा सकती है, और इसके परिणामस्वरूप यदि कोई प्रोग्राम संभवतः 29 का अनुरोध करता है
तो उसे वास्तविक में 32 बाइट्स का एक हिस्सा मिलेगा। जब ऐसा होता है, तो अतिरिक्त मेमोरी बेकार हो जाती है। इस परिदृश्य में, अनुपयोगी मेमोरी आवंटित क्षेत्र में समाहित है। यह व्यवस्था को, जिसे निश्चित विभाजन कहा जाता है, अकुशल मेमोरी उपयोग से ग्रस्त है - कोई भी प्रक्रिया, चाहे कितनी भी छोटी क्यों न हो, पूरे विभाजन पर कब्जा कर लेती है। इस कचरे को आंतरिक विखंडन कहा जाता है।[2][3]
अन्य प्रकार के विखंडन के विपरीत, आंतरिक विखंडन को पुनः प्राप्त करना कठिन है; सामान्यतः इसे हटाने का सबसे अच्छी विधि डिजाइन में बदलाव करना है। उदाहरण के लिए, गतिशील मेमोरी आवंटन में, मेमोरी पूल बड़ी संख्या में ऑब्जेक्ट्स पर स्पेस ओवरहेड फैलाकर आंतरिक विखंडन को काफी हद तक कम कर देता है।
बाहरी विखंडन
बाहरी विखंडन तब उत्पन्न होता है जब मुक्त मेमोरी को छोटे ब्लॉकों में अलग किया जाता है और आवंटित मेमोरी द्वारा अंतःप्रकीर्ण किया जाता है। यह कुछ स्टोरेज एलोकेशन एल्गोरिदम की कमजोरी है, जब वे प्रोग्राम द्वारा उपयोग की जाने वाली मेमोरी को कुशलता से ऑर्डर करने में विफल होते हैं। परिणाम यह है कि, चूँकि नि: शुल्क भंडारण उपलब्ध है, यह प्रभावी रूप से अनुपयोगी है क्योंकि यह उन टुकड़ों में विभाजित है जो आवेदन की मांगों को पूरा करने के लिए व्यक्तिगत रूप से बहुत छोटे हैं। बाहरी शब्द इस तथ्य को संदर्भित करता है कि अनुपयोगी भंडारण आवंटित क्षेत्रों के बाहर है।
उदाहरण के लिए, एक ऐसी स्थिति पर विचार करें जिसमें एक प्रोग्राम मेमोरी के तीन निरंतर ब्लॉक आवंटित करता है और फिर मध्य ब्लॉक को मुक्त करता है। मेमोरी एलोकेटर भविष्य के आवंटन के लिए मेमोरी के इस फ्री ब्लॉक का उपयोग कर सकता है। चूँकि, यह इस ब्लॉक का उपयोग नहीं कर सकता है यदि आवंटित की जाने वाली मेमोरी इस मुक्त ब्लॉक से आकार में बड़ी है।
फाइल प्रणाली में बाहरी विखंडन भी होता है क्योंकि विभिन्न आकारों की कई फाइलें बनाई जाती हैं, आकार बदलती हैं और हटा दी जाती हैं। प्रभाव और भी बुरा होता है यदि एक फ़ाइल जो कई छोटे टुकड़ों में विभाजित है, तो उन्हें हटा दिया जाता है, क्योंकि यह समान रूप से मुक्त स्थानों के छोटे क्षेत्रों को छोड़ देती है।
0x0000 | 0x1000 | 0x2000 | 0x3000 | 0x4000 | 0x5000 | टिप्पणियाँ |
---|---|---|---|---|---|---|
भंडारण के लिए उपलब्ध सभी मेमोरी से प्रारंभ करें। | ||||||
A | B | C | 0x1000 आकार के तीन ब्लॉक ए, बी और सी आवंटित किए गए। | |||
A | C | मुक्त ब्लॉक बी। ध्यान दें कि बी द्वारा उपयोग की जाने वाली मेमोरी को बी के आकार से बड़े ब्लॉक के लिए शामिल नहीं किया जा सकता है। | ||||
A | C | ब्लॉक सी को ब्लॉक बी के खाली स्लॉट में ले जाया गया, जिससे शेष स्थान को 0x4000 आकार के बड़े ब्लॉक के लिए इस्तेमाल किया जा सके। |
डेटा विखंडन
डेटा विखंडन तब होता है जब मेमोरी में डेटा का एक संग्रह कई टुकड़ों में टूट जाता है जो एक साथ बंद नहीं होते हैं। यह सामान्यतः एक बड़ी वस्तु को भंडारण में डालने का प्रयास करने का परिणाम है जो पहले से ही बाहरी विखंडन का सामना कर चुका है।
उदाहरण के लिए, फ़ाइल प्रणाली विखंडन फाइलों को सामान्यतः ब्लॉक (डेटा स्टोरेज) या डेटा क्लस्टर नामक इकाइयों में प्रबंधित किया जाता है। जब एक फ़ाइल प्रणाली बनाया जाता है, तो फ़ाइल ब्लॉक को एक साथ स्टोर करने के लिए रिक्त स्थान होता है, जो संग्रहणीय डेटा होता है। यह तेजी से अनुक्रमिक फ़ाइल पढ़ने और लिखने की अनुमति देता है। चूँकि, जैसे-जैसे फाइलें जोड़ी जाती हैं, या हटाई जाती हैं और आकार में बदलाव किया जाता है, जिससे मुक्त स्थान बाहरी रूप से खंडित हो जाता है, जिसमें केवल छोटे छेद रह जाते हैं जिनमें नया डेटा रखा जाता है। जब एक नई फ़ाइल लिखी जाती है, या जब एक उपस्थित फ़ाइल को विस्तारित किया जाता है, तो ऑपरेटिंग प्रणाली नए डेटा को नए गैर-निकटवर्ती डेटा ब्लॉकों में उपलब्ध छेदों में फ़िट करने के लिए रखता है। नए डेटा ब्लॉक अनिवार्य रूप से बिखरे हुए हैं, पढ़ने/लिखने के समय की तलाश और घूर्णी विलंबता के कारण धीमी पहुंच, और अतिरिक्त स्थानों को प्रबंधित करने के लिए अतिरिक्त ओवरहेड लगाना। इसे फाइल प्रणाली विखंडन कहा जाता है।
ज्ञात आकार की एक नई फ़ाइल लिखते समय, यदि कोई खाली छेद है जो उस फ़ाइल से बड़ा है, तो ऑपरेटिंग प्रणाली फ़ाइल को उन छेदों में से किसी एक में डालकर डेटा विखंडन से बच सकता है। फ़ाइल डालने के लिए उन संभावित छेदों में से किसका चयन करने के लिए कई प्रकार के एल्गोरिदम हैं; उनमें से प्रत्येक बिन पैकिंग समस्या का एक अनुमानी अनुमानित समाधान है। सबसे अच्छा फिट एल्गोरिदम सबसे छोटा छेद चुनता है जो काफी बड़ा है। सबसे खराब फिट एल्गोरिदम सबसे बड़ा छेद चुनता है।"फर्स्ट-फिट एल्गोरिथम" पहले छेद को चुनता है जो काफी बड़ा है। "अगली फ़िट" एल्गोरिद्म इस बात का ट्रैक रखता है कि प्रत्येक फ़ाइल कहाँ लिखी गई थी।
अगला फ़िट एल्गोरिथम पहले फ़िट की तुलना में तेज़ है, जो बदले में सर्वश्रेष्ठ फ़िट की तुलना में तेज़ है, जो कि सबसे खराब फ़िट के समान गति है।[4]
जिस तरह संघनन बाहरी विखंडन को समाप्त कर सकता है, उसी तरह डेटा भंडारण को पुनर्व्यवस्थित करके डेटा विखंडन को समाप्त किया जा सकता है ताकि संबंधित टुकड़े एक साथ पास हों। उदाहरण के लिए, एक क्रमबद्ध टूल का प्राथमिक काम डिस्क पर ब्लॉक को पुनर्व्यवस्थित करना है ताकि प्रत्येक फ़ाइल के ब्लॉक निकटवर्ती हों। अधिकांश क्रमबद्ध उपयोगिताएँ मुक्त स्थान विखंडन को कम करने या समाप्त करने का भी प्रयास करती हैं। कुछ मूविंग गारबेज कलेक्शन (संगणक साइंस), उपयोगिताएँ जो स्वचालित मेमोरी प्रबंधन करती हैं, कैश प्रदर्शन को बेहतर बनाने के लिए संबंधित वस्तुओं को एक साथ पास ले जाएँगी (इसे कॉम्पैक्टिंग कहा जाता है)।
चार प्रकार की प्रणालियाँ हैं जो कभी भी डेटा विखंडन का अनुभव नहीं करती हैं - वे हमेशा प्रत्येक फ़ाइल को निकटवर्ती रूप से संग्रहीत करती हैं। कम से कम कुछ अस्थायी डेटा विखंडन की अनुमति देने वाले प्रणाली की तुलना में सभी चार प्रकारों में महत्वपूर्ण नुकसान हैं:
- बस प्रत्येक फ़ाइल को निकटवर्ती रूप से लिखें। यदि फ़ाइल को रखने के लिए पहले से ही पर्याप्त सन्निहित खाली स्थान नहीं है, तो सिस्टम तुरंत फ़ाइल को संग्रहीत करने में विफल रहता है - तब भी जब हटाए गए फ़ाइलों से बहुत कम खाली स्थान होता है जो फ़ाइल को संग्रहीत करने के लिए पर्याप्त से अधिक जोड़ता है।
- यदि फ़ाइल को रखने के लिए पहले से ही पर्याप्त निकटवर्ती खाली स्थान नहीं है, तो कचरा संग्रह (संगणक विज्ञान) का उपयोग करें फ़ाइल को होल्ड करने के लिए काफी बड़े मुक्त स्थान के कई छोटे-छोटे टुकड़ों को एक निकटवर्ती मुक्त क्षेत्र में बदलने के लिए कॉपी करने वाले संग्राहक का उपयोग करें।।
- निश्चित आकार ब्लॉक आवंटन के माध्यम से फ़ाइल को किसी भी फ्री ब्लॉक में लिखें। यदि कोई प्रोग्रामर एक निश्चित ब्लॉक आकार को बहुत छोटा चुनता है, तो सिस्टम तुरंत कुछ फाइलों को स्टोर करने में विफल रहता है - ब्लॉक आकार से बड़ी फाइलें - तब भी जब कई फ्री ब्लॉक होते हैं जो फ़ाइल को स्टोर करने के लिए पर्याप्त से अधिक जोड़ते हैं। यदि कोई प्रोग्रामर ब्लॉक आकार को बहुत बड़ा चुनता है, तो आंतरिक विखंडन पर बहुत सी जगह बर्बाद हो जाती है।
- कुछ प्रणालियाँ पूरी तरह से गतिशील आवंटन से बचती हैं, सभी संभावित फ़ाइलों के लिए प्री-स्टोरिंग (समीपस्थ) स्थान - उदाहरण के लिए, मल्टीफ़ाइंडर प्रत्येक एप्लिकेशन को RAM का एक हिस्सा पूर्व-आवंटित करता है क्योंकि यह उस एप्लिकेशन के प्रोग्रामर द्वारा दावा की गई RAM के अनुसार शुरू किया गया था इसकी आवश्यकता होगी।
तुलना
बाहरी विखंडन की तुलना में, ओवरहेड और आंतरिक विखंडन व्यर्थ मेमोरी और कम प्रदर्शन के स्थितियों में बहुत कम नुकसान के लिए खाते हैं। इसे इस प्रकार परिभाषित किया गया है:
0% के विखंडन का अर्थ है कि सभी मुक्त मेमोरी एक बड़े ब्लॉक में है; विखंडन 90% है (उदाहरण के लिए) जब 100 एमबी फ्री मेमोरी उपस्थित है लेकिन स्टोरेज के लिए मेमोरी का सबसे बड़ा फ्री ब्लॉक सिर्फ 10 एमबी है।
बाहरी विखंडन प्राथमिक मेमोरी (रैम) स्टोरेज प्रणाली की तुलना में फाइल प्रणाली में एक समस्या से कम होता है, क्योंकि प्रोग्राम को सामान्यतः उनके रैम स्टोरेज अनुरोधों को निकटवर्ती ब्लॉकों के साथ पूरा करने की आवश्यकता होती है, लेकिन फाइल प्रणाली सामान्यतः किसी भी संग्रह का उपयोग करने में सक्षम होने के लिए डिज़ाइन किए जाते हैं। एक फ़ाइल को इकट्ठा करने के लिए उपलब्ध ब्लॉक (टुकड़े) जो तार्किक रूप से निकटवर्ती प्रतीत होता है। इसलिए, यदि एक अत्यधिक खंडित फ़ाइल या कई छोटी फ़ाइलों को एक पूर्ण वॉल्यूम से हटा दिया जाता है और फिर नई मुक्त स्थान के बराबर आकार वाली एक नई फ़ाइल बनाई जाती है, तो नई फ़ाइल केवल उन्हीं टुकड़ों का पुन: उपयोग करेगी जो विलोपन द्वारा मुक्त किए गए थे। यदि हटाई गई एक फ़ाइल थी, तो नई फ़ाइल उतनी ही खंडित होगी जितनी पुरानी फ़ाइल थी, लेकिन किसी भी स्थिति में नई फ़ाइल बनाने के लिए सभी (अत्यधिक खंडित) मुक्त स्थान का उपयोग करने में कोई बाधा नहीं होगी। रैम में, दूसरी ओर, अधिकांश उपयोग की जाने वाली स्टोरेज प्रणाली छोटे गैर-निकटवर्ती मुक्त ब्लॉकों से एक अनुरोध को पूरा करने के लिए एक बड़े ब्लॉक को इकट्ठा नहीं कर सकता है, और इसलिए अनुरोध को पूरा नहीं किया जा सकता है और प्रोग्राम को वह सब कुछ करने के लिए आगे नहीं बढ़ सकता है जिसके लिए उस मेमोरी की आवश्यकता होती है (जब तक कि यह कई छोटे अलग अनुरोधों के रूप में अनुरोध को फिर से जारी कर सकता है)।
समस्याएं
भंडारण विफलता
विखंडन के कारण होने वाली सबसे गंभीर समस्या एक प्रक्रिया या प्रणाली के विफल होने का कारण है, समय से पहले संसाधन समाप्त होने के कारण: यदि एक निकटवर्ती ब्लॉक को संग्रहीत किया जाना चाहिए और संग्रहीत नहीं किया जा सकता है, तो विफलता होती है। विखंडन के कारण ऐसा होता है, भले ही संसाधन पर्याप्त हो लेकिन सन्निहित राशि नहीं होना चाहिए। उदाहरण के लिए, यदि किसी संगणक में 4 GiB मेमोरी है और 2 GiB फ्री हैं, लेकिन मेमोरी 1 MiB के वैकल्पिक अनुक्रम में खंडित है, 1 MiB फ्री है, तो मेमोरी के 1 निकटवर्ती GiB के अनुरोध को संतुष्ट नहीं किया जा सकता है, भले ही 2 GiB कुल निःशुल्क हैं।
इससे बचने के लिए, आवंटक, विफल होने के अतिरिक्त, एक डीफ़्रैग्मेन्टेशन (या मेमोरी संघनन चक्र) या अन्य संसाधन सुधार, जैसे कि एक प्रमुख कचरा संग्रह चक्र, को इस उम्मीद में ट्रिगर कर सकता है कि यह तब अनुरोध को पूरा करने में सक्षम होगा। यह प्रक्रिया को आगे बढ़ने देता है, लेकिन प्रदर्शन को गंभीर रूप से प्रभावित कर सकता है।
प्रदर्शन में गिरावट
विखंडन कई कारणों से प्रदर्शन में गिरावट का कारण बनता है। सबसे मूल रूप से, विखंडन संसाधन आवंटित करने और उस तक पहुंचने के लिए आवश्यक कार्य को बढ़ाता है। उदाहरण के लिए, एक हार्ड ड्राइव या टेप ड्राइव पर, अनुक्रमिक डेटा पढ़ना बहुत तेज़ होता है, लेकिन एक अलग पते की खोज धीमी होती है, इसलिए खंडित फ़ाइल को पढ़ने या लिखने के लिए कई खोज की आवश्यकता होती है और डिवाइस पर अधिक पहनने के अतिरिक्त यह बहुत धीमी होती है। इसके अतिरिक्त, यदि कोई संसाधन विखंडित नहीं है, तो मुक्त क्षेत्र की प्रारंभ से केवल एक ब्लॉक लौटाकर आवंटन अनुरोध को संतुष्ट किया जा सकता है। चूँकि यह खंडित है, अनुरोध के लिए या तो एक बड़े पर्याप्त मुक्त ब्लॉक की खोज की आवश्यकता होती है, जिसमें लंबा समय लग सकता है, या कई छोटे ब्लॉकों द्वारा अनुरोध को पूरा करना (यदि यह संभव है), जिसके परिणामस्वरूप यह आवंटन खंडित हो जाता है, और कई टुकड़ों को प्रबंधित करने के लिए अतिरिक्त ओवरहेड की आवश्यकता होती है।
एक सूक्ष्म समस्या यह है कि विखंडन समय से पहले एक कैश को समाप्त कर सकता है, जिससे थ्रैशिंग (संगणक विज्ञान) हो सकता है, कैश होल्डिंग ब्लॉक के कारण, यह व्यक्तिगत डेटा नहीं है। उदाहरण के लिए, मान लें कि किसी प्रोग्राम में 256 KiB का कार्य का संग्रह है, और 256 KiB कैश (L2 इंस्ट्रक्शन + डेटा कैश) के साथ एक संगणक पर चल रहा है, इसलिए पूरा वर्किंग सेट कैश में फिट हो जाता है और कम से कम कैश हिट के मामले में जल्दी से निष्पादित होता है। आगे मान लीजिए कि इसमें 64 अनुवाद लुकसाइड बफर (टीएलबी) प्रविष्टियां हैं, प्रत्येक 4 कीबी पेज (संगणक मेमोरी) के लिए: प्रत्येक मेमोरी एक्सेस के लिए वर्चुअल-टू-फिजिकल ट्रांसलेशन की आवश्यकता होती है, जो तेज है यदि पेज कैश में है (यहां टीएलबी) . यदि वर्किंग सेट अखंडित है, तो यह बिल्कुल 64 पेजों पर फिट होगा (पेज वर्किंग सेट 64 पेज का होगा), और सभी मेमोरी लुकअप को कैश से सर्व किया जा सकता है। चूँकि, यदि कार्य सेट खंडित है, तो यह 64 पृष्ठों में फिट नहीं होगा, और थ्रैशिंग के कारण निष्पादन धीमा हो जाएगा: पृष्ठों को बार-बार जोड़ा जाएगा और ऑपरेशन के दौरान TLB से हटा दिया जाएगा। इस प्रकार व्यवस्था डिज़ाइन में कैश आकार में विखंडन के लिए खाते में मार्जिन सम्मिलित होना चाहिए।
मेमोरी विखंडन प्रणाली प्रबंधकों द्वारा सामना की जाने वाली सबसे गंभीर समस्याओं में से एक है।[citation needed] समय के साथ, यह प्रणाली के प्रदर्शन में गिरावट की ओर जाता है। आखिरकार, मेमोरी विखंडन से (एप्लिकेशन-प्रयोग करने योग्य) मुक्त मेमोरी का पूर्ण नुकसान हो सकता है।
मेमोरी विखंडन एक कर्नेल (ऑपरेटिंग प्रणाली) संगणक प्रोग्रामिंग स्तर की समस्या है। अनुप्रयोगों के रीयल-टाइम कंप्यूटिंग के दौरान, विखंडन का स्तर 99% तक पहुंच सकता है, और इससे प्रणाली क्रैश या अन्य अस्थिरता हो सकती है।[citation needed] इस प्रकार केप्रणाली क्रैश से बचना मुश्किल हो सकता है, क्योंकि मेमोरी विखंडन के स्तरों में महत्वपूर्ण वृद्धि का अनुमान लगाना असंभव है। चूँकि, अत्यधिक मेमोरी फ़्रेग्मेंटेशन के स्थितियों में प्रणाली के लिए सभी प्रोग्राम चलाना जारी रखना संभव नहीं हो सकता है, एक अच्छी तरह से डिज़ाइन किया गया प्रणाली प्रणाली द्वारा उपयोग किए जाने वाले कुछ मेमोरी ब्लॉक में जाकर महत्वपूर्ण विखंडन की स्थिति से उबरने में सक्षम होना चाहिए। मुक्त मेमोरी को कम, बड़े ब्लॉकों में समेकन करने के लिए, या, सबसे खराब स्थिति में, कुछ प्रोग्रामों को उनकी मेमोरी को मुक्त करने के लिए समाप्त करके और फिर मुक्त मेमोरी के परिणामी योग को डीफ़्रेग्मेंट करके समेकन करने के लिए। यह कम से कम प्रणाली की विफलता के अर्थ में एक वास्तविक दुर्घटना से बच जाएगा और प्रणाली को कुछ प्रोग्राम चलाना जारी रखने, प्रोग्राम डेटा को बचाने आदि की अनुमति देगा। यह भी ध्यान रखना महत्वपूर्ण है कि विखंडन प्रणाली सॉफ़्टवेयर डिज़ाइन की एक घटना है; अलग-अलग सॉफ्टवेयर अलग-अलग डिग्री के विखंडन के लिए अतिसंवेदनशील होंगे, और एक ऐसी प्रणाली को डिजाइन करना संभव है जो मेमोरी विखंडन के परिणामस्वरूप प्रक्रियाओं को बंद करने या समाप्त करने के लिए कभी मजबूर नहीं होगी।
अनुरूप घटनाएं
जबकि विखंडन को मेमोरी आवंटन में एक समस्या के रूप में जाना जाता है, अन्य प्रणाली संसाधनों, विशेष रूप से प्रोसेसर के लिए समान घटनाएँ होती हैं।[5] उदाहरण के लिए, एक प्रणाली में जो प्रीमेप्टिव मल्टीटास्किंग के लिए समय बताना का उपयोग करता है, लेकिन यह जांच नहीं करता है कि कोई प्रक्रिया अवरुद्ध है या नहीं, एक प्रक्रिया जो अपने समय का टुकड़ा के हिस्से के लिए निष्पादित होती है लेकिन फिर ब्लॉक हो जाती है और शेष समय के लिए आगे नहीं बढ़ सकती है। टाइम स्लाइस के परिणामी आंतरिक विखंडन के कारण। अधिक मौलिक रूप से, समय-साझाकरण स्वयं प्रक्रियाओं के बाहरी विखंडन का कारण बनता है, क्योंकि उन्हें खंडित समय स्लाइस में चलाने के बजाय एक ही अखंड रन में चलाने के कारण होता है। प्रक्रिया स्विचिंग की परिणामी लागत और एक ही कैश का उपयोग करने वाली कई प्रक्रियाओं से कैश दबाव में वृद्धि के परिणामस्वरूप खराब प्रदर्शन हो सकता है।
समवर्ती प्रणालियों में, विशेष रूप से वितरित प्रणालियों में, जब प्रक्रियाओं के एक समूह को प्रगति के लिए बातचीत करनी चाहिए, यदि प्रक्रियाएँ अलग-अलग समय पर या अलग-अलग मशीनों (समय या मशीनों में खंडित) पर निर्धारित होती हैं, तो एक-दूसरे की प्रतीक्षा में या संचार करने में लगने वाला समय एक दूसरे के साथ प्रदर्शन को गंभीर रूप से नीचा दिखा सकते हैं। इसके बजाय, प्रदर्शनकारी प्रणालियों को समूह के सहनिर्धारण की आवश्यकता होती है।[5]
कुछ फ्लैश फाइल प्रणाली में डेड स्पेस और डार्क स्पेस से जुड़े कई अलग-अलग प्रकार के आंतरिक विखंडन होते हैं। .[6]
यह भी देखें
- डीफ़्रेग्मेंटेशन
- फाइल प्रणाली विखंडन
- मेमोरी प्रबंधन
- मेमोरी प्रबंधन (ऑपरेटिंग प्रणाली)
- ब्लॉक (डेटा संग्रहण)
- डेटा क्लस्टर
संदर्भ
- ↑ Null, Linda; Lobur, Julia (2006). कंप्यूटर संगठन और वास्तुकला की अनिवार्यता. Jones and Bartlett Publishers. p. 315. ISBN 9780763737696. Retrieved Jul 15, 2021.
- ↑ "विभाजन, विभाजन आकार और ड्राइव लेटरिंग". The PC Guide. April 17, 2001. Retrieved 2012-01-20.
- ↑ "स्विच: सेक्टर कॉपी". Symantec. 2001-01-14. Retrieved 2012-01-20.
- ↑ D. Samanta. "Classic Data Structures" 2004. p. 76
- ↑ 5.0 5.1 Ousterhout, J. K. (1982). "समवर्ती प्रणालियों के लिए निर्धारण तकनीक" (PDF). Proceedings of Third International Conference on Distributed Computing Systems. pp. 22–30.
- ↑ . Adrian Hunter. "A Brief Introduction to the Design of UBIFS". 2008.etc p. 8.
स्रोत
- http://www.edn.com/design/systems-design/4333346/Handling-memory-fragmentation
- http://www.sqlservercentral.com/articles/performance+tuning/performancemonitoringbyinternalfragmentationmeasur/2014/
- C++ पदचिह्न और प्रदर्शन अनुकूलन, आर. अलेक्जेंडर; जी. बेन्सले, सैम्स प्रकाशक, प्रथम संस्करण, पृष्ठ संख्या: 128, आईएसबीएन संख्या: 9780672319044
- वही, पृष्ठ संख्या:129