Введение
Теоретический компьютер, используемый для определения модели вычислений.
В информатике абстрактная машина — это теоретическая модель, позволяющая провести детальный и точный анализ функционирования компьютерной системы. Она аналогична математической функции, поскольку принимает входные данные и выдает результаты на основе предопределенных правил. Абстрактные машины отличаются от реальных машин тем, что должны работать корректно и независимо от аппаратного обеспечения. Абстрактные машины называются "машинами", поскольку обеспечивают пошаговое выполнение программ; они "абстрактны", потому что игнорируют многие аспекты реальных (аппаратных) машин. Типичная абстрактная машина определяется через входные данные, выходные данные и набор допустимых операций, преобразующих первое во второе. Они могут использоваться как в чисто теоретических целях, так и в качестве моделей для реальных компьютерных систем.
Классификация
Абстрактные машины обычно подразделяются на два типа в зависимости от количества операций, которые они могут выполнять одновременно в любой момент времени: детерминированные абстрактные машины и недетерминированные абстрактные машины. В отличие от этого, недетерминированная абстрактная машина может выдавать различные результаты для одного и того же входного набора данных при разных запусках. Недетерминированные алгоритмы полезны для получения приближенных ответов, когда получение точного решения детерминированным способом затруднительно или обходится дорого. Машины Тьюринга, например, являются одними из самых фундаментальных абстрактных машин в информатике. Базовая машина Тьюринга является детерминированной; однако также можно построить недетерминированные машины Тьюринга, способные выполнять несколько действий для одного и того же входного набора данных. Реализация в аппаратном обеспечении: прямая реализация абстрактной машины в аппаратном обеспечении заключается в использовании физических устройств, таких как память, арифметические и логические схемы, шины и т. д., для создания физической машины, язык которой совпадает с языком программирования. После создания такую машину будет практически невозможно изменить. Реализация с помощью программного обеспечения: реализация абстрактной машины с помощью программного обеспечения предполагает написание программ на другом языке для реализации структур данных и алгоритмов, необходимых абстрактной машине. Это обеспечивает максимальную гибкость, поскольку программы, реализующие абстрактные конструкции машин, можно легко изменять. Эмуляция с помощью прошивки: реализация на прошивке занимает промежуточное положение между аппаратной и программной реализациями. Она состоит из микрокодовых симуляций структур данных и алгоритмов для абстрактных машин.
Внедрение языка программирования
Абстрактная машина, интуитивно, представляет собой абстракцию идеи физического компьютера. Для фактического выполнения алгоритмы должны быть должным образом формализованы с использованием конструкций, предоставляемых языком программирования. Это подразумевает, что алгоритмы, предназначенные для выполнения, должны быть выражены посредством инструкций языка программирования. В цифровых компьютерах стек – это просто блок памяти с регистром адреса, который может оперировать только положительными целыми числами (после загрузки в него начального значения). Регистр адреса стека известен как указатель стека, поскольку его значение всегда указывает на верхний элемент стека. Программа состоит из последовательности инструкций, а указатель стека указывает на следующую инструкцию для выполнения. После завершения инструкции указатель стека перемещается вперед. Этот фундаментальный механизм управления абстрактной машиной также известен как цикл исполнения. Smalltalk 80 (1980), Self (1989) и Java (1994) являются примерами такой реализации. Использование подходящей абстрактной машины дает два преимущества: повышение скорости выполнения и улучшенная переносимость. Snobol4 и ML/I – два заметных примера ранних языков обработки строк, использующих абстрактную машину для обеспечения машинной независимости, таких как G-машина (1984), машина Кривина (1985) и машина с тремя инструкциями (1986), в которых аргументы функций вычисляются только при необходимости и не более одного раза. Одна из причин этого заключается в том, что эффективная реализация строгой оценки теперь хорошо изучена, поэтому необходимость в абстрактной машине снизилась.
Обработка примитивных данных
Абстрактная машина должна содержать операции для работы с примитивными типами данных, такими как строки и целые числа.
Контроль последовательности
Операции и структуры для "управления последовательностью" позволяют контролировать поток выполнения программных инструкций. Когда выполняются определенные условия, необходимо изменять обычный последовательный порядок выполнения программы.
Контроль передачи данных
Операции передачи данных используются для управления способом транспортировки операндов и данных из памяти в интерпретатор и обратно. Эти операции определяют порядок сохранения и извлечения операндов из памяти.
Управление памятью
Управление памятью связано с операциями, выполняемыми в памяти для выделения данных и приложений. В абстрактной машине данные и программы могут храниться неограниченно долго, или, в случае языков программирования, память может выделяться или освобождаться с использованием более сложного механизма.
Иерархии
Часто используются иерархии абстрактных машин, в которых каждая машина использует функциональность уровня непосредственно ниже и добавляет собственную функциональность для соответствия уровню непосредственно выше. Компьютерное оборудование, построенное на физических электронных устройствах, может быть добавлено на самом базовом уровне. Над этим уровнем может быть представлен абстрактный уровень микропрограммной машины. Абстрактная машина, предоставляемая операционной системой и реализованная программой, написанной на машинном языке, располагается непосредственно над аппаратным обеспечением (или непосредственно над аппаратным обеспечением, если уровень прошивки отсутствует). С одной стороны, операционная система расширяет возможности физической машины, предоставляя примитивы более высокого уровня, недоступные на физической машине (например, примитивы для работы с файлами). Машина-хост формируется абстрактной машиной, предоставляемой операционной системой, на которой реализуется язык программирования высокого уровня с использованием промежуточной машины, такой как виртуальная машина Java и её байт-код. Уровень, предоставляемый абстрактной машиной для языка высокого уровня (например, Java), обычно не является конечным уровнем иерархии. На этом этапе могут быть введены одно или несколько приложений, предоставляющих дополнительные сервисы. Например, уровень "веб-машина" может быть добавлен для реализации функциональности, необходимой для обработки веб-коммуникаций (протоколы связи или представление HTML-кода). Уровень "веб-сервисов" расположен выше и обеспечивает функциональность, необходимую для взаимодействия веб-сервисов, как в отношении протоколов взаимодействия, так и поведения участвующих процессов. На этом уровне могут быть разработаны совершенно новые языки, определяющие поведение так называемых "бизнес-процессов", основанных на веб-сервисах (например, язык исполнения бизнес-процессов). Наконец, на верхнем уровне может находиться специализированное приложение (например, электронная коммерция) с очень специфической и ограниченной функциональностью.