निर्देश सेट सिम्युलेटर

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

निर्देश अनुकरण कई संभावित कारणों में से एक के लिए नियोजित एक पद्धति है |
 * ऊपर की ओर संगतता मोड (सॉफ्टवेयर) के लिए किसी अन्य हार्डवेयर उपकरण या पूरे कंप्यूटर के मशीन कोड का अनुकरण करने के लिए पूर्ण प्रणाली सिम्युलेटर में सामान्यतः निर्देश सेट सिम्युलेटर सम्मिलित होता है।
 * उदाहरण के लिए, आईबीएम 1401 को माइक्रोकोड एम्यूलेटर के उपयोग के माध्यम से बाद के आईबीएम/360 पर अनुकरण किया गया था।


 * परीक्षण और डिबगिंग उद्देश्यों के लिए एक ही हार्डवेयर पर मशीन कोड निर्देशों (किन्तु इनपुट स्ट्रीम के रूप में माना जाता है) की निगरानी और निष्पादन करने के लिए, उदाहरण मेमोरी सुरक्षा के साथ (जो आकस्मिक या इच्छापूर्वक बफ़र अधिकता से बचाता है)।
 * गति के प्रदर्शन में सुधार करने के लिए धीमी चक्र-स्पष्ट सिम्युलेटर की तुलना में प्रोसेसर कोर से जुड़े अनुकरण के जहां प्रोसेसर स्वयं सत्यापित होने वाले तत्वों में से एक नहीं है | वेरिलॉग का उपयोग करते हुए हार्डवेयर विवरण भाषा रचना में जहां आईएसएस जैसे उपकरणों के साथ अनुकरण को वेरिलॉग प्रोग्राम लैंग्वेज इंटरफेस .28PLI.29 के माध्यम से तेजी से चलाया जा सकता है (PL/1 के साथ भ्रमित नहीं होना चाहिए, जो प्रोग्रामिंग भाषा है)।

कार्यान्वयन
लक्ष्य हार्डवेयर प्राप्त करने से पहले प्रोग्राम को डीबग करने के लिए सॉफ़्टवेयर इंजीनियरिंग/प्रोग्रामर के लिए आईएसएस अधिकांशतः डिबगर (या स्वयं) प्रदान किया जाता है। जीडीबी डीबगर है जिसमें संकलित आईएसएस है। माइक्रो नियंत्रक के व्यवहार की नकल करने के लिए इसे कभी-कभी सिम्युलेटेड परिधीय परिपथ जैसे टाइमर, इन्टरप्ट , सीरियल पोर्ट , सामान्य I/O पोर्ट आदि के साथ एकीकृत किया जाता है।

मूल निर्देश अनुकरण विधि उद्देश्य की परवाह किए बिना समान है: पहले अतिरिक्त इनपुट मापदंड के रूप में लक्ष्य प्रोग्राम के नाम से गुजरने वाले निगरानी प्रोग्राम को निष्पादित करें। लक्ष्य प्रोग्राम को तब मेमोरी में लोड किया जाता है, किन्तु कोड को नियंत्रण कभी नहीं दिया जाता है। इसके अतिरिक्त, लोड किए गए प्रोग्राम के अन्दर प्रवेश बिंदु की गणना की जाती है | और इस स्थान पर छद्म प्रोग्राम स्थिति शब्द (पीएसडब्ल्यू) सेट किया जाता है। स्यूडो प्रोसेसर रजिस्टर का सेट इस बात पर सेट होता है कि यदि प्रोग्राम को सीधे नियंत्रण दिया गया होता तो उसमें क्या होता।

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

इसके बाद, निष्पादन आगे बढ़ता है |


 * 1) छद्म पीएसडब्ल्यू स्थान पर निर्देश की लंबाई निर्धारित करें (प्रारंभ में लक्ष्य प्रोग्राम में पहला निर्देश)। यदि यह निर्देश प्रोग्राम के अन्दर पहले दिए गए पॉज़ पॉइंट्स के सेट से मेल खाता है, तो पॉज़ कारण सेट करें, 7 पर जाएँ।
 * 2) मॉनिटर की मेमोरी में निर्देश को उसके मूल स्थान (यदि आवश्यक हो) से प्राप्त करें। यदि ट्रेस उपलब्ध है और चालू है, तो प्रोग्राम का नाम, निर्देश ऑफ़सेट और कोई अन्य मान संग्रहीत करें।
 * 3) निर्देश प्रकार के आधार पर, पूर्व-निष्पादन जांच करें और निष्पादित करें। यदि निर्देश किसी भी कारण से आगे नहीं बढ़ सकता है (अमान्य निर्देश, गलत मोड इत्यादि) 7 पर जाएं। यदि निर्देश स्मृति को बदलने वाला है,| तो स्मृति गंतव्य की जांच करें (इस थ्रेड (कंप्यूटर विज्ञान) के लिए) और पर्याप्त रूप से बड़ा है। यदि ठीक है, अस्थायी वास्तविक रजिस्टरों में उचित छद्म रजिस्टरों को लोड करें, वास्तविक रजिस्टरों के साथ समकक्ष चाल करें,| ट्रेस चालू होने पर पता और परिवर्तित संग्रहित की लंबाई को बचाएं और 4 पर जाएं। यदि निर्देश रजिस्टर-टू-रजिस्टर ऑपरेशन है, छद्म लोड करें मॉनिटर के वास्तविक रजिस्टरों में रजिस्टर करता है,| ऑपरेशन करता है, संबंधित छद्म रजिस्टरों में वापस स्टोर करता है,| 4 पर जाता है। यदि निर्देश सशर्त शाखा है, तो निर्धारित करें कि क्या स्थिति संतुष्ट है: यदि 4 पर नहीं जाते हैं, यदि स्थिति संतुष्ट है, तो पता करने के लिए शाखा की गणना करें, निर्धारित करें कि क्या मान्य है (यदि नहीं, तो त्रुटि = वाइल्ड ब्रांच सेट करें और 7 पर जाएं।) यदि ठीक है, तो 5 पर जाएं। यदि निर्देश ऑपरेटिंग प्रणाली कॉल है, तो मॉनिटरिंग प्रोग्राम से वास्तविक कॉल करें, फेक पतों से प्रोग्राम की निगरानी के लिए नियंत्रण लौटाएं और फिर कॉल को प्रतिबिंबित करने के लिए छद्म रजिस्टरों को रीसेट करें; 4 पर जाएं।
 * 4) वर्तमान छद्म पीएसडब्ल्यू मान में निर्देश की लंबाई जोड़ें।
 * 5) छद्म पीएसडब्ल्यू में अगला पता स्टोर करें।
 * 6) 1 पर जाएं।
 * 7) निष्पादन रोकें।

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

निर्देश अनुकरण निष्पादन से पहले त्रुटियों का पता लगाने का अवसर प्रदान करता है | जिसका अर्थ है कि स्थितियां अभी भी वैसी ही हैं जैसी वे थीं और त्रुटि से नष्ट नहीं हुईं। आईबीएम S/360 दुनिया का बहुत अच्छा उदाहरण निम्नलिखित निर्देश अनुक्रम है | जो निर्देश अनुकरण मॉनिटर के बिना डिबगिंग में कठिनाई उत्पन्न कर सकता है।

LM R14,R12,12(R13) जहां r13 गलत विधि से X 00 s की स्ट्रिंग को संकेत करता है BR R14 प्रोग्राम चेक ऑपरेशन अपवाद के साथ पीएसडब्ल्यू को X 0000002 सम्मिलित करने का कारण बनता है * त्रुटि पर सभी रजिस्टरों में नल होते हैं।

ओवरहेड
उपरोक्त मूल लूप (नए पते को प्राप्त/निष्पादित/गणना) करने के लिए निर्देशों की संख्या हार्डवेयर पर निर्भर करती है | किन्तु इसे आईबीएम S/360/370/390/ES9000 स्तर की मशीनों पर कई निर्देशों के लिए लगभग 12 या 13 निर्देशों में पूरा किया जा सकता है। वैध स्मृति स्थानों या सशर्त ठहराव के लिए जाँच ओवरहेड में अधिक वृद्धि करती है | किन्तु अनुकूलन विधि इसे स्वीकार्य स्तर तक कम कर सकती है। परीक्षण उद्देश्यों के लिए यह सामान्य रूप से अधिक स्वीकार्य है | क्योंकि निर्देश वेरिएबलण, ट्रेस और परीक्षण त्रुटि दिनवेरिएबल्या (जब कोई वास्तविक त्रुटि नहीं है) के लिए इच्छापूर्वक कूद सहित शक्तिशाली डीबगिंग क्षमताएं प्रदान की जाती हैं। इसके अतिरिक्त, वास्तविक (निष्पादित) कोड कवरेज़ का परीक्षण करने के लिए पूर्ण निर्देश ट्रेस का उपयोग किया जा सकता है।

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

यदि लक्ष्य प्रोग्राम स्मृति में यादृच्छिक स्थान से मूल्य उठाता है (सामान्यतः यह 'स्वयं' नहीं होता है), उदाहरण के लिए यह लगभग हर सामान्य स्थिति में शून्य (एक्स 00) हो सकता है और प्रोग्राम ठीक काम करता है। यदि निगरानी प्रोग्राम लोड बिंदु को स्थानांतरित करता है, तो यह X FF कह सकता है और तर्क तुलना ऑपरेशन के समय अलग-अलग परिणाम देगा। वैकल्पिक रूप से, यदि निगरानी प्रोग्राम अब उस स्थान पर कब्जा कर रहा है | जहां से मूल्य उठाया जा रहा है, तो समान परिणाम हो सकते हैं।

