काउंटर मशीन: Difference between revisions
From Vigyanwiki
(Created page with "{{Short description|Abstract machine used in a formal logic and theoretical computer science}} काउंटर मशीन एक अमूर्त मशीन ह...") |
No edit summary |
||
| (10 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
{{Short description|Abstract machine used in a formal logic and theoretical computer science}} | {{Short description|Abstract machine used in a formal logic and theoretical computer science}} | ||
काउंटर मशीन | '''काउंटर मशीन''' [[अमूर्त मशीन|एब्स्ट्रेक्ट मशीन]] है जिसका उपयोग [[औपचारिक तर्क|फार्मल लॉजिक]] और [[सैद्धांतिक कंप्यूटर विज्ञान|थ्योरेटिकल कंप्यूटर साइंस]] में गणना के मॉडल के लिए किया जाता है। इस प्रकार यह चार प्रकार की [[रजिस्टर मशीन]] में से सबसे मौलिक है। काउंटर मशीन में या अधिक अनबाउंडेड ''रजिस्टरों'' का सेट सम्मिलित होता है, जिनमें से प्रत्येक ऋणात्मक पूर्णांक, और मशीन के पालन के लिए (सामान्यतः अनुक्रमिक) अंकगणित और नियंत्रण निर्देशों की सूची रख सकता है। इस प्रकार काउंटर मशीन का उपयोग सामान्यतः पारस्परिक बहिष्करण सिद्धांत के संबंध में समानांतर एल्गोरिदम को डिजाइन करने की प्रक्रिया में किया जाता है। जब इस विधि से उपयोग किया जाता है, जिससे काउंटर मशीन का उपयोग मेमोरी एक्सेस के संबंध में कम्प्यूटेशनल सिस्टम के भिन्न-भिन्न समय-चरणों को मॉडल करने के लिए किया जाता है। इस प्रकार प्रत्येक संबंधित कम्प्यूटेशनल फेज के लिए मेमोरी एक्सेस के संबंध में गणनाओं को मॉडलिंग करके, समान मेमोरी पते पर दो (या अधिक) थ्रेड्स द्वारा साथ लेखन ऑपरेशन, इंटरलॉकिंग से बचने के लिए ऐसे स्थिति में समानांतर एल्गोरिदम डिज़ाइन किया जा सकता है। | ||
== | == मूलभूत सुविधाएँ == | ||
किसी दिए गए काउंटर मशीन मॉडल के लिए निर्देश सेट छोटा है | किसी दिए गए काउंटर मशीन मॉडल के लिए निर्देश सेट छोटा है केवल से छह या सात निर्देशों तक अधिकांश मॉडलों में कुछ अंकगणितीय ऑपरेशन और कम से कम नियमबद्ध ऑपरेशन होता है (यदि स्थिति सत्य है, तो जम्प करे)। तीन आधार मॉडल, प्रत्येक तीन निर्देशों का उपयोग करते हुए, निम्नलिखित संग्रह से तैयार किए गए हैं। (संक्षिप्ताक्षर अनैतिक हैं।) | ||
* | * CLR (r): क्लियर रजिस्टर r। (r को शून्य पर सेट करें।) | ||
* | * INC (r): रजिस्टर r की कंटेंट को बढ़ाएं। | ||
* | * DEC (r): रजिस्टर r की कंटेंट को घटाएं। | ||
* | * CPY (r<sub>j</sub>, r<sub>k</sub>): रजिस्टर ''r<sub>j</sub>'' की कंटेंट को कॉपी करें ''r<sub>k</sub>'' पंजीकृत करने के लिए r<sub>j</sub> की कंटेंट को छोड़कर बनाये रहते है। | ||
* | * JZ (r, Z): यदि रजिस्टर r में शून्य है तो निर्देश Z पर जाएं अन्यथा क्रम में जारी रखें। | ||
* | * JE (r<sub>j</sub>, r<sub>k</sub>, z): यदि रजिस्टर r<sub>j</sub> की कंटेंट रजिस्टर r<sub>k</sub> की कंटेंट के समान है फिर निर्देश पर जाएं अन्यथा क्रम से जारी रखें। | ||
इसके | इसके अतिरिक्त, मशीन में सामान्यतः HALT निर्देश होता है, जो मशीन को रोक देता है (सामान्यतः परिणाम की गणना के पश्चात्)। | ||
ऊपर उल्लिखित निर्देशों का उपयोग करते हुए, विभिन्न लेखकों ने कुछ काउंटर मशीनों पर चर्चा की है: | ऊपर उल्लिखित निर्देशों का उपयोग करते हुए, विभिन्न लेखकों ने कुछ काउंटर मशीनों पर चर्चा की है: | ||
* सेट 1: { | * सेट 1: { INC (r), DEC (r), JZ (r, Z) }, (मिन्स्की (1961, 1967), लैम्बेक (1961)) | ||
* सेट 2: { | * सेट 2: { CLR (r), INC (r), JE (r)।<sub>j</sub>, r<sub>k</sub>, z) }, (एर्शोव (1958), पीटर (1958) जैसा कि शेफर्डसन-स्टर्गिस (1964); मिन्स्की (1967); शॉनहेज (1980) द्वारा व्याख्या की गई है) | ||
* सेट 3: { | * सेट 3: {INC (r), CPY (r)।<sub>j</sub>, आर<sub>k</sub>), JE (r<sub>j</sub>, r<sub>k</sub>, z) }, (एल्गॉट-रॉबिन्सन (1964), मिन्स्की (1967)) | ||
तीन काउंटर मशीन बेस मॉडल में समान कम्प्यूटेशनल | तीन काउंटर मशीन बेस मॉडल में समान कम्प्यूटेशनल पावर होती है क्योंकि मॉडल के निर्देश दूसरे मॉडल से प्राप्त किए जा सकते हैं। इस प्रकार सभी [[ट्यूरिंग मशीन]] की कम्प्यूटेशनल पावर के समान हैं। उनकी एकात्मक प्रसंस्करण शैली के कारण, काउंटर मशीनें सामान्यतः तुलनीय ट्यूरिंग मशीनों की तुलना में तेजी से धीमी होती हैं। | ||
== वैकल्पिक नाम, वैकल्पिक मॉडल == | == वैकल्पिक नाम, वैकल्पिक मॉडल == | ||
{{main| | {{main|काउंटर-मशीन मॉडल}} | ||
काउंटर मशीन मॉडल | काउंटर मशीन मॉडल अनेक भिन्न-भिन्न नामों से जाने जाते हैं जो उनकी विशिष्टताओं के आधार पर उन्हें भिन्न करने में सहायता कर सकते हैं। निम्नलिखित निर्देश में JZDEC (r) मिश्रित निर्देश है जो यह देखने के लिए परीक्षण करता है कि कोई रजिस्टर r रिक्त है या नहीं; यदि ऐसा है तो निर्देश I<sub>z</sub> पर जाएँ, अन्यथा यदि नहीं तो r की कंटेंट को घटाएँ जाते है: | ||
* शेफर्डसन-स्टर्गिस मशीन, क्योंकि इन लेखकों ने | * शेफर्डसन-स्टर्गिस मशीन, क्योंकि इन लेखकों ने फार्मल रूप से अपने मॉडल को सरलता से सुलभ प्रदर्शनी (1963) में बताया था। इस प्रकार अतिरिक्त सुविधा निर्देशों के साथ संवर्धित अनुदेश सेट (1) का उपयोग करता है (JNZ शून्य नहीं होने पर जंप है, JZ के स्थान पर उपयोग किया जाता है): | ||
*: { | *: {INC (r), DEC (r), CLR (r), CPY (r)।<sub>j</sub>, r<sub>k</sub> ), JNZ (r, Z), J (Z)} | ||
* मिन्स्की मशीन, क्योंकि [[मार्विन मिंस्की]] (1961) ने मॉडल को | * मिन्स्की मशीन, क्योंकि [[मार्विन मिंस्की]] (1961) ने मॉडल को फार्मल रूप दिया। सामान्यतः निर्देश सेट (1) का उपयोग करता है, किन्तु निर्देश-निष्पादन डिफ़ॉल्ट-अनुक्रमिक नहीं है, इसलिए अतिरिक्त मापदंड 'z' INC के पश्चात् अगले निर्देश को निर्दिष्ट करता है और JZDEC में विकल्प के रूप में दिखाई देता है: | ||
*: { INC ( r, z ), JZDEC ( r, z<sub>true</sub>, | *: { INC ( r, z ), JZDEC ( r, z<sub>true</sub>, z<sub>false</sub>) } | ||
* प्रोग्राम मशीन, प्रोग्राम [[कंप्यूटर]], नाम मिन्स्की (1967) ने मॉडल को दिया क्योंकि, | * प्रोग्राम मशीन, प्रोग्राम [[कंप्यूटर]], नाम मिन्स्की (1967) ने मॉडल को दिया क्योंकि, कंप्यूटर की तरह इसके निर्देश क्रमिक रूप से आगे बढ़ते हैं इस प्रकार जब तक कि नियमबद्ध जम्प सफल नहीं होती है। (सामान्यतः) निर्देश सेट (1) का उपयोग करता है किन्तु इसे शेफर्सन-स्टर्गिस मॉडल के समान संवर्धित किया जा सकता है। JZDEC को अधिकांशतः भिन्न कर दिया जाता है: | ||
*: { INC ( r ), DEC ( r ), JZ ( r, z<sub>true</sub> )} | *: { INC ( r ), DEC ( r ), JZ ( r, z<sub>true</sub> )} | ||
* अबेकस मशीन, नाम लैम्बेक (1961) ने मेल्ज़ाक (1961) मॉडल के सरलीकरण के लिए दिया था, और बूलोस-बर्गेस-जेफरी (2002) इसे क्या कहते हैं। मिन्स्की (1961) मॉडल के | * अबेकस मशीन, नाम लैम्बेक (1961) ने मेल्ज़ाक (1961) मॉडल के सरलीकरण के लिए दिया था, और बूलोस-बर्गेस-जेफरी (2002) इसे क्या कहते हैं। मिन्स्की (1961) मॉडल के विधि से अगले निर्देश को निर्दिष्ट करने के लिए निर्देश सेट (1) का उपयोग करता है किन्तु अतिरिक्त मापदंड z के साथ; | ||
*: { INC ( r, z ), JZDEC (r, z<sub>true</sub>, | *: { INC ( r, z ), JZDEC (r, z<sub>true</sub>, z<sub>false</sub> ) } | ||
* लैम्बेक मशीन, | * लैम्बेक मशीन, वैकल्पिक नाम बूलोस-बर्गेस-जेफरी (2002) ने अबेकस मशीन को दिया था। अगले निर्देश को निर्दिष्ट करने के लिए अतिरिक्त मापदंड के साथ निर्देश सेट (1-कम) का उपयोग करता है: | ||
*: { INC ( r, z ), JZDEC ( r, z<sub>true</sub>, | *: { INC ( r, z ), JZDEC ( r, z<sub>true</sub>, z<sub>false</sub> ) } | ||
* उत्तराधिकारी मशीन, क्योंकि यह 'उत्तराधिकारी ऑपरेशन' का उपयोग करती है, और पीनो स्वयंसिद्धों से | * उत्तराधिकारी मशीन, क्योंकि यह 'उत्तराधिकारी ऑपरेशन' का उपयोग करती है, और पीनो स्वयंसिद्धों से अधिक मिलती-जुलती है। उत्तराधिकारी रैम मॉडल के लिए आधार के रूप में उपयोग किया जाता है। उदाहरण के लिए निर्देश सेट (2) का उपयोग करता है। शॉनहेज को उनके RAM0 और RAM1 मॉडल के आधार के रूप में, जो उनके [[ सूचक मशीन |सूचक मशीन]] SMM मॉडल की ओर ले जाता है, वैन एम्डे बोस (1990) में भी संक्षेप में चर्चा की गई है: | ||
*: { | *: {CLR (r), INC (r), JE (r)।<sub>j</sub>, r<sub>k</sub>, z ) } | ||
* एल्गॉट-रॉबिन्सन मॉडल, उनके आरएएसपी मॉडल (1964) को परिभाषित करने के लिए उपयोग किया जाता है। इस मॉडल को प्रारंभ में | * एल्गॉट-रॉबिन्सन मॉडल, उनके आरएएसपी मॉडल (1964) को परिभाषित करने के लिए उपयोग किया जाता है। इस मॉडल को प्रारंभ में रिक्त रजिस्टर की आवश्यकता होती है (उदाहरण के लिए [r0] =0)। (उन्होंने इंडेक्स रजिस्टर के रूप में उपयोग करने के लिए अतिरिक्त रजिस्टर का उपयोग करके अप्रत्यक्ष संबोधन के साथ उसी मॉडल को संवर्धित किया।) | ||
*: { | *: { INC (r), CPY (r<sub>s</sub>, r<sub>d</sub> ), JE (r<sub>j</sub>, r<sub>k</sub>, z ) } | ||
* अन्य काउंटर मशीनें: मिन्स्की (1967) दर्शाता है कि इस आलेख के मुख्य पैराग्राफ में वर्णित उपलब्ध निर्देशों के सुपरसेट से तीन बेस मॉडल (प्रोग्राम/मिन्स्की/लैम्बेक-अबेकस, उत्तराधिकारी, और एल्गॉट-रॉबिन्सन) कैसे बनाया जाए। मेल्ज़ाक (1961) मॉडल उपरोक्त से | * अन्य काउंटर मशीनें: मिन्स्की (1967) दर्शाता है कि इस आलेख के मुख्य पैराग्राफ में वर्णित उपलब्ध निर्देशों के सुपरसेट से तीन बेस मॉडल (प्रोग्राम/मिन्स्की/लैम्बेक-अबेकस, उत्तराधिकारी, और एल्गॉट-रॉबिन्सन) कैसे बनाया जाए। मेल्ज़ाक (1961) मॉडल उपरोक्त से अधिक भिन्न है क्योंकि इसमें 'वृद्धि' और 'घटाना' के अतिरिक्त 'जोड़' और 'घटाना' सम्मिलित है। मिन्स्की (1961, 1967) के प्रमाण कि ट्यूरिंग समतुल्यता के लिए एकल रजिस्टर पर्याप्त होगा, गणना का प्रतिनिधित्व करने वाले रजिस्टर में गोडेल संख्या को एन्कोड और डीकोड करने के लिए दो निर्देशों {मल्टीप्लाई K, और डीआईवी K} की आवश्यकता होती है। इस प्रकार मिन्स्की दर्शाता है कि यदि दो या दो से अधिक रजिस्टर उपलब्ध हैं तो सरल INC, DEC आदि पर्याप्त हैं (किन्तु [[ट्यूरिंग पूर्णता]] प्रदर्शित करने के लिए गोडेल संख्या अभी भी आवश्यक है; एल्गॉट-रॉबिन्सन 1964 में भी प्रदर्शित किया गया है)। | ||
== | == फार्मल परिभाषा == | ||
एक काउंटर मशीन में निम्न | एक काउंटर मशीन में निम्न सम्मिलित होते हैं: | ||
# लेबल रहित पूर्णांक-मूल्यवान रजिस्टर: रजिस्टरों का | # लेबल रहित पूर्णांक-मूल्यवान रजिस्टर: रजिस्टरों का सीमित (या कुछ मॉडलों में अनंत) सेट ''r''<sub>0</sub>... r<sub>''n''</sub> जिनमें से प्रत्येक किसी ऋणात्मक पूर्णांक (0, 1, 2, ... - अर्थात असीमित) को धारण कर सकता है। इस प्रकार रजिस्टर अपना अंकगणित स्वयं करते हैं; या अधिक विशेष रजिस्टर हो भी सकते हैं और नहीं भी, जैसे संचायक (इस पर अधिक जानकारी के लिए [[रैंडम-एक्सेस मशीन]] देखें)। | ||
# एक | # एक स्तर रजिस्टर जो निष्पादित किए जाने वाले वर्तमान निर्देश को संग्रहीत/पहचानता है। यह रजिस्टर परिमित है और उपरोक्त रजिस्टरों से भिन्न है; इस प्रकार काउंटर मशीन मॉडल [[हार्वर्ड वास्तुकला|हार्वर्ड आर्किटेक्चर]] का उदाहरण है | ||
# लेबल किए गए, अनुक्रमिक निर्देशों की सूची: निर्देशों की | # लेबल किए गए, अनुक्रमिक निर्देशों की सूची: निर्देशों की सीमित सूची ''I''<sub>0</sub>... ''I''<sub>''m''</sub>. प्रोग्राम स्टोर (परिमित स्तर मशीन के निर्देश) रजिस्टरों के समान भौतिक स्थान पर नहीं है। सामान्यतः, किन्तु सदैव नहीं, [[कंप्यूटर प्रोग्राम]] की तरह निर्देश अनुक्रमिक क्रम में सूचीबद्ध होते हैं; जब तक कोई जम्प सफल नहीं होती है, डिफ़ॉल्ट अनुक्रम संख्यात्मक क्रम में जारी रहता है। इस प्रकार सूची में प्रत्येक निर्देश (बहुत) छोटे सेट से है, किन्तु इस सेट में अप्रत्यक्ष सम्मिलित नहीं है। ऐतिहासिक रूप से अधिकांश मॉडलों ने इस सेट से अपने निर्देश प्राप्त किए: | ||
:: {वृद्धि ( | :: {वृद्धि (r), कमी (r), स्पष्ट (r); कॉपी (r<sub>j</sub>,r<sub>k</sub>), यदि r=0 की कंटेंट है तो नियमबद्ध जम्प, यदि r की कंटेंट है तो नियमबद्ध r<sub>j</sub>=r<sub>k</sub>, नियमबद्ध जम्प, हॉल्ट } | ||
:: | |||
: कुछ मॉडलों ने या तो उपरोक्त में से कुछ को बिना- | : कुछ मॉडलों ने या तो उपरोक्त में से कुछ को बिना-मापदंड निर्देशों में परमाणुकृत कर दिया है, या उन्हें ही निर्देश में जोड़ दिया है जैसे कि नियमबद्ध जम्प-यदि-शून्य JZ (r, Z) से पहले डिक्रीमेंट निर्देशों के परमाणुकरण या सुविधाजनक निर्देशों को सम्मिलित करने से वैचारिक पावर में कोई परिवर्तन नहीं होता है, क्योंकि संस्करण में किसी भी प्रोग्राम को सीधे दूसरे में अनुवादित किया जा सकता है। | ||
:: पूरक [[रजिस्टर-मशीन मॉडल]] में वैकल्पिक निर्देश-सेट पर चर्चा की गई है। | :: पूरक [[रजिस्टर-मशीन मॉडल]] में वैकल्पिक निर्देश-सेट पर चर्चा की गई है। | ||
उदाहरण: रजिस्टर #2 से #3 तक गणना कॉपी करें | |||
यह उदाहरण दिखाता है कि तीन और उपयोगी निर्देश कैसे बनाएं: स्पष्ट, | |||
* | यह उदाहरण दिखाता है कि तीन और उपयोगी निर्देश कैसे बनाएं: स्पष्ट, नियमबद्ध जंप और कॉपी। | ||
* | * CLR (J): रजिस्टर r<sub>j</sub> की कंटेंट स्पष्ट करें शून्य करने के लिए. | ||
* | * J (Z): अप्रतिबंध निर्देश I<sub>z</sub> पर जाएं. | ||
* CPY (S, d): स्रोत रजिस्टर r<sub>s</sub> की कंटेंट की प्रतिलिपि बनाएँ गंतव्य रजिस्टर r<sub>d</sub> के लिए. (वन-इंस्ट्रक्शन सेट कंप्यूटर या ट्रांसपोर्ट ट्रिगर आर्किटेक्चर देखें) | |||
पश्चात् में r<sub>s</sub> इसमें इसकी मूल गणना सम्मिलित होगी (MOVE के विपरीत जो स्रोत रजिस्टर को रिक्त कर देता है, अर्थात इसे शून्य पर स्पष्ट कर देता है)। | |||
मूल सेट (1) का उपयोग यहां परिभाषित अनुसार किया गया है: | मूल सेट (1) का उपयोग यहां परिभाषित अनुसार किया गया है: | ||
{|class="wikitable" | {|class="wikitable" | ||
|- style="background-color:#C0C0C0;font-size:9pt;font-weight:bold" | |- style="background-color:#C0C0C0;font-size:9pt;font-weight:bold" | ||
! width="54.6" Height="12" | | ! width="54.6" Height="12" | निर्देश | ||
! width="163.2" | | ! width="163.2" | रजिस्टर "j" पर प्रभाव | ||
! width="240.6" | | ! width="240.6" | निर्देश काउंटर रजिस्टर आईसीआर पर प्रभाव | ||
! width="248.4" | | ! width="248.4" | सारांश | ||
|- style="font-size:9pt" | |- style="font-size:9pt" | ||
| Height="11.4" valign="bottom" | INC ( j ) | | Height="11.4" valign="bottom" | INC ( j ) | ||
| align="center" valign="bottom" | [j] +1 → j | | align="center" valign="bottom" | [j] +1 → j | ||
| align="center" valign="bottom" | [IC] +1 → IC | | align="center" valign="bottom" | [IC] +1 → IC | ||
| align="center" valign="bottom" | | | align="center" valign="bottom" | रजिस्टर j की कंटेंट में वृद्धि; अगले निर्देश | ||
|- style="font-size:9pt" | |- style="font-size:9pt" | ||
| Height="11.4" valign="bottom" | DEC ( j ) | | Height="11.4" valign="bottom" | DEC ( j ) | ||
| align="center" valign="bottom" | [j] | | align="center" valign="bottom" | [j] -1 → j | ||
| align="center" valign="bottom" | [IC] +1 → IC | | align="center" valign="bottom" | [IC] +1 → IC | ||
| align="center" valign="bottom" | | | align="center" valign="bottom" | रजिस्टर j की घटी हुई कंटेंट; अगले निर्देश | ||
|- style="font-size:9pt" | |- style="font-size:9pt" | ||
| Height="11.4" valign="bottom" | JZ ( j, z) | | Height="11.4" valign="bottom" | JZ ( j, z) | ||
| align="center" valign="bottom" | | | align="center" valign="bottom" | | ||
| align="center" valign="bottom" | IF [j] = 0 THEN I<sub>z</sub> → IC ELSE [IC] +1 → IC | | align="center" valign="bottom" | IF [j] = 0 THEN I<sub>z</sub> → IC ELSE [IC] +1 → IC | ||
| align="center" valign="bottom" | | | align="center" valign="bottom" | यदि रजिस्टर की कंटेंट j=0 है तो निर्देश z अन्यथा अगला निर्देश | ||
|- style="font-size:9pt" | |- style="font-size:9pt" | ||
| Height="11.4" valign="bottom" | HALT | | Height="11.4" valign="bottom" | HALT | ||
| Line 89: | Line 91: | ||
| align="center" valign="bottom" | | | align="center" valign="bottom" | | ||
|} | |} | ||
=== प्रारंभिक नियम === | |||
प्रारंभ में, रजिस्टर #2 में 2 सम्मिलित है। रजिस्टर #0, #1 और #3 रिक्त हैं (जिनमें 0 है)। रजिस्टर #0 पूरी गणना के समय अपरिवर्तित रहता है क्योंकि इसका उपयोग अप्रतिबंध जम्प के लिए किया जाता है। रजिस्टर #1 स्क्रैच पैड है। प्रोग्राम निर्देश 1 से प्रारंभ होता है। | |||