सार मशीन

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

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

ट्यूरिंग मशीन, उदाहरण के लिए, कंप्यूटर विज्ञान में कुछ सबसे मौलिक अमूर्त मशीनें हैं। ये मशीनें किसी भी लम्बाई के स्ट्रिंग (कंप्यूटर विज्ञान) (प्रतीकों की एक स्ट्रिंग) पर संचालन करती हैं। उनके निर्देश प्रतीकों को संशोधित करने और उस प्रतीक को बदलने के लिए प्रदान करते हैं जो वर्तमान में मशीन के सूचक पर है। उदाहरण के लिए, प्रारंभिक ट्यूरिंग मशीन में एक ही क्रम हो सकते है, प्रतीक को 1 में परिवर्तित करें और फिर दाएं चलें, और यह मशीन मात्र 1s की स्ट्रिंग का उत्पादन करेगी। यह आधारभूत ट्यूरिंग मशीन नियतात्मक है; यद्यपि, गैर नियतात्मक ट्यूरिंग मशीन जो एक ही निवेश दिए जाने पर कई क्रियाओं को निष्पादित कर सकती हैं, उन्हें भी बनाया जा सकता है।

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


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


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

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

अनिवार्य भाषाएँ
1950 के दशक के अंत में, संगणक तंत्र संस्था (एसीएम) और अन्य संबद्ध संगठनों ने सार्वभौमिक कंप्यूटर उन्मुख भाषा (यूएनसीओएल) के लिए कई प्रस्ताव विकसित किए, जैसे कि कॉनवे की मशीन। यूएनसीओएल अवधारणा ठीक है, परन्तु उत्पन्न कोड के निकृष्ट निष्पादन के कारण इसका व्यापक रूप से उपयोग नहीं किया गया है। संगणना के कई क्षेत्रों में, 1990 के दशक के अंत में जावा आभाषी मशीन के विकास के अतिरिक्त इसका निष्पादन निर्गम बना रहेगा। अल्गोल (1964), पी4-मशीन (1976), यूसीएसडी पी-मशीन (1977), और फोर्थ (प्रोग्रामन भाषा) (1970) इस प्रकार की कुछ सफल अमूर्त मशीनें हैं।

वस्तु-उन्मुख भाषाएँ
वस्तु-उन्मुख प्रोग्रामन भाषा के लिए सार मशीनें प्रायः स्टैक-आधारित मेमोरी आवंटन होती हैं और वस्तु (कंप्यूटर विज्ञान) और विधि (कंप्यूटर प्रोग्रामन) के लिए विशेष प्रवेश निर्देश होते हैं। इन मशीनों में, मेमोरी प्रबंधन प्रायः अपशिष्ट संग्रह (कंप्यूटर विज्ञान) (मेमोरी उगाही सुविधा प्रोग्रामन भाषाओं में निर्मित) द्वारा किया जाता है। स्मॉलटॉक-80 (1980), सेल्फ (प्रोग्रामन भाषा) (1989), और जावा (प्रोग्रामन भाषा) (1994) इस कार्यान्वयन के उदाहरण हैं।

स्ट्रिंग प्रसंस्करण भाषाएँ
एक स्ट्रिंग (कंप्यूटर विज्ञान) एक कंप्यूटर भाषा है जो संख्याओं के अतिरिक्त प्रसंस्करण स्ट्रिंग्स पर केंद्रित है। दशकों से शैल (संगणना), प्रोग्रामन टूल, सामान्य-उद्देश्य मैक्रो प्रोसेसर और स्क्रिप्टिंग भाषा के रूप में स्ट्रिंग प्रसंस्करण भाषा हैं। उपयुक्त सार मशीन का उपयोग करने के दो लाभ हैं: निष्पादन की गति में वृद्धि और पोर्टेबिलिटी में वृद्धि। स्नोबोल और एमएल/आई प्रारंभिक स्ट्रिंग प्रसंस्करण भाषाओं के दो उल्लेखनीय उदाहरण हैं जो मशीन स्वतंत्रता प्राप्त करने के लिए एक अमूर्त मशीन का उपयोग करते हैं।

कार्यात्मक प्रोग्रामन भाषाएं
एसईसीडी मशीन (1964) और कार्डेली की कार्यात्मक सार मशीन (1983) सहित कार्यात्मक प्रोग्रामन के लिए प्रारंभिक अमूर्त मशीनें, जटिल मूल्यांकन को परिभाषित करती हैं, जिसे मूल्यांकन कार्यनीति के रूप में भी जाना जाता है, जिसमें फलन तर्कों का मूल्यांकन कॉल से पहले और ठीक एक बार किया जाता है। वर्तमान के वर्षों में, अधिकांश शोध अनुयोगी मूल्यांकन (या कॉल-बाय-नीड) मूल्यांकन पर किया गया है, जैसे कि जी-मशीन (1984), क्रिवाइन मशीन (1985), और तीन निर्देश मशीन (1986), जिसमें फलन तर्कों का मूल्यांकन मात्र आवश्यक होने पर और अधिक से अधिक एक बार किया जाता है। एक कारण यह है कि यथार्थ मूल्यांकन का प्रभावी कार्यान्वयन अब ठीक रूप से समझा जा चुका है, इसलिए अमूर्त मशीन की आवश्यकता कम हो गई है।

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

संरचना
सामान्य सार मशीन एक मेमोरी सेल (संगणना) और एक दुभाषिया (संगणना) से बनी होती है। मेमोरी का उपयोग डेटा और प्रोग्राम को संग्रहीत करने के लिए किया जाता है, जबकि दुभाषिया वह घटक है जो प्रोग्राम में सम्मिलित निर्देशों को निष्पादित करते है। दुभाषिया को उन कार्यों को करना चाहिए जो उस प्रोग्रामन भाषा के लिए अद्वितीय हैं जो वह व्याख्या कर रहा है। यद्यपि, भाषाओं की विविधता को देखते हुए, सभी दुभाषियों द्वारा साझा किए गए संचालन की श्रेणियों और एक निष्पादन (संगणना) की पहचान करना संभव है। दुभाषिया के संचालन और संबंधित डेटा संरचनाओं को निम्नलिखित श्रेणियों में विभाजित किया गया है:
 * 1) आदिम डेटा प्रकार के प्रसंस्करण के लिए संचालन:
 * 2) निष्पादन (संगणना) के अनुक्रम को नियंत्रित करने के लिए संचालन और डेटा संरचनाएं;
 * 3) डेटा संचार को नियंत्रित करने के लिए संचालन और डेटा संरचना;
 * 4) मेमोरी प्रबंधन के लिए संचालन और डेटा संरचनाएं।

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

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

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

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

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

यह भी देखें

 * सार व्याख्या
 * बल्क तुल्यकालिक समानांतर
 * विवेचित समय
 * फ्लिन का वर्गीकरण
 * कम्प्यूटेशन के साधारण मॉडल
 * गणना का मॉडल
 * समानांतर रैंडम-एक्सेस मशीन, वास्तविक मानक मॉडल।
 * एसईसीडी मशीन
 * अवस्था समष्टि

अग्रिम पठन

 * Peter van Emde Boas, Machine Models and Simulations pp. 3–66, appearing in:
 * Jan van Leeuwen, ed. "Handbook of Theoretical Computer Science. Volume A: Algorithms and Complexity, The MIT PRESS/Elsevier, 1990. ISBN 0-444-88071-2 (volume A) . QA 76.H279 1990


 * Stephan Diehl, Pieter Hartel and Peter Sestoft, Abstract Machines for Programming Language Implementation, Future Generation Computer Systems, Vol. 16 (7), Elsevier, 2000.