Кіріспе

Теориялық компьютер есептеу моделін анықтау үшін қолданылады. Компьютер ғылымында абстрактілі машина – компьютерлік жүйенің қалай жұмыс істейтінін егжей-тегжейлі және нақты талдауға мүмкіндік беретін теориялық модель. Ол математикалық функцияға ұқсас, себебі ол кіріс мәліметтерін қабылдайды және алдын ала белгіленген ережелер бойынша шығыс мәліметтерін тудырады. Абстрактілі машиналар нақты машиналардан өзгеше, олар аппараттық құралдардан тәуелсіз дұрыс жұмыс істеуі тиіс. Абстрактілі машиналар "машиналар" деп аталады, өйткені олар бағдарламаларды қадамдық түрде орындауға мүмкіндік береді; ал "абстрактілі" деп аталуына себебі, олар нақты (аппараттық) машиналардың көптеген ерекшеліктерін ескермейді. Типтік абстрактілі машина кіріс, шығыс және біріншісін екіншісіне айналдыру үшін қолданылатын рұқсат етілген операциялар жиынтығынан тұрады. Олар таза теориялық мақсаттар үшін де, сондай-ақ нақты әлемдегі компьютерлік жүйелердің моделі ретінде де қолданылуы мүмкін.

Жіктеу

Абстрактіл машиналар, әдетте, бір мезгілде орындай алатын операциялардың санына қарай екі түрге бөлінеді: детерминистік абстрактіл машиналар және детерминистік емес абстрактіл машиналар. Керісінше, детерминистік емес абстрактіл машина бірдей кіріс үшін әртүрлі орындалуларда әртүрлі нәтижелер бере алады. Детерминистік емес алгоритмдер, детерминистік тәсілді қолдану арқылы нақты шешім табу қиын немесе қымбат болған жағдайларда, шамамен жауап алуға көмектеседі. Мысалы, Тьюринг машиналары компьютерлік ғылымдағы ең негізгі абстрактіл машиналардың бірі болып табылады. Бұл қарапайым Тьюринг машинасы детерминистік болып табылады; алайда, бірдей кіріс бойынша бірнеше амал орындай алатын детерминистік емес Тьюринг машиналары да құруға болады. Аппараттық құралдарда іске асыру: Абстрактіл машинаны аппараттық құралдарға тікелей іске асыру – жад, арифметикалық және логикалық тізбектер, шиналар сияқты физикалық құрылғыларды пайдаланып, машина тілі бағдарламалау тілімен сәйкес келетін физикалық машинаны құру мәселесі. Мұндай машина құрастырылғаннан кейін оны өзгерту өте қиын. Бағдарламалық жасақтама арқылы симуляция: Бағдарламалық жасақтамамен абстрактіл машинаны іске асыру абстрактіл машинаға қажетті дерек құрылымдары мен алгоритмдерді іске асыру үшін басқа тілде бағдарлама жазуды білдіреді. Бұл ең жоғары икемділікті қамтамасыз етеді, себебі абстрактіл машина құрылымдарын іске асыратын бағдарламаларды оңай өзгертуге болады. Микрофирма арқылы эмуляция: Микрофирманы іске асыру аппараттық және бағдарламалық жасақтаманы іске асырудың арасында орналасады. Ол абстрактіл машиналар үшін дерек құрылымдары мен алгоритмдердің микрокодтық симуляцияларынан тұрады.

Бағдарламалау тілінің іске асырылуы

Абстрактілі машина – интуитивті түрде, физикалық компьютер идеясының абстракциясы ғана. Нақты орындау үшін алгоритмдер бағдарламалау тілі ұсынатын құрылымдарды пайдалана отырып, дұрыс формальдануы керек. Бұл орындалатын алгоритмдерді бағдарламалау тілінің нұсқауларын қолдану арқылы білдіру қажеттігін білдіреді. Цифрлық компьютерлерде стек – бастапқы мән енгізілгеннен кейін тек оң бүтін сандарды санауға қабілетті мекенжай тіркегіші бар жад бөлімі. Стектің мекенжай тіркегіші стек көрсеткіші деп аталады, өйткені оның мәні әрқашан стектегі ең жоғарғы элементті көрсетеді. Бағдарлама – келесі орындалатын нұсқауды көрсететін стек көрсеткіші бар нұсқаулар тізбегінен тұрады. Нұсқау орындалғаннан кейін стек көрсеткіші алға жылжытылады. Абстрактілі машинаның осы негізгі басқару механизмі орындау циклы деп те аталады. Smalltalk 80 (1980), Self (1989) және Java (1994) – осы іске асырудың мысалдары. Тиісті абстрактілі машинаны пайдаланудың екі артықшылығы бар: орындау жылдамдығының жоғарылауы және тасымалдағыштығының жақсаруы. Snobol4 және ML/I – машинадан тәуелсіздікке қол жеткізу үшін абстрактілі машинаны пайдаланатын ерте тізбектік өңдеу тілдерінің екі маңызды мысалы. Мысалы, G машинасы (1984), Krivine машинасы (1985) және Үш нұсқау машинасы (1986), онда функция аргументтері тек қажет болған жағдайда және ең көп дегенде бір рет есептеледі. Мұның бір себебі – қатаң бағалауды тиімді жүзеге асыру қазір жақсы түсінілгендіктен, абстрактілі машинаның қажеттілігі азайды.

