संशोधित हार्वर्ड वास्तुकला

संशोधित हार्वर्ड वास्तुकला हार्वर्ड वास्तुकला का एक रूपांतर है, जो शुद्ध हार्वर्ड वास्तुकला के विपरीत, निर्देश स्मृति की सामग्री को डेटा के रूप में एक्सेस करने की अनुमति देता है। अधिकांश आधुनिक कंप्यूटर जिन्हें हार्वर्ड आर्किटेक्चर के रूप में प्रलेखित किया गया है, वास्तव में संशोधित हार्वर्ड आर्किटेक्चर हैं।

हार्वर्ड आर्किटेक्चर
मूल हार्वर्ड आर्किटेक्चर कंप्यूटर, हार्वर्ड मार्क I, ने निर्देशों और डेटा को स्टोर करने के लिए पूरी तरह से अलग मेमोरी सिस्टम का इस्तेमाल किया। CPU  ने अगला निर्देश प्राप्त किया और डेटा को एक साथ लोड या संग्रहीत किया और स्वतंत्र रूप से। यह एक वॉन न्यूमैन वास्तुकला कंप्यूटर के विपरीत है, जिसमें निर्देश और डेटा दोनों एक ही मेमोरी सिस्टम में संग्रहीत होते हैं और (सीपीयू कैश की जटिलता के बिना) बारी-बारी से एक्सेस किया जाना चाहिए।

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

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

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

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

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

निर्देश-मेमोरी-एज़-डेटा आर्किटेक्चर
एक अन्य परिवर्तन हार्वर्ड मशीन की अलग पता स्थान प्रकृति को संरक्षित करता है, लेकिन निर्देश स्मृति की सामग्री को डेटा के रूप में एक्सेस करने के लिए विशेष मशीन संचालन प्रदान करता है। क्योंकि डेटा सीधे निर्देशों के रूप में निष्पादन योग्य नहीं है, ऐसी मशीनों को हमेशा संशोधित हार्वर्ड आर्किटेक्चर के रूप में नहीं देखा जाता है:
 * रीड एक्सेस: प्रोग्राम शुरू होने पर शुरुआती डेटा वैल्यू को इंस्ट्रक्शन मेमोरी से डेटा मेमोरी में कॉ अनुकरणीय किया जा सकता है। या, यदि डेटा को संशोधित नहीं किया जाना है (यह एक स्थिर मान हो सकता है, जैसे कि पाई, या एक स्ट्रिंग (कंप्यूटर विज्ञान)), तो इसे डेटा मेमोरी में जगह लिए बिना सीधे चल रहे प्रोग्राम द्वारा इंस्ट्रक्शन मेमोरी से एक्सेस किया जा सकता है। (जो अक्सर प्रीमियम पर होता है)।
 * राइट एक्सेस: रीप्रोग्रामिंग के लिए एक क्षमता की आवश्यकता होती है; कुछ कंप्यूटर विशुद्ध रूप से केवल पढ़ने के लिये मेमोरी -आधारित होते हैं। उदाहरण के लिए, एक माइक्रोकंट्रोलर के पास आमतौर पर इसके निर्देश रखने के लिए उपयोग की जाने वाली फ्लैश मेमोरी को लिखने के लिए ऑपरेशन होते हैं। इस क्षमता का उपयोग सॉफ़्टवेयर अपडेट सहित उद्देश्यों के लिए किया जा सकता है। EEPROM/PROM प्रतिस्थापन एक वैकल्पिक तरीका है।

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

