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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

प्रोग्राम ऑफसेट निर्देश डिस-असेंबल रजिस्टर/स्टोरेज (निष्पादन के बाद) 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' वगैरह...

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

बाहरी संबंध

 * "Instruction-Level Simulation And Tracing"
 * Imperas provide an ISS for over 170 processor variants for ARM, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze ISAs.
 * Imperas provide an ISS for over 170 processor variants for ARM, ARMv8, MIPS, MIPS64, PowerPC, RISC-V, ARC, Nios-II, MicroBlaze ISAs.