Бастапқы деректерді өңдеу

Абстрактілі машинада жолдар мен бүтін сандар сияқты қарапайым дерек түрлерін өңдеуге арналған операциялар болуы керек.

Реттілікті басқару

"Тізбекті басқару" операциялары мен құрылымдары бағдарламалық нұсқаулардың орындалу ретін басқаруға мүмкіндік береді. Белгілі бір шарттар орындалғанда бағдарламаның әдеттегі тізбекті орындалуын өзгерту қажет.

Деректер беруді бақылау

Деректерді беру операциялары операндар мен деректердің жадтан интерпретаторға және кері бағытта қалай тасымалданатынын басқару үшін пайдаланылады. Бұл операциялар дерек сақтау орнынан операндарды сақтау және алу тәртібімен айналысады.

Жадты басқару

Жадты басқару деректерді және қосымшаларды орналастыру үшін жадта жүзеге асылатын операциялармен айналысады. Абстрактілі машинада деректер мен бағдарламалар шексіз сақталуы мүмкін, ал бағдарламалау тілдерінде жадты күрделі механизм арқылы бөлуге немесе босатуға болады.

Иерархиялар

Көбінесе абстрактілі машиналар иерархиясы қолданылады, онда әрбір машина тікелей төменгі деңгейдің мүмкіндіктерін пайдаланады және тікелей жоғарыдағы деңгейге қажетті қосымша мүмкіндіктерді қосады. Физикалық электрондық құрылғылармен құрастырылған аппараттық компьютер ең төменгі деңгейде орналастырылуы мүмкін. Осы деңгейден жоғары абстрактілі микропрограммаланған машина деңгейі енгізілуі мүмкін. Операциялық жүйе ұсынатын, машина тілінде жазылған бағдарламамен іске асырылатын абстрактілі машина, аппараттық құралдардың тікелей үстінде (немесе егер құрылғылық бағдарламалық қамтамасыз ету деңгейі болмаса, тікелей аппараттық құралдардың үстінде) орналасқан. Бір жағынан, операциялық жүйе физикалық машинада қолжетімсіз жоғары деңгейдегі бастауыш элементтерді (мысалы, файлдармен жұмыс істейтін бастауыш элементтерді) ұсыну арқылы физикалық машинаның мүмкіндіктерін кеңейтеді. Хост машинасы операциялық жүйе ұсынатын абстрактілі машинадан құралады, онда Java виртуалды машинасы және оның байт-коды сияқты аралық машинаны пайдалана отырып, жоғары деңгейдегі бағдарламалау тілі іске асырылады. Жоғары деңгейдегі тіл үшін (мысалы, Java) абстрактілі машинаның деңгейі әдетте иерархияның соңғы деңгейі емес. Осы кезде қосымша қызметтер ұсынатын бір немесе бірнеше қосымша енгізілуі мүмкін. Мысалы, веб-байланысты (байланыс хаттамалары немесе HTML кодын көрсету) жүзеге асыру үшін "веб-машина" деңгейі қосылуы мүмкін. Осыдан жоғары орналасқан "Веб-қызмет" деңгейі веб-қызметтердің өзара әрекеттесу протоколдары және қатысатын процестердің мінез-құлқы тұрғысынан байланысуына қажетті мүмкіндіктерді қамтамасыз етеді. Бұл деңгейде веб-қызметтерге негізделген "бизнес-процестердің" мінез-құлқын анықтайтын жаңа тілдер жасалуы мүмкін (мысалы, Бизнес-процестерді орындау тілі). Соңында, ең жоғары деңгейде (мысалы, электрондық сауда) арнайы қолданбаны табуға болады, оның өте нақты және шектеулі функционалдығы бар.