बरोज़ लार्ज सिस्टम डिस्क्रिप्टर

डिस्क्रिप्टर वर्तमान (2006 तक) यूनिसिस क्लियरपाथ/MCP सिस्टम सहित बरोज़ की बड़ी प्रणालियों की एक वास्तुशिल्प विशेषता है। कॉल स्टैक- और टैग किए टैग की गई वास्तुकला | टैग-आधारित होने के अलावा, इन प्रणालियों की एक उल्लेखनीय वास्तुशिल्प विशेषता यह है कि यह वर्णनकर्ता-आधारित है। डेटा डिस्क्रिप्टर डेटा रखने का माध्यम है जो सरणी डेटा संरचना और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग  के लिए स्टैक पर नहीं रहता है। डिस्क्रिप्टर का उपयोग स्ट्रिंग (कंप्यूटर साइंस) डेटा के लिए भी किया आंकड़े है जैसा कि  संकलक  और व्यावसायिक अनुप्रयोग प्रक्रिया सामग्री में होता है।

विवरण
डिस्क्रिप्टर स्टोरेज एरिया, आई/ओ रिक्वेस्ट और आई/ओ रिजल्ट का वर्णन करते हैं। उनमें संकेत देने वाले क्षेत्र होते हैं, उदा। डिस्क्रिप्टर का प्रकार, पता, लंबाई, क्या डेटा स्टोरेज में मौजूद है। उत्पाद लाइन और डिस्क्रिप्टर के प्रकार के आधार पर विवरण अलग-अलग होते हैं। बरोज़ दस्तावेज़ीकरण के अनुसार, निम्न पाठ संख्या सबसे बाईं ओर (सबसे महत्वपूर्ण) बिट 0 के रूप में है।

प्रोग्राम और डेटा डिस्क्रिप्टर में एक बिट होता है जिसे उपस्थिति बिट या पी-बिट कहा जाता है; यह इंगित करता है कि डिस्क्रिप्टर द्वारा संदर्भित वस्तु वर्तमान में स्मृति में है या द्वितीयक भंडारण में है। इस बिट का उपयोग आभासी मेमोरी  को लागू करने के लिए किया जाता है।

वर्चुअल मेमोरी मूल रूप से 1950 के दशक के अंत में मैनचेस्टर विश्वविद्यालय में एटलस कंप्यूटर (मैनचेस्टर) परियोजना के लिए विकसित की गई थी। व्यावसायिक अनुप्रयोगों में इसका उपयोग देखने के लिए उत्सुक, उन्होंने कई कंप्यूटर कंपनियों के इंजीनियरों को एक सेमिनार में आमंत्रित किया, जिनमें बरोज़ कॉर्पोरेशन और आईबीएम के लोग भी शामिल थे। B5000, 1961 में जारी किया गया, वर्चुअल मेमोरी प्रदान करने वाला पहला व्यावसायिक कंप्यूटर था। 1960 के दशक के मध्य में, IBM, Radio Corporation of America, और General Electric सहित अन्य विक्रेताओं ने ऐसी मशीनें विकसित कीं जो समय-साझाकरण की ओर उन्मुख ऑपरेटिंग सिस्टम के साथ वर्चुअल मेमोरी का समर्थन करती थीं; आईबीएम ने 1972 तक सामान्य डेटा प्रोसेसिंग उपयोग के लिए अभिप्रेत मशीनों में वर्चुअल मेमोरी का समर्थन नहीं किया।

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

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

B5000, B5500 और B5700
बी 5000 पहला डिस्क्रिप्टर आधारित कंप्यूटर था। प्रत्येक डिस्क्रिप्टर के पास 1 का ध्वज (बिट 0) होता है। डेटा डिस्क्रिप्टर में 15-बिट स्टोरेज एड्रेस और 10-बिट आकार होता है, जैसा कि अधिकांश I/O डिस्क्रिप्टर करते हैं। प्रोग्राम डिस्क्रिप्टर और एक्सटर्नल रिजल्ट डिस्क्रिप्टर के पास 15-बिट एड्रेस है लेकिन कोई आकार फ़ील्ड नहीं है।

=B5x00 प्रोग्राम डिस्क्रिप्टर=== प्रोग्राम डिस्क्रिप्टर का उपयोग प्रोग्राम सेगमेंट को परिभाषित करने के लिए किया जाता है। या तो एक ऑपरेंड कॉल या एक डिस्क्रिप्टर कॉल जो प्रोग्राम डिस्क्रिप्टर को संदर्भित करता है, उपस्थिति बिट 1 होने पर सबरूटीन कॉल का कारण बनता है, अन्यथा यह एक उपस्थिति बाधा उत्पन्न करेगा।

