В информатике, обмен данными между последовательными процессами (CSP ) - это формальный язык для описания шаблонов взаимодействия в параллельных системах. Это член семейства математических теорий параллелизма, известных как алгебры процессов или вычисления процессов, основанные на передаче сообщений через каналы. CSP оказал большое влияние на разработку языка программирования occam, а также на разработку таких языков программирования, как Limbo, RaftLib, Go,Crystal и Core.async.
Clojure CSP был впервые описан в статье 1978 года Тони Хоаром, но с тех пор претерпел существенные изменения. CSP практически применяется в промышленности в качестве инструмента для определения и проверки параллельных аспектов различных систем, таких как T9000 Transputer, а также безопасной системы электронной коммерции. Сама теория CSP также по-прежнему является предметом активных исследований, включая работу по увеличению диапазона ее практического применения (например, увеличение масштаба систем, которые можно легко анализировать).
Версия CSP, представленная в оригинальной статье Хоара 1978 года, была, по сути, языком параллельного программирования, а не исчислением процессов. Он имел существенно другой синтаксис , чем более поздние версии CSP, не обладал математически определенной семантикой и был неспособен представить неограниченный недетерминизм. Программы в исходном CSP были написаны как параллельная композиция из фиксированного числа последовательных процессов, взаимодействующих друг с другом строго посредством синхронной передачи сообщений. В отличие от более поздних версий CSP, каждому процессу было назначено явное имя, а источник или место назначения сообщения определялись путем указания имени предполагаемого процесса отправки или получения. Например, процесс
COPY = * [c: character; west? c → east! c]
многократно получает символ от процесса с именем west
и отправляет этот символ процессу с именем east
. Параллельная композиция
[запад :: РАЗБОР || X :: КОПИЯ || east :: ASSEMBLE]
назначает имена west
процессу DISASSEMBLE
, X
процессу COPY
, и восток
к процессу ASSEMBLE
и выполняет эти три процесса одновременно.
После публикации исходной версии CSP, Hoare, Stephen Brookes и А. У. Роско разработал и усовершенствовал теорию CSP в ее современной алгебраической форме. На подход, использованный при превращении CSP в алгебру процессов, повлияла работа Робина Милнера над Исчислением коммуникационных систем (CCS) и наоборот. Теоретическая версия CSP была первоначально представлена в статье Брукса, Хора и Роско 1984 года, а затем в книге Хора «Коммутируя последовательные процессы», которая была опубликована в 1985 году. В сентябре 2006 года эта книга все еще оставалась третьей по значимости. цитируется информатика ссылка на все времена согласно Citeseer (хотя и ненадежный источник из-за характера его выборки). Теория CSP претерпела несколько незначительных изменений с момента публикации книги Хоара. Большинство этих изменений было вызвано появлением автоматизированных инструментов для анализа и проверки процессов CSP. В книге Роско «Теория и практика параллелизма» описана эта новая версия CSP.
Ранним и важным применением CSP было его использование для спецификации и проверки элементов INMOS T9000 Transputer, сложного суперскалярного конвейерного процессора, предназначенного для поддержки больших -масштабная многопроцессорность. CSP использовался для проверки правильности как конвейера процессора, так и процессора виртуального канала, который управлял внешними коммуникациями для процессора.
Промышленное применение CSP в разработке программного обеспечения обычно сосредоточено на надежных и критичных с точки зрения безопасности системы. Например, Бременский институт безопасных систем и Daimler-Benz Aerospace смоделировали систему устранения неисправностей и интерфейс авионики (состоящий примерно из 23000 строк кода), предназначенные для использования на Международной космической станции в CSP, и проанализировали модель, чтобы подтвердить, что их конструкция свободна от тупиков и блокировок. Процесс моделирования и анализа позволил выявить ряд ошибок, которые было бы трудно обнаружить, используя только тестирование. Аналогичным образом Praxis High Integrity Systems применяла моделирование и анализ CSP во время разработки программного обеспечения (примерно 100 000 строк кода) для безопасного центра сертификации смарт-карт, чтобы убедиться, что их проект безопасен и свободен от тупиков. Praxis утверждает, что в системе гораздо меньше дефектов, чем в сопоставимых системах.
Поскольку CSP хорошо подходит для моделирования и анализа систем, которые включают сложные обмены сообщениями, его также применяли для проверки связи и безопасности протоколы. Ярким примером такого рода приложений является использование Лоу CSP и средства проверки уточнения FDR для обнаружения ранее неизвестной атаки на протокол аутентификации с открытым ключом Нидхема – Шредера, а затем для разработки скорректированного протокола, способного отразить атаку.
Как следует из названия, CSP позволяет описывать системы в терминах компонентных процессов, которые работают независимо и взаимодействуют друг с другом исключительно через обмен сообщениями. Однако «Последовательная» часть имени CSP теперь используется неправильно, поскольку современные CSP позволяют определять компонентные процессы и как последовательные процессы, и как параллельную композицию более примитивных процессов. Отношения между различными процессами и способ взаимодействия каждого процесса со своей средой описываются с помощью различных алгебраических операторов процессов. Используя этот алгебраический подход, можно легко построить довольно сложные описания процессов из нескольких примитивных элементов.
CSP предоставляет два класса примитивов в своей алгебре процессов:
CSP имеет широкий набор алгебраических операторов. Основными из них являются:
Один из архетипических примеров CSP - это абстрактное представление торгового автомата по продаже шоколада и его взаимодействия с человеком, желающим купить шоколад.. Этот торговый автомат может выполнять два разных события, «монета» и «шоколад», которые представляют собой внесение платежа и доставку шоколада соответственно. Автомат, требующий оплаты (только наличными) перед предложением шоколада, может быть записан как:
Человек, который может использовать монету или карту для совершения платежей, может быть смоделирован как:
Эти два процесса могут быть помещены в параллельно, чтобы они могли взаимодействовать друг с другом. Поведение составного процесса зависит от событий, по которым должны синхронизироваться два компонентных процесса. Таким образом,
тогда как, если бы синхронизация требовалась только для «монеты», мы получили бы
Если мы абстрагируем этот последний составной процесс, скрывая события «монета» и «карта», т.е.
мы получаем недетерминированный процесс
Это процесс, который либо предлагает событие «choc», а затем останавливается, либо просто s вершины. Другими словами, если мы рассматриваем абстракцию как внешний вид системы (например, кто-то, кто не видит решения, принятого этим человеком), появляется недетерминизм.
Синтаксис CSP определяет «законные» способы объединения процессов и событий. Пусть e будет событием, а X - набором событий. Тогда базовый синтаксис CSP можно определить как:
Обратите внимание, что в интересах краткости в приведенном выше синтаксисе отсутствует процесс, который представляет расхождение, а также различные операторы, такие как алфавитный па Параллельный, трубопроводный и индексированный выбор.
CSP пронизана несколькими различными формальной семантикой, которые определяют значение синтаксически правильных выражений CSP. Теория CSP включает взаимно согласованные денотационную семантику, алгебраическую семантику и операционную семантику.
Три основных денотационных модели CSP: модель следов, модель стабильных отказов и модель отказов / расхождений. Семантические сопоставления от выражений процессов к каждой из этих трех моделей обеспечивают денотационную семантику для CSP.
Модель трассировки определяет значение выражения процесса как набор последовательностей событий (трассировок), которые можно наблюдать за процессом выполнять. Например,
Более формально значение процесса P в модели следов определяется как так, что:
где - это множество всех возможных конечных последовательностей событий.
Модель стабильных отказов расширяет модель трассировки с помощью наборов отказов, которые представляют собой наборы событий , которым процесс может отказать выполнять. Отказ - это пара , состоящая из трассы s и набора отказов X, который идентифицирует события, которые процесс может отказаться после выполнения трассировки s. Наблюдаемое поведение процесса в модели стабильных отказов описывается парой . Например,
Модель отказов / расхождений далее расширяет модель отказов, чтобы dle расхождение. Семантика процесса в модели отказов / расхождений - это пара где определяется как набор всех трассировок, которые могут привести к расходящемуся поведению и .
За прошедшие годы был создан ряд инструментов для анализа и понимания систем, описанных с помощью CSP. Ранние реализации инструмента использовали различные машиночитаемые синтаксисы для CSP, что делало входные файлы, написанные для разных инструментов, несовместимыми. Тем не менее, большинство инструментов CSP теперь стандартизированы на машиночитаемом диалекте CSP, разработанном Брайаном Скаттергудом, иногда называемом CSP M. CSP M диалект CSP обладает формально определенной операционной семантикой, которая включает в себя встроенный язык функционального программирования.
. Наиболее известным инструментом CSP, вероятно, является Failures / Divergence. Уточнение 2 (FDR2 ), которое является коммерческим продуктом, разработанным Formal Systems (Europe) Ltd. FDR2 часто описывается как средство проверки модели, но технически является средством проверки уточнения в том смысле, что он преобразует два выражения процесса CSP в Системы помеченных переходов (LTS), а затем определяет, является ли один из процессов уточнением другого в рамках определенной семантической модели (трассировки, сбои или сбои / расхождения). FDR2 применяет различные алгоритмы сжатия пространства состояний к LTS процесса, чтобы уменьшить размер пространства состояний, которое необходимо исследовать во время проверки уточнения. На смену FDR2 пришла FDR3, полностью переписанная версия, включающая, помимо прочего, параллельное выполнение и встроенную проверку типов. Он выпущен Оксфордским университетом, который также выпустил FDR2 в период с 2008 по 2012 год.
Adelaide Refinement Checker (ARC) - это средство проверки уточнения CSP, разработанное группой формального моделирования и проверки на Университет Аделаиды. ARC отличается от FDR2 тем, что он внутренне представляет процессы CSP как упорядоченные двоичные диаграммы решений (OBDD), что устраняет проблему взрыва состояния явных представлений LTS, не требуя использования алгоритмов сжатия в пространстве состояний, таких как используемые в FDR2.
Проект ProB, который реализуется Институтом информатики, Университет Генриха Гейне, Дюссельдорф, изначально был создан для поддержки анализа спецификаций, построенных по методу B. Однако он также включает поддержку анализа процессов CSP как с помощью проверки уточнения, так и с помощью LTL проверки модели. ProB также можно использовать для проверки свойств объединенных спецификаций CSP и B. Аниматор ProBE CSP интегрирован в FDR3.
Инструментарий анализа процессов (PAT) - это инструмент анализа CSP, разработанный в Школе вычислительной техники Национального университета Сингапура. PAT может выполнять проверку уточнения, проверку модели LTL и моделирование процессов CSP и Timed CSP. Язык процессов PAT расширяет CSP за счет поддержки изменяемых общих переменных, асинхронной передачи сообщений и различных конструкций процессов, связанных со справедливостью и количественным временем, таких как крайний срок
и ожидание до
. Базовый принцип проектирования языка процессов PAT заключается в объединении языка спецификаций высокого уровня с процедурными программами (например, событие в PAT может быть последовательной программой или даже вызовом внешней библиотеки C #) для большей выразительности. Изменяемые общие переменные и асинхронные каналы обеспечивают удобный синтаксический сахар для хорошо известных шаблонов моделирования процессов, используемых в стандартном CSP. Синтаксис PAT аналогичен, но не идентичен CSP M. Принципиальные различия между синтаксисом PAT и стандартным CSP M заключаются в использовании точки с запятой для завершения выражений процесса, включении синтаксического сахара для переменных и присваиваний и использовании немного другого синтаксиса для внутреннего выбора и параллельной композиции..
VisualNets создает анимированные визуализации систем CSP на основе спецификаций и поддерживает синхронизированные CSP.
CSPsim - ленивый симулятор. Он не моделирует проверку CSP, но полезен для исследования очень больших (потенциально бесконечных) систем.
SyncStitch - это средство проверки уточнения CSP с интерактивной средой моделирования и анализа. Имеет графический редактор диаграмм переходов между состояниями. Пользователь может моделировать поведение процессов не только в виде выражений CSP, но и в виде диаграмм перехода состояний. Результаты проверки также отображаются графически в виде деревьев вычислений и могут быть проанализированы в интерактивном режиме с помощью периферийных средств проверки. В дополнение к проверкам уточнения он может выполнять проверку взаимоблокировки и проверку блокировки.
Несколько других языков спецификаций и формализмов были заимствованы или вдохновлены классическим бессрочным CSP, включая:
В той мере, в какой она связана с параллельными процессами, которые обмениваются сообщениями, модель актора в целом похожа на CSP. Однако эти две модели делают несколько принципиально разных вариантов в отношении предоставляемых ими примитивов: