सार मशीन

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

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

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

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

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

अनिवार्य भाषाएँ
1950 के दशक के अंत में, संगणक तंत्र संस्था|एसोसिएशन फॉर कंप्यूटिंग मशीनरी (ACM) और अन्य संबद्ध संगठनों ने UNCOL|यूनिवर्सल कंप्यूटर ओरिएंटेड लैंग्वेज (UNCOL) के लिए कई प्रस्ताव विकसित किए, जैसे कि कॉनवे का गेम ऑफ लाइफ|कॉनवे की मशीन। यूएनसीओएल अवधारणा अच्छी है, लेकिन उत्पन्न कोड के खराब प्रदर्शन के कारण इसका व्यापक रूप से उपयोग नहीं किया गया है। कंप्यूटिंग के कई क्षेत्रों में, 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.