डेटा डिस्क्रिप्टर
डेटा डिस्क्रिप्टर या तो मेमोरी में मौजूद डेटा के एक ब्लॉक (पी = 1) या डेटा के एक ब्लॉक को संदर्भित करता है जिसे मेमोरी (पी = 0) में पढ़ा जाना चाहिए, उपस्थिति बिट के मान पर निर्भर करता है। या तो एक ऑपरेंड कॉल या एक डिस्क्रिप्टर कॉल जो डेटा डिस्क्रिप्टर को संदर्भित करता है, उपस्थिति बिट और आकार क्षेत्र की जांच करेगा; यदि उपस्थिति बिट 0 है तो एक उपस्थिति बाधा उत्पन्न होगी; यदि आकार का क्षेत्र शून्य नहीं है तो स्टैक पर दूसरा शब्द सीमा के भीतर होना चाहिए या एक इंडेक्स इंटरप्ट होगा।

बाहरी परिणाम वर्णनकर्ता
एक बाहरी परिणाम डिस्क्रिप्टर में I/O डिस्क्रिप्टर होता है जिसका उपयोग ऑपरेशन शुरू करने के लिए किया जाता है जिसमें कुछ फ़ील्ड्स को बदल दिया जाता है।

B6500, B7500 और उत्तराधिकारी
डिस्क्रिप्टर डेटा ब्लॉक का वर्णन करते हैं। प्रत्येक डिस्क्रिप्टर में डेटा ब्लॉक को संदर्भित करने वाला 20- अंश पता फ़ील्ड होता है। प्रत्येक ब्लॉक की लंबाई होती है जो डिस्क्रिप्टर में संग्रहीत होती है, वह भी 20 बिट्स। डेटा का आकार भी दिया जाता है, तीन बिट फ़ील्ड में 4-, 6-, 8- या 48-बिट डेटा होता है।

इस आर्किटेक्चर वाला पहला कंप्यूटर B6500 था। उस कार्यान्वयन में, विभिन्न स्थिति बिट्स का अर्थ था:
 * बिट 47 - उपस्थिति बिट (पी-बिट)
 * बिट 46 - कॉपी बिट
 * बिट 45 - अनुक्रमित बिट
 * बिट 44 - खंडित बिट
 * बिट 43 - रीड ओनली बिट

बाद के कार्यान्वयन में ये स्थिति बिट्स बढ़ते स्मृति आकार के साथ बने रहने के लिए विकसित हुए और अंतर्दृष्टि प्राप्त की।

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

बरोज़ वातावरण में एक कार्यक्रम में, एक सरणी आवंटित नहीं की जाती है जब इसे घोषित किया जाता है, लेकिन केवल तब जब इसे पहली बार छुआ जाता है - इस प्रकार सरणियों को घोषित किया जा सकता है और यदि उनका उपयोग नहीं किया जाता है तो उन्हें आवंटित करने से बचा जा सकता है।

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

सी जैसे निचले स्तर की भाषाओं में कार्यक्रमों को में porting करते समय, सी मेमोरी संरचना को एक बड़े आवंटित बी5000 ब्लॉक के भीतर अपनी स्वयं की मेमोरी आवंटन करके निपटाया जाता है - इस प्रकार बाकी बी5000 सिस्टम की सुरक्षा त्रुटिपूर्ण सी प्रोग्रामों द्वारा बफ़र अधिकता  नहीं हो सकती है।. वास्तव में, B5000 में पोर्ट किए जाने पर स्पष्ट रूप से अन्यथा सही ढंग से चलने वाले C प्रोग्राम में कई बफर ओवररन हो गए हैं वास्तुकला। सी, पास्कल की तरह, स्लाइस कंपाइलर सिस्टम (जो एलएलवीएम की तरह, सभी भाषाओं के लिए एक सामान्य कोड जनरेटर और ऑप्टिमाइज़र का उपयोग करता है) का उपयोग करके भी लागू किया गया था। C कंपाइलर, रन-टाइम सिस्टम, POSIX इंटरफेस, साथ ही कई यूनिक्स टूल्स का पोर्ट स्टीव बार्टल्स द्वारा किया गया था। स्लाइस का उपयोग करके एक एफिल (प्रोग्रामिंग भाषा) कंपाइलर भी विकसित किया गया था।

