पेज टेबल

From Vigyanwiki
Revision as of 15:05, 30 April 2023 by alpha>Saurabh
एक साधारण पता स्थान योजना के अंदर आभासी पतों और भौतिक स्मृति में पृष्ठों के बीच संबंध। भौतिक स्मृति में कई प्रक्रियाओं से संबंधित पृष्ठ हो सकते हैं। पृष्ठों को डिस्क पर रखा जा सकता है यदि संभवतः ही कभी उपयोग किया जाता है, या यदि भौतिक मेमोरी भरी हुई है। उपरोक्त आरेख में, कुछ पृष्ठ भौतिक स्मृति में नहीं हैं।

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

पृष्ठ तालिका की भूमिका

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

जब कोई प्रक्रिया अपनी मेमोरी में डेटा तक पहुंच का अनुरोध करती है, तो यह ऑपरेटिंग प्रणाली की उत्तरदाई होती है कि वह प्रक्रिया द्वारा प्रदान किए गए वास्तविक एड्रेस को वास्तविक मेमोरी के भौतिक पते पर मैप करे जहां वह डेटा संग्रहीत है। पेज टेबल वह स्थान है जहां ऑपरेटिंग प्रणाली वास्तविक एड्रेस के अपने मैपिंग को फिजिकल एड्रेस पर संग्रह करता है, प्रत्येक मैपिंग को पेज टेबल प्रवेश (पीटीई ) के रूप में भी जाना जाता है।[1][2]


अनुवाद प्रक्रिया

आभासी से भौतिक पता अनुवाद पर की गई कार्रवाइयाँ। यदि कोई टीएलबी मिस होती है तो प्रत्येक अनुवाद फिर से प्रारंभ हो जाता है, जिससे हार्डवेयर के माध्यम से लुकअप सही ढंग से हो सके।

सीपीयू के अंदर स्मृति प्रबंधन इकाई (एमएमयू) ऑपरेटिंग प्रणाली के पेज टेबल से वर्तमान में उपयोग किए गए मैपिंग का कैश संग्रह करता है। इसे अनुवाद लुकसाइड बफर (टीएलबी ) कहा जाता है, जो एक सहयोगी कैश है।

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

अनुवाद विफलता

पेज टेबल लुकअप विफल हो सकता है, पेज फॉल्ट को दो कारणों से ट्रिगर कर सकता है:

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

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

कुछ एमएमयू अन्य कारणों से पेज फॉल्ट को ट्रिगर करते हैं, चाहे पेज वर्तमान में भौतिक मेमोरी में स्थित हो या नहीं और किसी प्रक्रिया के वास्तविक एड्रेस स्पेस में मैप किया गया हो:

  • पृष्ठ तालिका में केवल-पढ़ने के लिए बिट स्थित होने पर लिखने का प्रयास पृष्ठ दोष का कारण बनता है। यह कई ऑपरेटिंग प्रणाली के लिखने पर नकल के कार्यान्वयन का एक सामान्य भाग है; यह तब भी हो सकता है जब एक ऐसे स्थान पर लिखा जाता है जहां से प्रक्रिया को पढ़ने की अनुमति दी जाती है किन्तु जिस पर लिखने की अनुमति नहीं होती है, उस स्थिति में प्रक्रिया को एक संकेत दिया जाता है।
  • पृष्ठ तालिका में पृष्ठ तालिका में एनएक्स बिट (नो-निष्पादित बिट) स्थित होने पर कोड निष्पादित करने का प्रयास पृष्ठ दोष का कारण बनता है। यह एक ऑपरेटिंग प्रणाली द्वारा उपयोग किया जा सकता है, रीड-ओनली बिट के संयोजन में, एक्सओआर निष्पादन लिखें सुविधा प्रदान करने के लिए जो कुछ प्रकार के कारनामों को रोकता है।[3]


फ़्रेम तालिका डेटा

सरलतम पेज टेबल प्रणाली अधिकांशतः एक पेज फ्रेम टेबल और एक पेज टेबल बनाए रखते हैं। फ़्रेम तालिका में यह जानकारी होती है कि कौन से फ़्रेम मैप किए गए हैं। अधिक उन्नत प्रणालियों में, फ़्रेम तालिका में यह जानकारी भी हो सकती है कि कौन सा पता स्थान एक पृष्ठ सांख्यिकी जानकारी या अन्य पृष्ठभूमि जानकारी से संबंधित है।

पृष्ठ तालिका डेटा

पृष्ठ तालिका पृष्ठ तालिका प्रविष्टियों की एक सरणी है।

पृष्ठ तालिका प्रविष्टि

प्रत्येक पृष्ठ तालिका प्रविष्टि (पीटीई ) पृष्ठ के आभासी पते और भौतिक फ़्रेम के पते के बीच मानचित्रण रखती है। पृष्ठ के बारे में सहायक जानकारी भी है जैसे कि वर्तमान बिट, डर्टी बिट या संशोधित बिट, पता स्थान या प्रक्रिया आईडी जानकारी, अन्य।

