Jump to content

Свобода вмешательства

В информатике свобода от помех это метод доказательства частичной правильности параллельные программы с общими переменными. Логика Хоара была введена ранее доказывать корректность последовательных программ. В своей кандидатской диссертации [1] (и документы, вытекающие из него [2] [3] ) под руководством советника Дэвида Грайса , Сьюзен Овики расширил эту работу, чтобы применить ее к параллельным программам.

Параллельное программирование использовалось с середины 1960-х годов для кодирования операционных систем как наборов. параллельных процессов (см., в частности, Дейкстра. [4] ), но не было формальный механизм доказательства правильности. Рассуждения о чередующемся выполнении последовательность отдельных процессов была трудной, была подвержена ошибкам, и не масштабировался. Свобода вмешательства применяется к доказательствам, а не к последовательностям выполнения; показывает, что выполнение одного процесса не может повлиять на корректность доказательство другого процесса.

С помощью интерференции была доказана корректность ряда сложных параллельных программ. свобода, а свобода вмешательства составляет основу для большей части последующих работ по разработка параллельных программ с общими переменными и доказательство их корректности. Статья Овицкого-Гриса. Методика аксиоматического доказательства для параллельных программ I. [2] получил премию ACM 1977 года за лучшую работу по языкам программирования и системы. [5] [6]

Примечание. Лэмпорт [7] представляет аналогичную идею. Он пишет: «После написания первоначальной версии этой статьи, мы узнали о недавней работе Овицкий. [1] [2] " Его статья не получила такого большого внимания, как Овики-Грис, возможно, потому, что в ней использовались блок-схемы вместо текста программных конструкций, таких как оператор if и цикл while . Лэмпорт обобщал Флойда метод [8] пока Овицкий-Грис обобщал Метод Хоара. [9] По сути, во всех последующих работах в этой области используются тексты, а не блок-схемы. Еще одно отличие упомянуто ниже в раздел «Вспомогательные переменные» .

Принцип невмешательства Дейкстры.

[ редактировать ]

Эдсгер В. Дейкстра представил принцип невмешательства в EWD 117: «Программирование как человеческая деятельность», написанное примерно в 1965 году. [10] Этот принцип гласит, что: Правильность целого можно установить, приняв во внимание учитывать только внешние характеристики (сокращенные характеристики ) деталей, а не их внутреннее строительство. Дейкстра обрисовал общие шаги по использованию этого принципа:

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

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

Спецификации программ написаны на логике Хоара , предложенной сэром Тони Хоаром . [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) содержит ссылки. Ниже мы суммируем основные достижения.