पुन: प्रवेश बग: डायनेमिक थ्रेड मेमोरी के अतिरिक्त स्टैटिक वेरिएबल का आकस्मिक उपयोग कई स्थितियों में पुन: प्रवेश की समस्या उत्पन्न कर सकता है। मॉनिटरिंग प्रोग्राम का उपयोग स्टोरेज प्रोटेक्ट की के बिना भी इनका पता लगा सकता है।

अवैध संचालन: कुछ ऑपरेटिंग प्रणाली (या हार्डवेयर) को ऑपरेटिंग प्रणाली पर कुछ कॉल के लिए एप्लिकेशन प्रोग्राम को सही मोड में रखने की आवश्यकता होती है। निर्देश अनुकरण निष्पादन से पहले इन स्थितियों का पता लगा सकता है।

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

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

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

उदाहरण
परीक्षण और डिबगिंग के लिए उपयोग किए जाने वाले मॉनिटरिंग प्रोग्राम द्वारा अनुकरण से विशिष्ट ट्रेस आउटपुट देता है |

प्रोग्राम ऑफसेट निर्देश डिस-असेंबल रजिस्टर/स्टोरेज (निष्पादन के बाद) TEST001 000000 X'05C0' BALR R12,0 R12=002CE00A 000002 X'47F0C00E' ई.पू. 15,X'00C'(R12) 00000E X'98ECD00C' STM R14,R12,X'00C'(R13) X'002E0008' ==> X'00004CE,002CE008,..etc...' 000012 X'45E0C122' बाल R14,X'122'(R12) R14=002C0016 SUB1 000124 X'50E0C28A' ST R14,X'28A'(R12) X'002CE294' ==> X'002C0016' आदि...

यह भी देखें
सिमुलेटर अन्य
 * एआरएममुलेटर - एआरएम आर्किटेक़वेरिएबल के लिए सीपीयू सिमुलेटर,एआरएम द्वारा स्वयं संदर्भ और सॉफ्टवेयर विकास वाहन दोनों के रूप में प्रदान किया गया है।
 * कंप्यूटर आर्किटेक्वेरिएबल सिम्युलेटर
 * सीपीयू सिम - जावा-आधारित प्रोग्राम जो उपयोगकर्ता को निर्देश सेट को रचना करने और बनाने की अनुमति देता है और फिर सेट से अनुकरण के माध्यम से निर्देशों के प्रोग्राम चलाता है |
 * जीपीएसआईएम - तस्वीर माइक्रोकंट्रोलर सिम्युलेटर
 * इंटरप/8 - इंटेल 8008 और इंटरप/80 इंटेल8080 के लिए।
 * लिटिल मैन कंप्यूटर - निर्देश सेट सिम्युलेटर का सरल जावा-आधारित उदाहरण है |
 * माइक्रो सिम - सीपीयू सिम्युलेटर, शैक्षिक उपयोग के लिए माइक्रोकोड स्तर पर निर्देश सेट परिभाषा की अनुमति देता है |
 * डी:वर्चुएलर_इन्फो_2-प्रोज़ेसर - सीपीयू सिम्युलेटर, शैक्षिक उपयोग के लिए माइक्रोकोड स्तर पर निर्देश सेट परिभाषा की अनुमति देता है
 * ओवीपीसिम - सीपीयू और पूर्ण प्रणाली सिम्युलेटर, प्रोसेसर के 170 से अधिक निर्देश स्पष्ट मॉडल प्रदान करते हैं। उपयोगकर्ता परिभाषित निर्देश सेट की अनुमति देता है।
 * वीआईपी, 2003-2015 के बीच एआरएम-आधारित प्रोसेसर एचपी रेखांकन कैलकुलेटर की तुलना की नई तुलना पर आरपीएल (प्रोग्रामिंग भाषा) चलाने के लिए उन्नत सैटर्न सीपीयू और प्रणाली सिम्युलेटर होते है |
 * सिमिक्स - सीपीयू और फुल प्रणाली सिम्युलेटर फ्रेमवर्क, जटिल आधुनिक हार्डवेयर के पूर्ण मॉडल का निर्माण।
 * सिम - 1960 के दशक से I/O के साथ पूर्ण पीडीपी-11 प्रणाली सहित 50+ ऐतिहासिक कंप्यूटरों का अनुकरण।
 * सीपीयू-ओएस सिम्युलेटर - एकीकृत आरआईएससी प्रकार सीपीयू और मल्टीथ्रेडिंग ऑपरेटिंग प्रणाली शैक्षिक सिमुलेटर।
 * इंस्ट्रुमेंटेशन (कंप्यूटर प्रोग्रामिंग)
 * मेटाप्रोग्रामिंग

बाहरी संबंध

 * "Instruction-Level Simulation And Tracing"
 * Imperas provide an आईएसएस for over 170 processor variants forएआरएम, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze आईएसए.
 * Imperas provide an आईएसएस for over 170 processor variants forएआरएम, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze आईएसए.