हार्ड डिस्क ड्राइव जैसे सेकेंडरी स्टोरेज का उपयोग भौतिक मेमोरी बढ़ाने के लिए किया जा सकता है। पृष्ठों को भौतिक मेमोरी और डिस्क से अंदर और बाहर पृष्ठांकित किया जा सकता है। वर्तमान बिट इंगित कर सकता है कि वर्तमान में भौतिक स्मृति में कौन से पृष्ठ उपस्थित हैं या डिस्क पर हैं, और यह संकेत कर सकता है कि इन विभिन्न पृष्ठों का उपचार कैसे किया जाए, अर्थात डिस्क से एक पृष्ठ लोड करना है और भौतिक स्मृति में एक और पृष्ठ बाहर करना है।

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

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

प्रक्रिया-अद्वितीय पहचानकर्ताओं के साथ पृष्ठ तालिका प्रविष्टियों को टैग करने के विकल्प के रूप में, पृष्ठ तालिका स्वयं प्रत्येक प्रक्रिया के लिए एक अलग वास्तविक -मेमोरी पृष्ठ पर कब्जा कर सकती है जिससे पृष्ठ तालिका प्रक्रिया संदर्भ का एक भाग बन जाए। इस तरह के कार्यान्वयन में, प्रक्रिया की पृष्ठ तालिका को पृष्ठांकित किया जा सकता है जब भी प्रक्रिया अब स्मृति में नहीं रहती है।

पृष्ठ तालिका प्रकार

कई प्रकार की पेज टेबल हैं, जिन्हें विभिन्न आवश्यकताओं के लिए अनुकूलित किया गया है। अनिवार्य रूप से, एक अपुष्ट वाली पृष्ठ तालिका में आभासी पता भौतिक पता जो इस आभासी पते के अंतर्गत है, और संभवतः कुछ पता स्थान की जानकारी को संग्रहित करना चाहिए।

व्युत्क्रम पेज टेबल

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

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

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

मैपिंग की खोज में हैश एंकर टेबल का उपयोग किया जाता है। यदि कोई प्रविष्टि उपस्थित नहीं है, तो पेज फॉल्ट होता है। अन्यथा, प्रविष्टि पाई जाती है। वास्तुकला के आधार पर, प्रविष्टि को फिर से टीएलबी में रखा जा सकता है और मेमोरी संदर्भ को फिर से प्रारंभ किया जा सकता है, या संघटन श्रृंखला का तब तक पालन किया जा सकता है जब तक कि यह समाप्त न हो जाए और पृष्ठ दोष न हो जाए।

इस स्कीमा में एक आभासी पता दो में विभाजित किया जा सकता है, पहली छमाही एक आभासी पृष्ठ संख्या और दूसरी छमाही उस पृष्ठ में ऑफसेट होती है।

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

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

उल्टे पृष्ठ तालिकाओं का उपयोग उदाहरण के लिए पावरपीसी, पॉवरपीसी अल्ट्रास्पार्क और आईए-64 वास्तुकला पर किया जाता है।[4]


बहुस्तरीय पेज टेबल

x86 आर्किटेक्चर में दो-स्तरीय पृष्ठ तालिका संरचना (भौतिक पता विस्तार या पृष्ठ आकार विस्तार के बिना)।
X86 आर्किटेक्चर में तीन-स्तरीय पृष्ठ तालिका संरचना (भौतिक पता विस्तार के साथ, पृष्ठ आकार विस्तार के बिना)।

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

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

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

बहुस्तरीय पेज टेबल को पदानुक्रमित पेज टेबल भी कहा जाता है।

आभासीकृत पेज टेबल

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

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

नेस्टेड पेज टेबल

हार्डवेयर आभासीकरण के प्रदर्शन को बढ़ाने के लिए नेस्टेड पेज टेबल को प्रयुक्त किया जा सकता है। पेज-टेबल आभासीकरण के लिए हार्डवेयर समर्थन प्रदान करने से अनुकरण करने की आवश्यकता बहुत कम हो जाती है। x86 आभासीकरण के लिए वर्तमान विकल्प इंटेल की विस्तारित पृष्ठ तालिका विशेषता और एएमडी की रैपिड आभासीकरण इंडेक्सिंग विशेषता हैं।

यह भी देखें

संदर्भ

  1. "आभासी मेमोरी". umd.edu. Retrieved 28 September 2015.
  2. "पृष्ठ तालिका प्रबंधन". kernel.org. Retrieved 28 September 2015.
  3. "W^X - The Mechanism".
  4. William Stallings, Operating Systems Internals and Design Principles, p. 353.


अग्रिम पठन


बाहरी संबंध