तुलना
संशोधित हार्वर्ड मशीनों को शुद्ध हार्वर्ड और वॉन न्यूमैन मशीनों से अलग करने के लिए तीन विशेषताओं का उपयोग किया जा सकता है: शुद्ध हार्वर्ड मशीनों के लिए, निर्देश स्थान में एक पता शून्य होता है जो निर्देश भंडारण स्थान को संदर्भित करता है और डेटा स्थान में एक अलग पता शून्य होता है जो एक विशिष्ट डेटा संग्रहण स्थान को संदर्भित करता है। इसके विपरीत, वॉन न्यूमैन और स्प्लिट-कैश संशोधित हार्वर्ड मशीनें एक ही एड्रेस स्पेस में निर्देश और डेटा दोनों को स्टोर करती हैं, इसलिए एड्रेस जीरो केवल एक स्थान को संदर्भित करता है और क्या उस स्थान में बाइनरी पैटर्न को एक निर्देश के रूप में व्याख्या किया जाता है या डेटा को कैसे परिभाषित किया जाता है कार्यक्रम लिखा है। हालाँकि, शुद्ध हार्वर्ड मशीनों की तरह, निर्देश-मेमोरी-एज़-डेटा संशोधित हार्वर्ड मशीनों में अलग-अलग पता स्थान होते हैं, इसलिए निर्देश और डेटा स्थान के लिए अलग-अलग पते शून्य होते हैं, इसलिए यह उस प्रकार की संशोधित हार्वर्ड मशीनों को शुद्ध हार्वर्ड मशीनों से अलग नहीं करता है। यह शुद्ध या संशोधित हार्वर्ड मशीनों का बिंदु है, और वे अधिक लचीले और सामान्य वॉन न्यूमैन आर्किटेक्चर के साथ सह-अस्तित्व में क्यों हैं: सीपीयू के लिए अलग-अलग मेमोरी पाथवे एक ही समय में निर्देशों को प्राप्त करने और डेटा तक पहुंचने की अनुमति देते हैं, जिससे थ्रूपुट में सुधार होता है।. शुद्ध हार्वर्ड मशीनों में अलग-अलग पता स्थान के साथ अलग-अलग रास्ते होते हैं। स्प्लिट-कैश संशोधित हार्वर्ड मशीनों में सीपीयू कैश या अन्य कसकर युग्मित यादों के लिए अलग-अलग पहुंच पथ हैं, लेकिन एक एकीकृत पहुंच पथ शेष मेमोरी पदानुक्रम को कवर करता है। एक वॉन न्यूमैन प्रोसेसर में केवल वही एकीकृत पहुंच पथ होता है। एक प्रोग्रामर के दृष्टिकोण से, एक संशोधित हार्वर्ड प्रोसेसर जिसमें निर्देश और डेटा यादें एक पता स्थान साझा करती हैं, को आमतौर पर वॉन न्यूमैन मशीन के रूप में माना जाता है जब तक कि कैश सुसंगतता एक समस्या नहीं बन जाती, जैसा कि स्व-संशोधित कोड और प्रोग्राम लोडिंग के साथ होता है। यह भ्रमित करने वाला हो सकता है, लेकिन ऐसे मुद्दे आमतौर पर केवल सिस्टम प्रोग्रामिंग और सिस्टम एकीकरण को ही दिखाई देते हैं। अन्य संशोधित हार्वर्ड मशीनें इस संबंध में शुद्ध हार्वर्ड मशीनों की तरह हैं। मूल हार्वर्ड मशीन, हार्वर्ड मार्क I, इलेक्ट्रो-मैकेनिकल काउंटरों में एक छिद्रित टेप और डेटा पर निर्देश संग्रहीत करता है। हालाँकि, यह पूरी तरह से उस समय उपलब्ध प्रौद्योगिकी की सीमाओं के कारण था। आज एक हार्वर्ड मशीन जैसे कि तस्वीर माइक्रोकंट्रोलर निर्देशों के लिए 12-बिट वाइड फ्लैश मेमोरी और डेटा के लिए 8-बिट वाइड स्टेटिक रैंडम एक्सेस मेमोरी का उपयोग कर सकता है। इसके विपरीत, एक वॉन न्यूमैन माइक्रोकंट्रोलर जैसे ARM7TDMI, या एक संशोधित हार्वर्ड ARM9 कोर, आवश्यक रूप से फ्लैश मेमोरी और SRAM (उन मामलों में 8 बिट बाइट्स के रूप में) तक समान पहुंच प्रदान करता है।
 * निर्देश और डेटा यादें अलग-अलग पता स्थान घेरती हैं
 * निर्देश और डेटा मेमोरी में सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) के लिए अलग-अलग हार्डवेयर रास्ते होते हैं
 * निर्देश और डेटा मेमोरी को विभिन्न तरीकों से एक्सेस किया जा सकता है

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

ऐसे प्रोसेसर भी हैं जो सबसे कठोर परिभाषा के अनुसार हार्वर्ड मशीन हैं (वह प्रोग्राम और डेटा मेमोरी अलग-अलग एड्रेस स्पेस पर कब्जा कर लेते हैं), और केवल कमजोर अर्थों में संशोधित किए जाते हैं कि डेटा के रूप में प्रोग्राम मेमोरी को पढ़ने और/या लिखने के लिए ऑपरेशन होते हैं। उदाहरण के लिए, Atmel AVR में LPM (लोड प्रोग्राम मेमोरी) और SPM (स्टोर प्रोग्राम मेमोरी) निर्देश इस तरह के संशोधन को लागू करते हैं। इसी तरह के समाधान अन्य माइक्रोकंट्रोलर्स जैसे PIC माइक्रोकंट्रोलर और Z8 Encore!|Z8Encore!, टेक्सास इंस्ट्रूमेंट्स TMS320 जैसे डिजिटल सिग्नल प्रोसेसर के कई परिवारों में पाए जाते हैं। क्योंकि निर्देश निष्पादन अभी भी प्रोग्राम एड्रेस स्पेस तक ही सीमित है, ये प्रोसेसर वॉन न्यूमैन मशीनों के बहुत विपरीत हैं। बाहरी वायरिंग भी सख्ती से हार्वर्ड सीपीयू कोर को एक संशोधित हार्वर्ड में परिवर्तित कर सकती है, उदाहरण के लिए केवल `PSEN#` (प्रोग्राम स्पेस रीड) और `RD#` (एक्सटर्नल डेटा स्पेस रीड) के संयोजन से इंटेल पर AND गेट के माध्यम से बाहरी रूप से सिग्नल मिलते हैं। 8051 फैमिली माइक्रोकंट्रोलर, माइक्रोकंट्रोलर को वॉन न्यूमैन कनेक्टेड कहा जाता है, क्योंकि बाहरी डेटा और प्रोग्राम एड्रेस स्पेस एकीकृत हो जाते हैं।

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

यह भी देखें

 * हार्वर्ड वास्तुकला
 * वॉन न्यूमैन वास्तुकला