Jump to content

Модель исполнения

В вычислительной технике язык программирования состоит из синтаксиса и модели выполнения . Модель выполнения определяет поведение элементов языка. Применяя модель выполнения, можно получить поведение программы , написанной на этом языке программирования. Например, когда программист «читает» код, он мысленно просматривает, что делает каждая строка кода. По сути, они моделируют поведение внутри своего разума. Программист применяет модель выполнения к коду, что приводит к поведению кода.

единиц работы (указанных синтаксисом программы) язык программирования имеет модель выполнения, которая определяет способ планирования выполнения Каждый . Подробные примеры спецификации моделей выполнения нескольких популярных языков включают Python , [1] модель выполнения языка программирования Unified Parallel C (UPC), [2] обсуждение различных классов модели выполнения, например, для императивных и функциональных языков , [3] и статья, в которой обсуждаются модели выполнения для реального времени . встроенных языков [4]

Подробности модели исполнения [ править ]

Операционная семантика — это один из методов определения модели выполнения языка. Наблюдаемое поведение работающей программы должно соответствовать поведению, полученному из операционной семантики (которая определяет модель выполнения языка).

Модель выполнения охватывает такие вещи, как, например, что такое неделимая единица работы и каковы ограничения на порядок, в котором могут выполняться эти единицы работы. Например, операция сложения является неделимой единицей работы во многих языках, а в последовательных языках такие единицы работы должны выполняться одна за другой.

Чтобы проиллюстрировать это, рассмотрим язык программирования C , описанный в книге Кернигана и Ричи. [5] В C есть концепция, называемая оператором. Спецификация языка определяет оператор как фрагмент синтаксиса, заканчивающийся знаком «;». В спецификации языка говорится, что «выполнение программы выполняется один оператор за другим, последовательно». Эти слова: «выполнение программы последовательно выполняется один оператор за другим» — это часть модели выполнения C. Эти слова говорят нам, что операторы являются неделимыми единицами работы и что они выполняются в том же порядке, что и их синтаксический порядок. появление в коде (за исключением случаев, когда оператор управления, такой как IF или FOR, изменяет порядок). Утверждая, что «выполнение программы выполняется один оператор за другим, последовательно», модель программирования устанавливает ограничения на порядок выполнения единиц работы.

Язык C на самом деле имеет дополнительный уровень модели выполнения, который представляет собой порядок приоритета. Порядок приоритета устанавливает правила порядка операций внутри одного оператора. Порядок приоритета можно рассматривать как установление ограничений на выполнение единиц работы, находящихся в пределах одного оператора. Так, ";" и «IF» и «WHILE» охватывают ограничения на порядок операторов, а порядок приоритета охватывает ограничения на работу внутри оператора. Следовательно, эти части спецификации языка C также являются частью модели выполнения языка C.

Модели выполнения также могут существовать независимо от языков программирования, примерами которых могут быть библиотека POSIX Threads и модель программирования Map-Reduce Hadoop . Реализация модели выполнения может осуществляться через компилятор или интерпретатор и часто включает в себя систему времени выполнения .

Реализация модели выполнения контролирует порядок выполнения работы во время выполнения. В некоторых ситуациях этот порядок может быть выбран заранее или может быть определен динамически по мере выполнения. Большинство моделей исполнения допускают и то и другое в разной степени. Например, язык C фиксирует порядок работы внутри оператора и порядок всех операторов, за исключением тех, которые включают оператор IF или форму оператора цикла. Следовательно, большая часть порядка выполнения может быть выбрана статически до начала выполнения, но небольшая часть должна выбираться динамически по мере выполнения.

Статический выбор чаще всего реализуется внутри компилятора , и в этом случае порядок работы определяется порядком, в котором инструкции помещаются в исполняемый двоичный файл. языка Динамический выбор затем будет реализован внутри системы времени выполнения . Система времени выполнения может быть библиотекой, которая вызывается инструкциями, вставленными компилятором , или система времени выполнения может быть встроена непосредственно в исполняемый файл , например, путем вставки инструкций ветвления, которые делают динамический выбор того, какую работу выполнять дальше.

Однако интерпретатор также может быть создан для любого языка, и в этом случае все решения о порядке выполнения являются динамическими. Интерпретатор . можно рассматривать как часть переводчика и часть реализации модели выполнения

Модель исполнения на языке ассемблера и реализация микроархитектуры помощью с

Языки ассемблера также имеют модели выполнения, как и любой другой язык. Такая модель выполнения реализуется микроархитектурой ЦП. Например, и пятиэтапный конвейер с упорядоченным выполнением, и большой вышедший из строя ЦП реализуют одну и ту же модель выполнения на языке ассемблера. Модель выполнения является определением поведения, поэтому все реализации, будь то упорядоченные или внеочередные, интерпретируемые, JIT-кодированные и т. д., должны давать один и тот же результат, и этот результат определяется моделью выполнения. .

Модели параллельного выполнения