ऑब्जेक्ट-ओरिएंटेड प्रोग्राम्स के लिए जिन्हें B5000 आर्किटेक्चर की तुलना में ऑब्जेक्ट्स के अधिक गतिशील निर्माण की आवश्यकता होती है, ऑब्जेक्ट्स को एक B5000 ब्लॉक के भीतर सबसे अच्छा आवंटित किया जाता है। ऐसा ऑब्जेक्ट आवंटन सी के मॉलोक से उच्च स्तर है और इसे आधुनिक कुशल कचरा संग्रह (कंप्यूटर विज्ञान) के साथ सर्वोत्तम रूप से कार्यान्वित किया जाता है।

मेमोरी आर्किटेक्चर में एकीकरण
B5000 में एड्रेस फील्ड केवल 15 बिट्स है, जिसका अर्थ है कि केवल 32K शब्द (192KB) मेमोरी को डिस्क्रिप्टर द्वारा संबोधित किया जा सकता है। B6500 ने इसे 20 बिट्स या 1 मेग शब्द (6MB) तक बढ़ा दिया। सत्तर के दशक के मध्य तक यह अभी भी वास्तुकला का एक महत्वपूर्ण प्रतिबंध था। इसे दूर करने के लिए, दो समाधान लागू किए गए:


 * 1) Swapper - यह समाधान वास्तव में स्मृति प्रबंधन के शीर्ष पर एक और परत लागू करता है, संबंधित डेटा के बड़े समूहों को स्मृति में और स्मृति से बाहर ले जाता है।
 * 2) ASN - यह समाधान भौतिक रूप से अधिक मेमोरी को एक सिस्टम में कॉन्फ़िगर करने की अनुमति देता है, अलग-अलग एड्रेसेबल चंक्स में विभाजित। इस आर्किटेक्चर को ASN (एड्रेस स्पेस नंबर) मेमोरी के रूप में जाना जाता है। मेमोरी को तार्किक रूप से दो क्षेत्रों में विभाजित किया गया है, ऑपरेटिंग सिस्टम के लिए एक ग्लोबल एड्रेस स्पेस के लिए कम मेमोरी एड्रेस आवंटित करना और अलग-अलग प्रोग्राम के लिए कई समानांतर लोकल एड्रेस स्पेस के लिए सॉफ्टवेयर और हाई मेमोरी एड्रेस का समर्थन करना। पता स्थान क्रमांकित हैं, शून्य ग्लोबल इंगित करता है, 1..n स्थानीय पता स्थान इंगित करता है। डेटा साझा करने वाले प्रोग्राम स्वचालित रूप से उसी पता स्थान में रखे जाते हैं।

इन सुविधाओं का उपयोग करने के लिए कोई प्रोग्राम कोड संशोधन आवश्यक नहीं थे। दोनों समाधानों को संयुक्त भी किया जा सकता है, लेकिन अंततः MCP मेमोरी आवश्यकताओं और प्रोग्राम डेटा साझाकरण आवश्यकताओं ने पता स्थान के अधिकतम आकार को ही बढ़ा दिया।

1980 के दशक की शुरुआत में ए सीरीज़ के आगमन के साथ, इस क्षेत्र का अर्थ एक मास्टर डिस्क्रिप्टर के पते को शामिल करने के लिए बदल दिया गया था, जिसका अर्थ है कि 1 मेगाबाइट डेटा ब्लॉक आवंटित किया जा सकता है, लेकिन मशीन मेमोरी को गीगाबाइट्स में बहुत विस्तारित किया जा सकता है। या शायद टेराबाइट्स। इस आर्किटेक्चर को ASD (Advanced Segment Descriptors) मेमोरी नाम दिया गया था। इसके लिए एक नए सामान्य माइक्रोकोड विनिर्देशन की आवश्यकता थी, जिसे बीटा कहा जाता है। एएसडी मेमोरी के पीछे मुख्य दूरदर्शी जॉन मैक्लिंटॉक हैं। बाद में 3-बिट मेमोरी टैग को 4-बिट विनिर्देश में बढ़ा दिया गया, जिससे सेगमेंट डिस्क्रिप्टर आकार में 20 से 23 बिट तक बढ़ गया, जिससे एक साथ और अधिक मेमोरी को संबोधित किया जा सके। यह माइक्रोकोड विनिर्देश स्तर गामा के रूप में जाना जाने लगा।

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

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

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

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

इस प्रकार बरोज़ लार्ज सिस्टम आर्किटेक्चर व्यक्तिगत कार्यों और समग्र रूप से सिस्टम दोनों के अनुकूलन में मदद करता है।

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

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