Свобода вмешательства
В информатике — свобода от помех это метод доказательства частичной правильности параллельные программы с общими переменными. Логика Хоара была введена ранее доказывать корректность последовательных программ. В своей кандидатской диссертации [1] (и документы, вытекающие из него [2] [3] ) под руководством советника Дэвида Грайса , Сьюзен Овики расширил эту работу, чтобы применить ее к параллельным программам.
Параллельное программирование использовалось с середины 1960-х годов для кодирования операционных систем как наборов. параллельных процессов (см., в частности, Дейкстра. [4] ), но не было формальный механизм доказательства правильности. Рассуждения о чередующемся выполнении последовательность отдельных процессов была трудной, была подвержена ошибкам, и не масштабировался. Свобода вмешательства применяется к доказательствам, а не к последовательностям выполнения; показывает, что выполнение одного процесса не может повлиять на корректность доказательство другого процесса.
С помощью интерференции была доказана корректность ряда сложных параллельных программ. свобода, а свобода вмешательства составляет основу для большей части последующих работ по разработка параллельных программ с общими переменными и доказательство их корректности. Статья Овицкого-Гриса. Методика аксиоматического доказательства для параллельных программ I. [2] получил премию ACM 1977 года за лучшую работу по языкам программирования и системы. [5] [6]
Примечание. Лэмпорт [7] представляет аналогичную идею. Он пишет: «После написания первоначальной версии этой статьи, мы узнали о недавней работе Овицкий. [1] [2] " Его статья не получила такого большого внимания, как Овики-Грис, возможно, потому, что в ней использовались блок-схемы вместо текста программных конструкций, таких как оператор if и цикл while . Лэмпорт обобщал Флойда метод [8] пока Овицкий-Грис обобщал Метод Хоара. [9] По сути, во всех последующих работах в этой области используются тексты, а не блок-схемы. Еще одно отличие упомянуто ниже в раздел «Вспомогательные переменные» .
Принцип невмешательства Дейкстры.
[ редактировать ]Эдсгер В. Дейкстра представил принцип невмешательства в EWD 117: «Программирование как человеческая деятельность», написанное примерно в 1965 году. [10] Этот принцип гласит, что: Правильность целого можно установить, приняв во внимание учитывать только внешние характеристики (сокращенные характеристики ) деталей, а не их внутреннее строительство. Дейкстра обрисовал общие шаги по использованию этого принципа:
- Дайте полную характеристику каждой отдельной детали.
- Убедитесь, что проблема решена в целом, когда доступны части программы, соответствующие их спецификациям.
- Создавайте отдельные части, соответствующие их спецификациям, но независимо друг от друга и от контекста, в котором они будут использоваться.
Он привел несколько примеров применения этого принципа за пределами программирования. Но его использование в программировании является основной проблемой. Например, программист, использующий метод (подпрограмму, функцию и т. д.), должен полагаться только на его спецификацию, чтобы определить, что он делает и как его вызывать, и никогда на его реализацию.
Спецификации программ написаны на логике Хоара , предложенной сэром Тони Хоаром . [9] как показано в спецификациях процессов S1 и S2 :
{pre-S1 } {pre-S2 }
С1 С2
{после S1 } {до S2 }
Значение: если выполнение Si в состоянии, в котором предусловие pre-Si истинно, завершается, то по завершении выполняется постусловие. пост-Си верно.
Теперь рассмотрим параллельное программирование с общими переменными. Характеристики двух (или подробнее) процессы S1 и S2 заданы через их пред- и постусловия, реализации S1 и S2 и мы предполагаем, что даны , которые удовлетворяют их требованиям. характеристики. Но при параллельном выполнении их реализаций, поскольку они используют общие переменные, состояние гонки может возникнуть ; один процесс изменяет общую переменную на значение это не предполагается при доказательстве другого процесса, поэтому другой процесс не работает должным образом.
Таким образом, принцип невмешательства Дейкстры нарушается.
В своей кандидатской диссертации 1975 г. [1] в области компьютерных наук , Корнелльский университет , написано под Советник Дэвида Грайса Сьюзен Овики разработала понятие свободы вмешательства . Если процессы S1 и S2 удовлетворяют свободе вмешательства, то их параллельное выполнение будет работать по плану. Дейкстра назвал эту работу первым значительным шагом на пути применения логики Хоара к параллельным вычислениям. процессы. [11] Чтобы упростить обсуждение, мы ограничим внимание только двумя параллельными процессами: хотя Овицкий-Грис [2] [3] позволяет больше.
Свобода от помех с точки зрения схемы доказательства
[ редактировать ]Овицкий-Грис [2] [3] представил схему доказательства для тройки Хоара {P}S{Q }. Он содержит все данные, необходимые для доказательства правильности {P}S{Q } с использованием аксиом и правил вывода логики Хоара . (В этой работе используются оператор присваивания x: = e , if-then и if-then-else операторы , а также цикл while .) Хоар ссылался на схемы доказательства в своих ранних работах; для свободы вмешательства ее необходимо было формализовать.
Схема доказательства {P}S{Q предусловия P и заканчивается постусловием Q. } начинается с Два утверждения в фигурных скобках { и }, расположенные рядом друг с другом, указывают на то, что первое должно подразумевать второе.
Пример: Схема доказательства для {P} S {Q }
где S :
х : = а; если е , то S1 еще S2
{П }
{P1[х/а] }
х : = а;
{P1 }
если e , то {P1 ∧ e }
С1
{Q1 }
иначе {P1 ∧ ¬ e }
С2
{Q1 }
{Q1 }
{Q }
P ⇒ P1[x/a] должно выполняться, где P1[x/a] обозначает P1 с каждым появление x заменено . на (В этом примере S1 и S2 являются базовыми операторами, такими как оператор присваивания, пропуск или оператор ожидания .)
Каждому утверждению T в схеме доказательства предшествует предварительное условие pre-T , за которым следует постусловие post-T и {pre-T}T{post-T } должно быть доказуемо с использованием некоторой аксиомы или правила вывода логики Хоара. Таким образом, схема доказательства содержит всю информацию, необходимую для доказательства {P}S{Q правильности }.
Теперь рассмотрим два процесса S1 и S2 , выполняемые параллельно, и их характеристики:
{pre-S1 } {pre-S2 }
С1 С2
{сообщение-S1 } {сообщение-S2 }
Чтобы доказать, что они работают параллельно, потребуется ограничить их следующим образом. Каждое выражение E в S1 или S2 может относиться не более чем к одной переменной y , которая может быть изменяется другим процессом во время E оценки , и E может ссылаться на y не более одного раза. Аналогичное ограничение справедливо и для операторов присваивания x: = E.
Согласно этому соглашению, единственным неделимым действием должна быть ссылка на память. Например, предположим, что процесс S1 ссылается на переменную y, а S2 изменяет y . Значение S1 получает для y должно быть значением до или после того, как S2 изменит y , а не каким-то ложным промежуточным значением.
Определение отсутствия помех
утверждение T не мешает доказательству { Важным нововведением Овицкого-Гриса было определение того, что означает, что P}S{Q }. Если выполнение T не может опровергнуть ни одно утверждение, данное в доказательстве схему {P}S{Q }, то это доказательство остается в силе даже в условиях одновременного выполнения S и T .
Определение . Оператор T с предварительным условием pre-T не мешает доказательству {P}S{Q }, если выполняются два условия:
(1) {Q ∧ пре-T} T {Q }
(2) Пусть S' будет любым оператором внутри S , но не внутри оператора await (см. следующий раздел).
Тогда {pre-S' ∧ pre-T} T {pre-S' }.
Прочтите последнюю тройку Хоара следующим образом: Если состояние таково, что и Т, и S' могут быть выполнено, то выполнение T не приведет к фальсификации pre-S' .
Определение . Схема доказательства для {P1}S1{Q1 } и {P2}S2{Q2 } не вызывает помех, если выполняется следующее. Пусть T — оператор ожидания или присваивания (который не присутствует в await ) процесса S1 . Тогда T не мешает доказательству {P2}S2{Q2 }. Аналогично для T процесса S2 и {P1}S1{Q1 }.
Заявления начинаются и ждут
[ редактировать ]Для работы с параллелизмом были введены два утверждения. Выполнение оператора cobegin S1 // Коенд S2 выполняет S1 и S2 параллельно. Он завершается, когда оба S1 и S2 завершаются .
Выполнение await оператора await B , затем S задерживается до тех пор, пока условие B не станет истинным. Затем оператор S выполняется как неделимое действие — оценка B является частью этого неделимого действия. Если два процесса ожидают одного и того же условия B , когда оно становится истинным, один из них продолжает ждать, пока другой продолжает выполняться.
Оператор await не может быть эффективно реализован, и его не предлагается вставлять в язык программирования. Скорее, он предоставляет средства представления нескольких стандартных примитивов, таких как семафоры: сначала выражайте операции с семафорами как await s , а затем применяйте методы, описанные здесь.
Правила вывода для await и cobegin :
ждать
{P ∧ B} S {Q} / {P} ждут B , затем S {Q}
начинать
{P1} S1 {Q1}, {P2} S2 {Q2}
без помех / {P1∧P2} cobegin S1//S2 coend {Q1∧Q2}
Вспомогательные переменные
[ редактировать ]не Вспомогательная переменная встречается в программе, но вводится при доказательстве правильности, чтобы сделать рассуждения более простыми или даже возможными. Вспомогательные переменные используются только при присвоении вспомогательных переменных, поэтому их введение не меняет программы для любых входных данных и не влияет на значения переменных программы. Обычно они используются либо в качестве программных счетчиков, либо для записи истории вычислений.
Определение . Пусть AV — набор переменных, которые появляются в S' только в присваиваниях. x: = E , где x находится в AV . Тогда AV — набор вспомогательных переменных для S' .
Поскольку набор AV вспомогательных переменных используется только при присвоении переменных в AV , удаление всех присвоений им не меняет корректность программы, и мы имеем правило вывода AV исключения:
{P} S' {Q} / {P} S {Q}
AV — набор вспомогательных переменных для S' . Переменные в AV не встречаются P или Q. в S получается из S' удалением всех присвоений переменным в AV .
Вместо использования вспомогательных переменных в систему доказательства можно ввести программный счетчик, но это усложняет систему доказательств.
Примечание: Подходящий [12] обсуждает логику Овицкого-Гриса в контексте рекурсивных утверждений, то есть эффективно вычислимые утверждения. Он доказывает, что все утверждения доказательства изложены может быть рекурсивным, но это уже не так, если вспомогательные переменные используются только в качестве счетчиков программы, а не для записи истории вычислений. Лэмпорт в своей аналогичной работе [7] использует утверждения о позициях токенов вместо вспомогательных переменных, где токен на краю блок-схемы аналогичен программному счетчику. Нет понятия исторической переменной. Это указывает на то, что подходы Овики-Гриса и Лэмпорта не эквивалентны. когда оно ограничено рекурсивными утверждениями.
Тупик и прекращение
[ редактировать ]Овицкий-Грис [2] [3] касается в основном частичной правильности: {P} S {Q } означает: если S выполнено в состояние, в котором P истинно, завершается, тогда Q истинно для состояния после завершения. Однако Овицкий-Грис также дает некоторые практические приемы, использующие информацию, полученную из частичного доказательства правильности для получения других свойств правильности, включая свободу от тупиковой ситуации, завершения программы и взаимного исключения.
Программа находится в тупике, если все процессы, которые не завершились, выполняются. жду заявлений и никто не может продолжить, потому что их условия ожидания ложны. Овицкий-Грис обеспечивает условия, при которых тупиковая ситуация невозможна.
Овики-Грис представляет правило вывода для полной корректности цикла while . Он использует связанная функция, которая убывает с каждой итерацией и положительна, пока условие цикла истинно. Апт и др. [13] покажите, что это новое правило вывода не удовлетворяет свободе вмешательства. Тот факт, что связанная функция положительна, пока условие цикла истинно, не был включен в тест на интерференцию. Они показывают два способа исправить эту ошибку.
Простой пример
[ редактировать ]Рассмотрим утверждение:
{х=0}
cobegin await true, затем x: = x+1
// ждем true , затем x: = x+2
сопредседатель
{х=3}
Схема доказательства:
{х=0}
С: начать
{х=0}
{х=0 ∨ х=2}
S1: дождитесь истины , затем x : = x+1
{Q1: x=1 ∨ x=3}
//
{х=0}
{х=0 ∨ х=1}
S2: дождитесь истины , затем x : = x+2
{Q2: x=2 ∨ x=3}
сопредседатель
{(x=1 ∨ x=3) ∧ (x=2 ∨ x=3)}
{х=3}
Чтобы доказать, что S1 не мешает доказательству S2, необходимо доказать две тройки Хоара:
(1) {(x=0 ∨ x=2) ∧ (x=0 ∨ x=1} S1 {x=0 ∨ x=1}
(2) {(x=0 ∨ x=2) ∧ (x=2 ∨ x=3} S1 {x=2 ∨ x=3}
Предварительное условие (1) сводится к x=0 , а предварительное условие (2) сводится к x=2 . Отсюда легко видеть, что эти тройки Хоара верны. Две аналогичные тройки Хоара необходимы, чтобы показать, что S2 не мешает доказательству S1 .
Предположим, что S1 заменен оператором ожидания на присваивание х: = х+1 . Тогда схема доказательства не удовлетворяет требованиям, поскольку задание содержит два вхождения общей переменной x . Действительно, значение x после выполнения оператора cobegin может быть 2 или 3.
Предположим, что S1 заменен на ожидания оператор . await true then x: = x+2 , так что это то же самое, что S2 . После выполнения S выполнен x должно быть равно 4. Чтобы доказать это, поскольку два присваивания одинаковы, необходимы две вспомогательные переменные: одна для указания того, был ли ; S1 другой — S2 был ли выполнен . Мы оставляем изменение схемы доказательства на усмотрение читателя.
Примеры формально доказанных параллельных программ
[ редактировать ]А. Найтипос . Напишите программу, которая находит первый положительный элемент массива (если он есть). Один процесс проверяет все элементы массива в четных позициях и завершается, когда находит положительное значение или когда ничего не найдено. Аналогично другой процесс проверяет элементы массива в нечетных позициях массива. Таким образом, в этом примере рассматриваются циклы while . Он также не имеет операторов ожидания .
Этот пример принадлежит Барри К. Розену. [14] Решение в Овицкий-Грис, [2] вместе с программой, схемой доказательства и обсуждением свободы вмешательства занимает менее двух страниц. Свободу помех проверить довольно легко, поскольку имеется только одна общая переменная. Напротив, Розен статья [14] использует Findpos в качестве единственного работающего примера в этой 24-страничной статье.
Схема обоих процессов в общей среде:
cobegin : ... продюсер
дождаться входа-выхода < N, затем пропустить ;
добавить: b[в моде N]:= следующее значение;
отметка: в: = в+1;
...
//
потребитель: ...
дождитесь входа-выхода > 0 , затем пропустите ;
удалить: это значение:=
б[выход мод N];
разметка: выход: = выход+1;
сопредседатель
...
B. Проблема потребителя/производителя ограниченного буфера . Процесс-производитель генерирует значения и помещает их в ограниченный буфер b размера N ; потребительский процесс удаляет их. Они действуют с переменной скоростью. Производитель должен дождаться, если буфер b полон; потребитель должен ждать, если буфер b пуст. В Овицкий-Грис, [2] показано решение в общей среде; затем он встраивается в программу, которая копирует массив c[1..M] в массив d[1..M] .
Этот пример демонстрирует принцип, позволяющий свести к минимуму проверки взаимодействий: поместите как можно больше в утверждение, которое инвариантно истинно везде в обоих процессах. В этом случае утверждение представляет собой определение ограниченного буфера и границ переменных, которые указывают, сколько значений было добавлено в буфер и удалено из него. Помимо самого буфера b , две общие переменные записывают количество входных значений, добавленных в буфер, и количество выходных значений , удаленных из буфера.
C. Реализация семафоров . В своей статье о мультипрограммной системе THE [4] Дейкстра представляет семафор sem как примитив синхронизации: sem — целочисленная переменная, на которую можно ссылаться только двумя способами, как показано ниже; каждая представляет собой неделимую операцию:
1. P(sem) : Уменьшите sem на 1. Если теперь sem < 0 , приостановите процесс и поместите его в список приостановленных процессов, связанных с sem .
2. V(sem) : увеличьте sem на 1. Если теперь sem ≤ 0 , удалите один из процессов из списка приостановленных процессов, связанных с sem , чтобы его динамический прогресс снова стал допустимым.
Реализация P и V с использованием операторов ожидания :
П (без):
жди правда тогда
начать как: = as-1;
если sem < 0, то
w[этот процесс]: = true
конец ;
ожидайте ¬w[этот процесс]
тогда пропусти
Вопрос(Я):
жди правда тогда
начать как: = as+1;
если sem ≤ 0 , то
начни выбирать такой
что w[ p ];
ш[ р ]: = ложь
конец
конец
Здесь w — это массив процессов, ожидающих, поскольку они были приостановлены; изначально w[p] = false для каждого процесса p . Можно изменить реализацию, чтобы всегда будить самый длинный приостановленный процесс.
D. Сбор мусора «на лету» . На Летней школе в Марктобердорфе 1975 года Дейкстра обсуждал оперативный сборщик мусора как упражнение для понимания параллелизма. Структура данных, используемая в традиционной реализации LISP, представляет собой ориентированный граф, в котором каждый узел имеет не более двух исходящих ребер, любое из которых может отсутствовать: исходящее левое ребро и исходящее правое ребро. Все узлы графа должны быть достижимы из известного корня. Изменение узла может привести к появлению недоступных узлов, которые больше нельзя будет использовать и которые называются мусором . Сборщик мусора «на лету» имеет два процесса: саму программу и сборщик мусора, задача которого — идентифицировать мусорные узлы и поместить их в список свободных, чтобы их можно было использовать снова.
Грайс считал, что свободу от помех можно использовать, чтобы доказать правильность оперативного сборщика мусора. С помощью Дейкстры и Хоара он смог провести презентацию в конце Летней школы. результатом чего стала статья в CACM. [15]
E. Проверка решения чтения/записи с помощью семафоров . Куртуа и др. [16] используйте семафоры, чтобы дать две версии проблемы чтения/записи без доказательств. Операции записи блокируют как чтение, так и запись, но операции чтения могут выполняться параллельно. Овицкий [17] предоставляет доказательство.
Алгоритм Ф. Петерсона , решение взаимного исключения двух процессов проблема была опубликована Петерсоном в двухстраничной статье. [18] Шнайдер и Эндрюс предоставляют доказательство правильности. [19]
Зависимости от интерференционной свободы
[ редактировать ]На изображении ниже, сделанном Ильей Сергеем, показан поток идей, реализованных в логике, связанной с параллелизмом. В основе лежит свобода вмешательства. Файл Семейное древо CSL (PDF) содержит ссылки. Ниже мы суммируем основные достижения.
- Рели-Гарантия . 1981. Свобода вмешательства не композиционна. Клифф Джонс [20] [21] восстанавливает композиционность путем абстрагирования помех в два новых предиката в спецификации: условие доверия записывает, какое вмешательство должен выдерживать поток, а условие гарантии устанавливает верхнюю границу вмешательства, которое поток может причинить своим родственным потокам. Сюй и др. [22] обратите внимание, что Rely-Guarantee представляет собой новую формулировку свободы вмешательства; По их словам, выявление связи между этими двумя методами дает глубокое понимание верификации программ с общими переменными.
- КСЛ . 2004. Логика разделения поддерживает локальные рассуждения, согласно которым в спецификациях и доказательствах программного компонента упоминается только часть памяти, используемая этим компонентом. Логика параллельного разделения (CSL) была первоначально предложена Питером О'Хирном , [23] [24] Мы цитируем: [23] «метод Овицкого-Гриса [2] предполагает явную проверку невмешательства между компонентами программы, в то время как наша система исключает вмешательство неявным образом, в силу способа построения доказательств».
- Создание параллельных программ . 2005-2007 гг. Фейен и ван Гастерен [25] показать, как использовать Овики-Гриса для разработки параллельных программ, но отсутствие теории прогресса означает, что проекты обусловлены только требованиями безопасности . Донгол, Голдсон, Муидж и Хейс расширили эту работу, включив в нее «логику прогресса», основанную на Чанди и Мисры языке Unity , адаптированную к модели последовательного программирования. Донгель и Голдсон [26] описать логику их прогресса. Гольдсон и Донгол [27] показать, как эта логика используется для улучшения процесса проектирования программ, алгоритма Деккера на примере для двух процессов. Донгол и Муидж [28] представить дополнительные методы создания программ, используя алгоритм взаимного исключения Петерсона в качестве примера . Донгол и Муидж [29] покажите, как уменьшить вычислительные затраты при формальных доказательствах и выводах, и снова выведите алгоритм Деккера, что приведет к некоторым новым и более простым вариантам алгоритма. Муидж [30] изучает правила расчета для связи Unity «отводы к» . Наконец, Донгол и Хейс [31] обеспечить теоретическую основу и доказать правильность логики процесса.
- ОГРА . 2015. Лахав и Вафеиадис усиливают проверку на свободу помех, чтобы создать (цитируем из аннотации) «OGRA, программную логику, которая подходит для рассуждений о программах во фрагменте выпуска-получения модели памяти C11». Они предоставляют несколько примеров его использования, включая реализацию примитивов синхронизации RCU. [32]
- Квантовое программирование . 2018. Ин и др. [33] распространить свободу вмешательства на квантовое программирование. Трудности, с которыми они сталкиваются, включают переплетенный недетерминизм: недетерминизм, включающий квантовые измерения, и недетерминизм, вызванный параллелизмом, происходящим в одно и то же время. Авторы формально проверяют параллельный квантовый алгоритм Брави-Госсета-Кёнига, решающий задачу линейной алгебры, давая, по их словам, впервые безусловное доказательство вычислительного квантового преимущества.
- ПОГ . 2020. Раад и др. представляют POG (Persistent Owicki-Gries), первую программную логику для рассуждений о технологиях энергонезависимой памяти, в частности Intel-x86. [34]
Тексты, в которых обсуждается свобода вмешательства
[ редактировать ]- О методе мультипрограммирования , 1999. [25] Ван Гастерен и Фейен обсуждают формальную разработку параллельных программ исключительно на идее свободы вмешательства.
- О текущем программировании , 1997. [35] Шнайдер использует свободу помех как основной инструмент при разработке и проверке параллельных программ. Дана связь с темпоральной логикой, поэтому могут быть доказаны произвольные свойства безопасности и живучести. Предикаты управления устраняют необходимость во вспомогательных переменных для расчета программных счетчиков.
- Верификация последовательных и параллельных программ , 1991, [36] 2009. [37] Этот первый текст, посвященный верификации структурированных параллельных программ, написанный Аптом и др ., выдержал несколько изданий за несколько десятилетий.
- Проверка параллелизма: введение в композиционные и некомпозиционные методы , 2112. [38] Де Ровер и др. представляют систематическое и всестороннее введение в композиционные и некомпозиционные методы доказательства для проверки параллельных программ на основе состояний.
Реализация свободы помех
[ редактировать ]- 1999: Нипков и Ньето представляют первую формализацию свободы интерференции и ее композиционную версию, метод гарантии-полагания, в средстве доказательства теорем: Isabelle/HOL. [39] [40]
- 2005: Докторская диссертация Абрахама предлагает способ доказать правильность многопоточных Java-программ в три этапа: (1) аннотировать программу для создания схемы доказательства, (2) использовать инструмент Verger для автоматического создания условий проверки и (3) использовать теорему прувер PVS для интерактивного доказательства условий проверки. [41] [42]
- 2017: Дениссен [43] сообщает о реализации Овицкого-Гриса на «готовом к проверке» языке программирования Dafny . [44] Дениссен отмечает простоту использования Дафни и его расширения, что делает его чрезвычайно подходящим для обучения студентов свободе от помех. Его простота и интуитивность перевешивают недостаток некомпозиционности. Он перечисляет около двадцати учреждений, которые учат свободе вмешательства.
- 2017: Амани и др. объединяют подходы Hoare-Parallel, формализации Овики-Гриса в Isabelle/HOL для простого языка while, и SIMPL, общего языка, встроенного в Isabelle/HOL, для обеспечения формального обоснования программ на C. [45]
- 2022: Далванди и др. представляют первую среду дедуктивной проверки в Isabelle/HOL для C11-подобных программ со слабой памятью, основанную на кодировании Овицкого-Гриса Нипковом и Ньето в средстве доказательства теорем Изабель. [46]
- 2022: Эта веб-страница [47] описывает верификатор Civl для параллельных программ и дает инструкции по его установке на ваш компьютер. Он построен на основе Boogie, средства проверки последовательных программ. Крагл и др. [48] описать, как в Civl достигается свобода от помех, используя их новую идиому спецификации, давать инварианты . Можно также использовать спецификации в стиле «полагайся-гарантируй». Civl предлагает комбинацию линейной типизации и логики, которая позволяет экономно и локально рассуждать о непересекаемости (например, логика разделения). Civl — первая система, предлагающая уточнение структурированных параллельных программ.
- 2022. Эсен и Рюммер разработали TRICERA, [49] автоматизированный инструмент проверки с открытым исходным кодом для программ на языке C. Он основан на концепции ограниченных предложений Хорна и обрабатывает программы, работающие в куче, с использованием теории куч. Доступен веб-интерфейс для онлайн-тестирования. Для управления параллелизмом TRICERA использует вариант правил доказательства Овики-Гриса с добавлением явных переменных для представления времени и часов.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Овиски, Сьюзен С. (август 1975 г.). Аксиоматические методы доказательства для параллельных программ (кандидатская диссертация). Корнелльский университет. hdl : 1813/6393 . Проверено 1 июля 2022 г.
- ^ Перейти обратно: а б с д и ж г час я Овиски, Сьюзен ; Грис, Дэвид (25 июня 1976 г.). «Техника аксиоматического доказательства для параллельных программ I» . Акта Информатика . 6 (4). Берлин: Шпрингер (Германия): 319–340. дои : 10.1007/BF00268134 . S2CID 206773583 .
- ^ Перейти обратно: а б с д Овиски, Сьюзен ; Грис, Дэвид (май 1976 г.). «Проверка свойств параллельных программ: аксиоматический подход» . Коммуникации АКМ . 19 (5): 279–285. дои : 10.1145/360051.360224 . S2CID 9099351 .
- ^ Перейти обратно: а б Дейкстра, EW (1968), «Структура мультипрограммной системы THE», Communications of the ACM , 11 (5): 341–346, doi : 10.1145/363095.363143 , S2CID 2021311
- ^ «Сьюзен С. Овики» . Награды.acm.org . Проверено 1 июля 2022 г.
- ^ «Дэвид Грайс» . Награды.acm.org . Проверено 1 июля 2022 г.
- ^ Перейти обратно: а б Лэмпорт, Лесли (март 1977 г.). «Доказательство корректности многопроцессных программ» . Транзакции IEEE по разработке программного обеспечения . СЭ-3 (2): 125–143. дои : 10.1109/TSE.1977.229904 . S2CID 9985552 .
- ^ Флойд, Роберт В. (1967). «Придание значения программам» (PDF) . В Шварце, Дж. Т. (ред.). Математические аспекты информатики . Материалы симпозиума по прикладной математике. Том. 19. Американское математическое общество. стр. 19–32. ISBN 0821867288 .
- ^ Перейти обратно: а б Хоар, ЦАР (октябрь 1969 г.). «Аксиоматические основы компьютерного программирования» . Коммуникации АКМ . 12 (10): 576–580. дои : 10.1145/363235.363259 . S2CID 207726175 .
- ^ «Программирование как человеческая деятельность» (PDF) . Архив Э. В. Дейкстры . Техасский университет.
- ^ Дейкстра, Эдсгер В. (1982). «EWD 554: Личное изложение теории Гриса-Овицкого». Избранные сочинения о вычислительной технике: личный взгляд . Монографии по информатике. Спрингер-Верлаг. стр. 188–199. ISBN 0387906525 .
- ^ Апт, Кшиштоф Р. (июнь 1981 г.). «Рекурсивные утверждения и параллельные программы» . Акта Информатика . 15 (3): 219–232. дои : 10.1007/BF00289262 . S2CID 42470032 .
- ^ Апт, Кристофер Р.; де Бур, Фрэнк С.; Ольдерог, Эрнст-Рюдигер (1990). «Доказательство завершения параллельных программ». В Греции Д.; Фейен, WHJ; ван Гастерен, AJM; Мисра, Дж. (ред.). Красота – это наш бизнес . Монографии по информатике. Нью-Йорк: Издательство Springer. стр. 0–6. дои : 10.1007/978-1-4612-4476-9 . ISBN 978-1-4612-8792-6 . S2CID 24379938 .
- ^ Перейти обратно: а б Розен, Барри К. (1976). «Корректность параллельных программ: подход Чёрча-Россера» . Теоретическая информатика . 2 (2): 183–207. дои : 10.1016/0304-3975(76)90032-3 .
- ^ Грис, Дэвид (декабрь 1977 г.). «Упражнение по проверке правильности параллельных программ» . Коммуникации АКМ . 20 (12): 921–930. дои : 10.1145/359897.359903 . S2CID 3202388 .
- ^ Куртуа, П.Дж.; Хейманс, Ф.; Парнас, Д.Л. (октябрь 1971 г.). «Совместное управление с «читателями» и «писателями» » . Коммуникации АКМ . 14 (10): 667–668. дои : 10.1145/362759.362813 . S2CID 7540747 .
- ^ Овицкий, Сьюзен (август 1977 г.). Проверка параллельных программ с общими классами данных (PDF) (Технический отчет). Лаборатория цифровых систем Стэнфордского университета. 147 . Проверено 8 июля 2022 г.
- ^ Петерсон, Гэри Л. (июнь 1981 г.). «Мифы о проблеме взаимного исключения» . ИПЛ . 12 (3): 115–116. дои : 10.1016/0020-0190(81)90106-X .
- ^ Шнайдер, Фред Б .; Эндрюс, Грегори Р. (1986). «Концепции параллельного программирования» . В Дж. В. Баккере; В. П. де Ровер; Г. Розенберг (ред.). Текущие тенденции в параллелизме . Конспекты лекций по информатике. Том. 224. Нордвейкерхаут, Нидерланды: Springer Verlag . стр. 669–716. дои : 10.1007/BFb0027049 . ISBN 978-3-540-16488-3 .
- ^ Джонс, CB (июнь 1981 г.). Методы разработки компьютерных программ, включая понятие интерференции (PDF) (докторская диссертация). Оксфордский университет.
- ^ Джонс, Клифф Б. (1983). РЭ Мейсон (ред.). Спецификация и проектирование (параллельных) программ . 9-й Всемирный компьютерный конгресс ИФИП (Обработка информации 83). Северная Голландия/ИФИП. стр. 321–332. ISBN 0444867295 .
- ^ Сюй, Цивэнь; де Ровер, Виллем-Поль; Он, Цзифэн (1997). «Метод Rely-Guarantee для проверки параллельных программ с общими переменными» . Формальные аспекты вычислений . 9 (2): 149–174. дои : 10.1007/BF01211617 . S2CID 12148448 .
- ^ Перейти обратно: а б О'Хирн, Питер В. (3 сентября 2004 г.). «Ресурсы, параллелизм и локальное мышление» . У П. Гарднера; Н. Ёсида (ред.). КОНКУР 2004 -- Теория параллелизма . CONCUR 2004. Лондон, Великобритания: Springer Verlag Berlin, Гейдельберг. стр. 49–67. дои : 10.1007/b100113 . ISBN 978-3-540-28644-8 . Проверено 6 июля 2022 г.
- ^ О'Хирн, Питер (2007). «Ресурсы, параллелизм и локальное мышление» (PDF) . Теоретическая информатика . 375 (1–3): 271–307. дои : 10.1016/j.tcs.2006.12.035 .
- ^ Перейти обратно: а б Ван Гастерен, AJM; Фейен, WHJ (1999). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). Об одном методе мультипрограммирования . Монографии по информатике. Спрингер-Верлаг Нью-Йорк Инк. п. 370. дои : 10.1007/978-1-4757-3126-2 . ISBN 978-1-4757-3126-2 . S2CID 13607884 .
- ^ Донгол, Бриджеш; Голдсон, Дуг (2006) [12 января 2005 г.]. «Расширяя теорию Овицкого и Грайса логикой прогресса» . Логические методы в информатике . 2 . Центр управления научными коммуникациями (CCSD). arXiv : cs/0512012v3 . дои : 10.2168/lmcs-2(1:6)2006 . S2CID 302420 .
- ^ Голдсон, Дуг; Донгол, Бриджеш (январь 2005 г.). «Разработка параллельных программ в расширенной теории Овицкого и Гриса» . У Майка Аткинсона; Фрэнк Ден (ред.). CATS '05: Материалы Австралазийского симпозиума 2005 г. по теории вычислений . Том. 41. Австралийское компьютерное общество, Inc., стр. 41–50.
- ^ Донгол, Бриджеш; Муидж, Арьян Дж. (июль 2006 г.). «Прогресс в разработке параллельных программ: подчеркивание роли стабильных охранников» . В Тармо Уусталу (ред.). MPC'06: Учеб. 8-й Межд. Конф. по математике построения программ . Том. 41. Курессааре , Эстония : Springer Verlag , Берлин, Гейдельберг. стр. 14–161. дои : 10.1007/11783596_11 .
- ^ Донгол, Бриджеш; Муидж, Арьян Дж (2008). «Оптимизация разработки параллельных программ на основе прогресса» . Формальные аспекты вычислений . 20 (2): 141–160. дои : 10.1007/s00165-007-0037-4 . S2CID 7024064 .
- ^ Муидж, Арьян Дж. (ноябрь 2007 г.). «Расчет и составление свойств прогресса с точки зрения отношения ведет к». В Майкле Батлере; Майкл Г. Хинчи; Мария М. Ларрондо-Петри (ред.). ICFEM'07: Учеб. Формальные инженерные методы 9-го Межд. Конф. по формальным методам и программной инженерии . Бока-Ратон, Флорида: Springer Verlag , Берлин, Гейдельберг. стр. 366–386. ISBN 978-3540766483 .
- ^ Донгол, Бриджеш; Хейс, Ян (апрель 2007 г.). Семантика трассировки теории Овицкого-Гриса, интегрированная с логикой прогресса из UNITY (PDF) (Технический отчет). Университет Квинсленда . ССЕ-2007-02.
- ^ Лахав, Ори; Вафеиадис, Виктор (2015). «Рассуждения Овики-Гриса о моделях слабой памяти» . Ин Халлдорссон, М.; Ивама, К.; Кобаяши, Н.; Спекманн, Б. (ред.). Автоматы, языки и программирование. ИКП 2015 . ICALP 2015. Конспекты лекций по информатике. Том. 9135. Берлин, Гейдельберг: Springer. стр. 311–323. дои : 10.1007/978-3-662-47666-6_25 .
- ^ Инь, Миншэн; Чжоу, Ли; Ли, Янцзя (2018). «Рассуждения о параллельных квантовых программах». arXiv : 1810.11334 [ cs.LO ].
- ^ Раад, Азалия; Лахав, Ори; Вафеиадис, Виктор (13 ноября 2020 г.). «Настойчивые рассуждения Овики-Гриса: программная логика рассуждений о постоянных программах на Intel-x86». Труды ACM по языкам программирования . Том. 4. АКМ . стр. 1–28. дои : 10.1145/3428219 . hdl : 10044/1/97398 .
- ^ Шнайдер, Фред Б. (1997). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). О параллельном программировании . Тексты для аспирантов по информатике. Springer-Verlag New York Inc. doi : 10.1007/978-1-4612-1830-2 . ISBN 978-1-4612-1830-2 . S2CID 9980317 .
- ^ Апт, Кшиштоф Р.; Ольдерог, Эрнст-Рюдигер (1991). Грайс, Дэвид (ред.). Верификация последовательных и параллельных программ . Тексты по информатике. Шпрингер Верлаг Германия.
- ^ Апт, Кшиштоф Р.; Бур, Фрэнк С.; Ольдерог, Эрнст-Рюдигер (2009). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). Верификация последовательных и параллельных программ . Тексты по информатике (3-е изд.). Спрингер-Верлаг Лондон. п. 502. Бибкод : 2009vscp.book.....A . дои : 10.1007/978-1-84882-745-5 . ISBN 978-1-84882-744-8 .
- ^ Разбойник Уильям-Пол; Фермер Уильям-Пол; Ханнеман, Ульрих; Хуман, Джозеф; Лахнех, Ясин; Поэль, Маннес; Цвирс, Иов (2012). Абрамский С. (ред.). Проверка параллелизма: введение в композиционные и некомпозиционные методы . Кембриджские трактаты по теоретической информатике. Издательство Кембриджского университета, США. п. 800. ISBN 978-0521169325 .
- ^ Ньето, Леонор Пренса (31 января 2002 г.). Верификация параллельных программ с помощью методов Овицкого-Гриса и гарантий доверия в Isabelle/HOL (кандидатская диссертация). Технический университет Мюнхена. п. 198 . Проверено 5 июля 2022 г.
- ^ Нипков, Тобиас; Ньето, Леонор Пренса (22 марта 1999 г.). «Овицкий/Грис в Изабель/ХОЛ». В JP Finance (ред.). Фундаментальные подходы к программной инженерии . FASE 1999. Конспекты лекций по информатике. Том. 1577. Берлин, Гейдельберг: Springer Verlag . стр. 188–203. дои : 10.1007/978-3-540-49020-3_13 . ISBN 978-3-540-49020-3 .
- ^ Абрахам, Эрика (20 января 2005 г.). Система подтверждения утверждений для многопоточной Java - теория и инструментальная поддержка (кандидатская диссертация). Университет Лейдена. п. 220. HDL : 1887/584 . ISBN 9090189084 . Проверено 5 июля 2022 г.
- ^ Авраам, Эрика; Бур, Франк, С., де; Ровер, Виллем-Поль, де; Мартин, Штеффен (25 февраля 2005 г.). «Система доказательства на основе утверждений для многопоточной Java» . Теоретическая информатика . 331 (2–3). Эльзевир : 251–290. дои : 10.1016/j.tcs.2004.09.019 .
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Дениссен, PEJG (ноябрь 2017 г.). Расширение Dafny до Concurrency: проверка программы в стиле Овики-Гриса для верификатора программы Dafny (магистерская диссертация). Эйндховенский технологический университет.
- ^ «Язык программирования Дафни» . Проверено 20 июля 2022 г.
- ^ Амани, С.; Андроник, Дж.; Бортин, М.; Льюис, К.; Ризкалла, К.; Туонг, Дж. (16 января 2017 г.). Ив Берто; Виктор Вафеядид (ред.). COMPLX: структура проверки для параллельных императивных программ . CPP 2017: Материалы 6-й конференции ACM SIGPLAN по сертифицированным программам и доказательствам. Париж, Франция: ACM . стр. 138–150. дои : 10.1145/3018610.3018627 . ISBN 978-1-4503-4705-1 .
- ^ Далванди, Садег; Донгол, Бриджеш; Доэрти, Саймон; Верхайм, Хайке (февраль 2022 г.). «Интеграция Овицкого-Гриса для моделей памяти в стиле C11 в Isabelle/HOL» . Журнал автоматизированного рассуждения . 66 : 141–171. arXiv : 2004.02983 . дои : 10.1007/s10817-021-09610-2 . S2CID 215238874 .
- ^ «Civl: средство проверки параллельных программ» . Проверено 22 июля 2022 г.
- ^ Крагл, Бернхард; Кадир, Шаз; Хензингер, Томас А. (2020). «Уточнение структурированных параллельных программ». В С. Лахири; К. Ван (ред.). CAV 2020: Компьютерная проверка . Конспекты лекций по информатике. Том. 12224. Спрингер Верлаг . дои : 10.1007/978-3-030-53288-8_14 . ISBN 978-3-030-53288-8 .
- ^ Эсен, Зафер; Рюммер, Филипп (октябрь 2022 г.). «TRICERA Проверка программ на языке C с использованием теории куч». У А. Гриджио; Н. Рунгта (ред.). Учеб. 22-я Конф. по формальным методам в системах автоматизированного проектирования — FMCAD 2022 . TU Wien Academic Press. стр. 360–391. дои : 10.34727/2022/isbn.978-3-85448-053-2_45 .