सार मशीन

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

अग्रिम पठन

 * 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.