В современную эпоху параллельное программирование становится все более важной темой. Модели параллельного выполнения, как правило, сложны, поскольку включают в себя несколько временных рамок. Модели параллельного выполнения обязательно включают в себя поведение конструкций синхронизации . Конструкция синхронизации позволяет установить порядок между действиями на одной временной шкале относительно действий на другой временной шкале.

Например, распространенной конструкцией синхронизации является блокировка. Рассмотрим одну временную шкалу. На временной шкале есть точка, в которой выполняется конструкция синхронизации «получение владения блокировкой». В потоках Posix это будет pthread_mutex_lock(&myMutex). В Java это будет lock.lock(). В обоих случаях временная шкала называется потоком. Модели выполнения C и Java являются последовательными, и они утверждают, что на временной шкале есть действия, которые происходят до вызова «получения владения блокировкой», и действия, которые происходят после вызова. Аналогично существует операция «отказаться от владения замком». В C это будет pthread_mutex_unlock(&myMutex). В Java это будет lock.unlock(). Опять же, модели выполнения C и Java определяют, что одна группа операторов выполняется до того, как право собственности на блокировку будет передано, а другая группа операторов будет выполнена после того, как право собственности на блокировку будет передано.

Теперь рассмотрим случай двух временных шкал, также известных как два потока. Один поток, назовем его потоком A, выполняет несколько операторов, назовем их операторами A-pre-gain-lock. Затем поток A выполняет «получение владения блокировкой», затем поток A выполняет операторы A-post-gain-lock, которые появляются после того, как A получает право владения блокировкой. Наконец, поток A выполняет «отказ от владения блокировкой». Затем поток A выполняет операторы A-post-giveup-lock.

Второй поток, назовем его потоком B, выполняет некоторые операторы, назовем их операторами B-pre-lock. Затем поток B выполняет «получение владения блокировкой», затем поток B выполняет операторы B-post-lock, которые выполняются после того, как B получает право владения блокировкой.

Теперь мы можем описать модель параллельного выполнения конструкции синхронизации «получение владения блокировкой» и «отказ от владения блокировкой». Модель исполнения такая:

«В случае, если владение блокировкой переходит от потока A к потоку B, операторы A-post-gain-lock предшествуют операторам B-post-gain-lock».

Сложность возникает из-за того, что модель выполнения не имеет каких-либо средств для выполнения «отказаться от владения блокировкой», чтобы иметь какое-либо влияние на то, какое выполнение «получения владения блокировкой» в какой-либо другой временной шкале (потоке) последует. . Очень часто только определенные передачи дают действительные результаты. Таким образом, программист должен продумать все возможные комбинации: один поток отдает блокировку, а другой получает ее следующей, и убедиться, что их код допускает только допустимые комбинации.

Единственный эффект заключается в том, что операторы A-post-gain-lock предшествуют операторам B-post-gain-lock. Никакого другого эффекта не происходит, и нельзя полагаться на какой-либо другой относительный порядок. В частности, A-пост-сдача-блокировка и B-пост-блокировка усиления не имеют определенного относительного порядка , что удивляет многих людей. Но поток A мог быть заменен после отказа от владения, поэтому операторы A-post-give-up-lock могут выполняться спустя много времени после завершения многих операторов B-post-gain-lock. Это одна из возможностей, которую необходимо учитывать при проектировании блокировок, и она иллюстрирует, почему многопоточное программирование затруднено.

Современные параллельные языки имеют гораздо более простые в использовании модели выполнения. Модель потоков была одной из первоначальных моделей параллельного выполнения, что может объяснить, почему она сохранилась, несмотря на сложность использования.

См. также [ править ]

Ссылки [ править ]

  1. ^ «Документация Python: модель выполнения» .
  2. ^ «Особенности языка UPC» .
  3. ^ Кардосо, JMP; Диниз, ПК (2011). Языки программирования и модели выполнения . Спрингер США. ISBN  9780387096711 .
  4. ^ ПЕЛЛИЦЦОНИ, Р.; БЕТТИ, Э.; БАК, С.; ЯО, Г.; КРИСВЕЛЛ, Дж.; КАКАМО М. и КЕГЛИ Р. (2011). «Модель прогнозируемого выполнения для встраиваемых систем на основе COTS» (PDF) . Симпозиум по технологиям реального времени и встраиваемым технологиям и приложениям . IEEE. Архивировано из оригинала (PDF) 12 августа 2017 г. Проверено 20 мая 2015 г.
  5. ^ Керниган, Брайан В .; Деннис М. Ричи (февраль 1978 г.). Язык программирования C (1-е изд.). Энглвуд Клиффс, Нью-Джерси : Прентис Холл . ISBN  0-13-110163-3 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8e836f31d99a4f439e8bb22bd0949bee__1711156800
URL1:https://arc.ask3.ru/arc/aa/8e/ee/8e836f31d99a4f439e8bb22bd0949bee.html
Заголовок, (Title) документа по адресу, URL1:
Execution model - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)