मेमोरी सुरक्षा

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

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

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

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

पेजिंग का समर्थन करने वाले अधिकांश कंप्यूटर आर्किटेक्चर  भी मेमोरी सुरक्षा के आधार के रूप में पृष्ठों का उपयोग करते हैं।

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

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

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

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

कुछ सिस्टम पर, पेज फॉल्ट मैकेनिज्म का उपयोग निष्पादन योग्य स्थान सुरक्षा जैसे W^X के लिए भी किया जाता है।

सुरक्षा कुंजी
एक स्मृति सुरक्षा कुंजी (MPK) तंत्र भौतिक स्मृति को एक विशेष आकार (जैसे, 4 KiB) के ब्लॉकों में विभाजित करता है, जिनमें से प्रत्येक का एक संबद्ध संख्यात्मक मान होता है जिसे सुरक्षा कुंजी कहा जाता है। प्रत्येक प्रक्रिया में एक सुरक्षा कुंजी मूल्य भी जुड़ा होता है। मेमोरी एक्सेस पर हार्डवेयर जांचता है कि वर्तमान प्रक्रिया की सुरक्षा कुंजी एक्सेस किए जा रहे मेमोरी ब्लॉक से जुड़े मान से मेल खाती है; यदि नहीं, तो एक अपवाद होता है। यह तंत्र सिस्टम/360 आर्किटेक्चर में पेश किया गया था। यह आज के सिस्टम z  मेनफ्रेम पर उपलब्ध है और सिस्टम z ऑपरेटिंग सिस्टम और उनके सबसिस्टम द्वारा अत्यधिक उपयोग किया जाता है।

ऊपर वर्णित सिस्टम/360 सुरक्षा कुंजियाँ भौतिक पतों से संबद्ध हैं। यह हेवलेट पैकर्ड / इंटेल   आईए-64  और हेवलेट-पैकार्ड  पीए-जोखिम  जैसे आर्किटेक्चर द्वारा उपयोग किए जाने वाले सुरक्षा कुंजी तंत्र से अलग है, जो वर्चुअल पते से जुड़े हैं, और जो प्रति प्रक्रिया एकाधिक कुंजी की अनुमति देते हैं।

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

PA-RISC में कुंजी के 15-18 बिट्स हैं; इटेनियम कम से कम 18 को अनिवार्य करता है। कुंजियाँ आमतौर पर सुरक्षा डोमेन से जुड़ी होती हैं, जैसे पुस्तकालय, मॉड्यूल, आदि।

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

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

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

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

डायनेमिक टैनिंग
डायनेमिक टैनिंग प्रोग्राम को अवैध मेमोरी एक्सेस से बचाने की एक तकनीक है। जब स्मृति आवंटित की जाती है, तो रनटाइम पर, यह तकनीक एक ही दाग ​​चिह्न का उपयोग करके स्मृति और संबंधित सूचक दोनों को खराब कर देती है। जब प्रोग्राम निष्पादित होता है तब दाग के निशान उपयुक्त रूप से प्रचारित किए जाते हैं और हर बार एक मेमोरी एड्रेस m को पॉइंटर p के माध्यम से एक्सेस किया जाता है; यदि एम और पी से जुड़े दाग चिह्न भिन्न होते हैं, तो निष्पादन रोक दिया जाता है और अवैध पहुंच की सूचना दी जाती है। SPARC M7 प्रोसेसर (और उच्चतर) हार्डवेयर में डायनेमिक टैनिंग लागू करते हैं। Oracle इस फीचर को  सिलिकॉन सुरक्षित मेमोरी  (SSM) (पहले एप्लिकेशन डेटा इंटीग्रिटी (ADI) के रूप में ब्रांडेड) के रूप में बाजार में उतारता है। LowRISC CPU डिज़ाइन में टैग की गई मेमोरी नाम के तहत डायनेमिक टैनिंग शामिल है।

उपाय
किसी विशेष कार्यान्वयन के सुरक्षा स्तर को इस बात से मापा जा सकता है कि वह न्यूनतम विशेषाधिकार के सिद्धांत का कितनी बारीकी से पालन करता है।

विभिन्न ऑपरेटिंग सिस्टम में मेमोरी सुरक्षा
विभिन्न ऑपरेटिंग सिस्टम मेमोरी सुरक्षा या पृथक्करण के विभिन्न रूपों का उपयोग करते हैं। हालाँकि 1960 के दशक से अधिकांश मेनफ्रेम  और कई  मिनी कंप्यूटर  सिस्टम पर मेमोरी प्रोटेक्शन आम था, लेकिन वास्तविक मेमोरी सेपरेशन का उपयोग  गृह कम्प्यूटर  ऑपरेटिंग सिस्टम में OS/2 (और इन दिनों में) तक नहीं किया गया था।   जोखिम ) 1987 में जारी किया गया था। पूर्व प्रणालियों पर, सुरक्षा की ऐसी कमी का उपयोग इंटरप्रोसेस संचार के रूप में भी किया जाता था, प्रक्रियाओं के बीच एक पॉइंटर (कंप्यूटर प्रोग्रामिंग) भेजकर। ऑपरेटिंग सिस्टम के  मेरे पास विंडोज़ था  परिवार में सिस्टम मेमोरी तक पहुंचने के लिए प्रक्रियाओं के लिए संभव है। मेमोरी सुरक्षा को लागू करने वाले कुछ ऑपरेटिंग सिस्टम में शामिल हैं:


 * यूनिक्स जैसी प्रणालियाँ (1970 के दशक के उत्तरार्ध से), जिसमें सोलारिस (ऑपरेटिंग सिस्टम),  लिनक्स ,  बीएसडी , मैकओएस,  आईओएस  और  जीएनयू हर्ड  शामिल हैं।
 * बेल लैब्स और  इन्फर्नो (ऑपरेटिंग सिस्टम)  से योजना 9, जिसे बेल लैब्स में यूनिक्स उत्तराधिकारी के रूप में बनाया गया (1992, 1995)
 * ओएस/2 (1987)
 * RISC OS (1987) (OS मेमोरी सुरक्षा व्यापक नहीं है।)
 * माइक्रोवेयर OS-9, एक वैकल्पिक मॉड्यूल के रूप में (1992 से)
 * विंडोज एनटी 3.1 से माइक्रोसॉफ़्ट विंडोज़  परिवार (1993)
 * अटारी  मल्टी टीओएस  (1991 से)
 * फारोसी (2017 से)

यूनिक्स जैसी प्रणालियों पर,  मेमोरी सुरक्षा को नियंत्रित करने के लिए  सिस्टम कॉल  का उपयोग किया जाता है।

यह भी देखें

 * भंडारण उल्लंघन, स्मृति सुरक्षा के उल्लंघन के लिए
 * सुरक्षा और सुरक्षा का पृथक्करण
 * मेमोरी प्रबंधन (ऑपरेटिंग सिस्टम)

इस पृष्ठ में अनुपलब्ध आंतरिक कड़ियों की सूची

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

बाहरी संबंध

 * Intel Developer Manuals – in-depth information on memory protection for Intel-based architectures