Исторический график программной логики для защиты от помех
Historical graph of program logics for interference freedom
  • Рели-Гарантия . 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 использует вариант правил доказательства Овики-Гриса с добавлением явных переменных для представления времени и часов.
  1. ^ Перейти обратно: а б с Овиски, Сьюзен С. (август 1975 г.). Аксиоматические методы доказательства для параллельных программ (кандидатская диссертация). Корнелльский университет. hdl : 1813/6393 . Проверено 1 июля 2022 г.
  2. ^ Перейти обратно: а б с д и ж г час я Овиски, Сьюзен ; Грис, Дэвид (25 июня 1976 г.). «Техника аксиоматического доказательства для параллельных программ I» . Акта Информатика . 6 (4). Берлин: Шпрингер (Германия): 319–340. дои : 10.1007/BF00268134 . S2CID   206773583 .
  3. ^ Перейти обратно: а б с д Овиски, Сьюзен ; Грис, Дэвид (май 1976 г.). «Проверка свойств параллельных программ: аксиоматический подход» . Коммуникации АКМ . 19 (5): 279–285. дои : 10.1145/360051.360224 . S2CID   9099351 .
  4. ^ Перейти обратно: а б Дейкстра, EW (1968), «Структура мультипрограммной системы THE», Communications of the ACM , 11 (5): 341–346, doi : 10.1145/363095.363143 , S2CID   2021311
  5. ^ «Сьюзен С. Овики» . Награды.acm.org . Проверено 1 июля 2022 г.
  6. ^ «Дэвид Грайс» . Награды.acm.org . Проверено 1 июля 2022 г.
  7. ^ Перейти обратно: а б Лэмпорт, Лесли (март 1977 г.). «Доказательство корректности многопроцессных программ» . Транзакции IEEE по разработке программного обеспечения . СЭ-3 (2): 125–143. дои : 10.1109/TSE.1977.229904 . S2CID   9985552 .
  8. ^ Флойд, Роберт В. (1967). «Придание значения программам» (PDF) . В Шварце, Дж. Т. (ред.). Математические аспекты информатики . Материалы симпозиума по прикладной математике. Том. 19. Американское математическое общество. стр. 19–32. ISBN  0821867288 .
  9. ^ Перейти обратно: а б Хоар, ЦАР (октябрь 1969 г.). «Аксиоматические основы компьютерного программирования» . Коммуникации АКМ . 12 (10): 576–580. дои : 10.1145/363235.363259 . S2CID   207726175 .
  10. ^ «Программирование как человеческая деятельность» (PDF) . Архив Э. В. Дейкстры . Техасский университет.
  11. ^ Дейкстра, Эдсгер В. (1982). «EWD 554: Личное изложение теории Гриса-Овицкого». Избранные сочинения о вычислительной технике: личный взгляд . Монографии по информатике. Спрингер-Верлаг. стр. 188–199. ISBN  0387906525 .
  12. ^ Апт, Кшиштоф Р. (июнь 1981 г.). «Рекурсивные утверждения и параллельные программы» . Акта Информатика . 15 (3): 219–232. дои : 10.1007/BF00289262 . S2CID   42470032 .
  13. ^ Апт, Кристофер Р.; де Бур, Фрэнк С.; Ольдерог, Эрнст-Рюдигер (1990). «Доказательство завершения параллельных программ». В Греции Д.; Фейен, WHJ; ван Гастерен, AJM; Мисра, Дж. (ред.). Красота – это наш бизнес . Монографии по информатике. Нью-Йорк: Издательство Springer. стр. 0–6. дои : 10.1007/978-1-4612-4476-9 . ISBN  978-1-4612-8792-6 . S2CID   24379938 .
  14. ^ Перейти обратно: а б Розен, Барри К. (1976). «Корректность параллельных программ: подход Чёрча-Россера» . Теоретическая информатика . 2 (2): 183–207. дои : 10.1016/0304-3975(76)90032-3 .
  15. ^ Грис, Дэвид (декабрь 1977 г.). «Упражнение по проверке правильности параллельных программ» . Коммуникации АКМ . 20 (12): 921–930. дои : 10.1145/359897.359903 . S2CID   3202388 .
  16. ^ Куртуа, П.Дж.; Хейманс, Ф.; Парнас, Д.Л. (октябрь 1971 г.). «Совместное управление с «читателями» и «писателями» » . Коммуникации АКМ . 14 (10): 667–668. дои : 10.1145/362759.362813 . S2CID   7540747 .
  17. ^ Овицкий, Сьюзен (август 1977 г.). Проверка параллельных программ с общими классами данных (PDF) (Технический отчет). Лаборатория цифровых систем Стэнфордского университета. 147 . Проверено 8 июля 2022 г.
  18. ^ Петерсон, Гэри Л. (июнь 1981 г.). «Мифы о проблеме взаимного исключения» . ИПЛ . 12 (3): 115–116. дои : 10.1016/0020-0190(81)90106-X .
  19. ^ Шнайдер, Фред Б .; Эндрюс, Грегори Р. (1986). «Концепции параллельного программирования» . В Дж. В. Баккере; В. П. де Ровер; Г. Розенберг (ред.). Текущие тенденции в параллелизме . Конспекты лекций по информатике. Том. 224. Нордвейкерхаут, Нидерланды: Springer Verlag . стр. 669–716. дои : 10.1007/BFb0027049 . ISBN  978-3-540-16488-3 .
  20. ^ Джонс, CB (июнь 1981 г.). Методы разработки компьютерных программ, включая понятие интерференции (PDF) (докторская диссертация). Оксфордский университет.
  21. ^ Джонс, Клифф Б. (1983). РЭ Мейсон (ред.). Спецификация и проектирование (параллельных) программ . 9-й Всемирный компьютерный конгресс ИФИП (Обработка информации 83). Северная Голландия/ИФИП. стр. 321–332. ISBN  0444867295 .
  22. ^ Сюй, Цивэнь; де Ровер, Виллем-Поль; Он, Цзифэн (1997). «Метод Rely-Guarantee для проверки параллельных программ с общими переменными» . Формальные аспекты вычислений . 9 (2): 149–174. дои : 10.1007/BF01211617 . S2CID   12148448 .
  23. ^ Перейти обратно: а б О'Хирн, Питер В. (3 сентября 2004 г.). «Ресурсы, параллелизм и локальное мышление» . У П. Гарднера; Н. Ёсида (ред.). КОНКУР 2004 -- Теория параллелизма . CONCUR 2004. Лондон, Великобритания: Springer Verlag Berlin, Гейдельберг. стр. 49–67. дои : 10.1007/b100113 . ISBN  978-3-540-28644-8 . Проверено 6 июля 2022 г.
  24. ^ О'Хирн, Питер (2007). «Ресурсы, параллелизм и локальное мышление» (PDF) . Теоретическая информатика . 375 (1–3): 271–307. дои : 10.1016/j.tcs.2006.12.035 .
  25. ^ Перейти обратно: а б Ван Гастерен, AJM; Фейен, WHJ (1999). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). Об одном методе мультипрограммирования . Монографии по информатике. Спрингер-Верлаг Нью-Йорк Инк. п. 370. дои : 10.1007/978-1-4757-3126-2 . ISBN  978-1-4757-3126-2 . S2CID   13607884 .
  26. ^ Донгол, Бриджеш; Голдсон, Дуг (2006) [12 января 2005 г.]. «Расширяя теорию Овицкого и Грайса логикой прогресса» . Логические методы в информатике . 2 . Центр управления научными коммуникациями (CCSD). arXiv : cs/0512012v3 . дои : 10.2168/lmcs-2(1:6)2006 . S2CID   302420 .
  27. ^ Голдсон, Дуг; Донгол, Бриджеш (январь 2005 г.). «Разработка параллельных программ в расширенной теории Овицкого и Гриса» . У Майка Аткинсона; Фрэнк Ден (ред.). CATS '05: Материалы Австралазийского симпозиума 2005 г. по теории вычислений . Том. 41. Австралийское компьютерное общество, Inc., стр. 41–50.
  28. ^ Донгол, Бриджеш; Муидж, Арьян Дж. (июль 2006 г.). «Прогресс в разработке параллельных программ: подчеркивание роли стабильных охранников» . В Тармо Уусталу (ред.). MPC'06: Учеб. 8-й Межд. Конф. по математике построения программ . Том. 41. Курессааре , Эстония : Springer Verlag , Берлин, Гейдельберг. стр. 14–161. дои : 10.1007/11783596_11 .
  29. ^ Донгол, Бриджеш; Муидж, Арьян Дж (2008). «Оптимизация разработки параллельных программ на основе прогресса» . Формальные аспекты вычислений . 20 (2): 141–160. дои : 10.1007/s00165-007-0037-4 . S2CID   7024064 .
  30. ^ Муидж, Арьян Дж. (ноябрь 2007 г.). «Расчет и составление свойств прогресса с точки зрения отношения ведет к». В Майкле Батлере; Майкл Г. Хинчи; Мария М. Ларрондо-Петри (ред.). ICFEM'07: Учеб. Формальные инженерные методы 9-го Межд. Конф. по формальным методам и программной инженерии . Бока-Ратон, Флорида: Springer Verlag , Берлин, Гейдельберг. стр. 366–386. ISBN  978-3540766483 .
  31. ^ Донгол, Бриджеш; Хейс, Ян (апрель 2007 г.). Семантика трассировки теории Овицкого-Гриса, интегрированная с логикой прогресса из UNITY (PDF) (Технический отчет). Университет Квинсленда . ССЕ-2007-02.
  32. ^ Лахав, Ори; Вафеиадис, Виктор (2015). «Рассуждения Овики-Гриса о моделях слабой памяти» . Ин Халлдорссон, М.; Ивама, К.; Кобаяши, Н.; Спекманн, Б. (ред.). Автоматы, языки и программирование. ИКП 2015 . ICALP 2015. Конспекты лекций по информатике. Том. 9135. Берлин, Гейдельберг: Springer. стр. 311–323. дои : 10.1007/978-3-662-47666-6_25 .
  33. ^ Инь, Миншэн; Чжоу, Ли; Ли, Янцзя (2018). «Рассуждения о параллельных квантовых программах». arXiv : 1810.11334 [ cs.LO ].
  34. ^ Раад, Азалия; Лахав, Ори; Вафеиадис, Виктор (13 ноября 2020 г.). «Настойчивые рассуждения Овики-Гриса: программная логика рассуждений о постоянных программах на Intel-x86». Труды ACM по языкам программирования . Том. 4. АКМ . стр. 1–28. дои : 10.1145/3428219 . hdl : 10044/1/97398 .
  35. ^ Шнайдер, Фред Б. (1997). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). О параллельном программировании . Тексты для аспирантов по информатике. Springer-Verlag New York Inc. doi : 10.1007/978-1-4612-1830-2 . ISBN  978-1-4612-1830-2 . S2CID   9980317 .
  36. ^ Апт, Кшиштоф Р.; Ольдерог, Эрнст-Рюдигер (1991). Грайс, Дэвид (ред.). Верификация последовательных и параллельных программ . Тексты по информатике. Шпрингер Верлаг Германия.
  37. ^ Апт, Кшиштоф Р.; Бур, Фрэнк С.; Ольдерог, Эрнст-Рюдигер (2009). Грис, Дэвид ; Шнайдер, Фред Б. (ред.). Верификация последовательных и параллельных программ . Тексты по информатике (3-е изд.). Спрингер-Верлаг Лондон. п. 502. Бибкод : 2009vscp.book.....A . дои : 10.1007/978-1-84882-745-5 . ISBN  978-1-84882-744-8 .
  38. ^ Разбойник Уильям-Пол; Фермер Уильям-Пол; Ханнеман, Ульрих; Хуман, Джозеф; Лахнех, Ясин; Поэль, Маннес; Цвирс, Иов (2012). Абрамский С. (ред.). Проверка параллелизма: введение в композиционные и некомпозиционные методы . Кембриджские трактаты по теоретической информатике. Издательство Кембриджского университета, США. п. 800. ISBN  978-0521169325 .
  39. ^ Ньето, Леонор Пренса (31 января 2002 г.). Верификация параллельных программ с помощью методов Овицкого-Гриса и гарантий доверия в Isabelle/HOL (кандидатская диссертация). Технический университет Мюнхена. п. 198 . Проверено 5 июля 2022 г.
  40. ^ Нипков, Тобиас; Ньето, Леонор Пренса (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 .
  41. ^ Абрахам, Эрика (20 января 2005 г.). Система подтверждения утверждений для многопоточной Java - теория и инструментальная поддержка (кандидатская диссертация). Университет Лейдена. п. 220. HDL : 1887/584 . ISBN  9090189084 . Проверено 5 июля 2022 г.
  42. ^ Авраам, Эрика; Бур, Франк, С., де; Ровер, Виллем-Поль, де; Мартин, Штеффен (25 февраля 2005 г.). «Система доказательства на основе утверждений для многопоточной Java» . Теоретическая информатика . 331 (2–3). Эльзевир : 251–290. дои : 10.1016/j.tcs.2004.09.019 . {{cite journal}}: CS1 maint: несколько имен: список авторов ( ссылка )
  43. ^ Дениссен, PEJG (ноябрь 2017 г.). Расширение Dafny до Concurrency: проверка программы в стиле Овики-Гриса для верификатора программы Dafny (магистерская диссертация). Эйндховенский технологический университет.
  44. ^ «Язык программирования Дафни» . Проверено 20 июля 2022 г.
  45. ^ Амани, С.; Андроник, Дж.; Бортин, М.; Льюис, К.; Ризкалла, К.; Туонг, Дж. (16 января 2017 г.). Ив Берто; Виктор Вафеядид (ред.). COMPLX: структура проверки для параллельных императивных программ . CPP 2017: Материалы 6-й конференции ACM SIGPLAN по сертифицированным программам и доказательствам. Париж, Франция: ACM . стр. 138–150. дои : 10.1145/3018610.3018627 . ISBN  978-1-4503-4705-1 .
  46. ^ Далванди, Садег; Донгол, Бриджеш; Доэрти, Саймон; Верхайм, Хайке (февраль 2022 г.). «Интеграция Овицкого-Гриса для моделей памяти в стиле C11 в Isabelle/HOL» . Журнал автоматизированного рассуждения . 66 : 141–171. arXiv : 2004.02983 . дои : 10.1007/s10817-021-09610-2 . S2CID   215238874 .
  47. ^ «Civl: средство проверки параллельных программ» . Проверено 22 июля 2022 г.
  48. ^ Крагл, Бернхард; Кадир, Шаз; Хензингер, Томас А. (2020). «Уточнение структурированных параллельных программ». В С. Лахири; К. Ван (ред.). CAV 2020: Компьютерная проверка . Конспекты лекций по информатике. Том. 12224. Спрингер Верлаг . дои : 10.1007/978-3-030-53288-8_14 . ISBN  978-3-030-53288-8 .
  49. ^ Эсен, Зафер; Рюммер, Филипп (октябрь 2022 г.). «TRICERA Проверка программ на языке C с использованием теории куч». У А. Гриджио; Н. Рунгта (ред.). Учеб. 22-я Конф. по формальным методам в системах автоматизированного проектирования — FMCAD 2022 . TU Wien Academic Press. стр. 360–391. дои : 10.34727/2022/isbn.978-3-85448-053-2_45 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 19ae86d8dddbd322e4180489398b1c2a__1715568960
URL1:https://arc.ask3.ru/arc/aa/19/2a/19ae86d8dddbd322e4180489398b1c2a.html
Заголовок, (Title) документа по адресу, URL1:
Interference freedom - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)