Научная статья на тему 'Применение сетей Петри и метода построения графа информационных зависимостей для решения задач верификации и распараллеливания вычислений'

Применение сетей Петри и метода построения графа информационных зависимостей для решения задач верификации и распараллеливания вычислений Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
482
52
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / СЕТИ ПЕТРИ / ГРАФ ИНФОРМАЦИОННЫХ ЗАВИСИМОСТЕЙ / ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ивутин А. Н., Дараган Е. И.

Рассмотрены основные аспекты распараллеливания программного обеспечения. Приведены примеры применения методики построения графа информационных зависимостей, а также показана возможность её использования для построения сетей Петри.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

APPLICATION OF PETRI NETS AND METHODS GRAPHING INFORMATION DEPENDENCIES FOR SOLVING PARALLEL COMPUTING AND VERIFICATION

The basic aspects of parallel software are considered. Examples of the application of a technique of constructing a graph of information dependencies, as well as the possibility of its use for the construction of Petri nets are presented.

Текст научной работы на тему «Применение сетей Петри и метода построения графа информационных зависимостей для решения задач верификации и распараллеливания вычислений»

УПРАВЛЕНИЕ, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

УДК 004.415.52

А.Н. Ивутин, канд. техн. наук, доц., (4872) 33-24-45, [email protected] (Россия, Тула, ТулГУ), Е.И. Дараган, асп., (4872) 35-01-24, [email protected] (Россия, Тула, ТулГУ)

ПРИМЕНЕНИЕ СЕТЕЙ ПЕТРИ И МЕТОДА ПОСТРОЕНИЯ ГРАФА ИНФОРМАЦИОННЫХ ЗАВИСИМОСТЕЙ ДЛЯ РЕШЕНИЯ ЗАДАЧ ВЕРИФИКАЦИИ И РАСПАРАЛЛЕЛИВАНИЯ ВЫЧИСЛЕНИЙ

Рассмотрены основные аспекты распараллеливания программного обеспечения. Приведены примеры применения методики построения графа информационных зависимостей, а также показана возможность её использования для построения сетей Петри.

Ключевые слова: программное обеспечение, сети Петри, граф информационных зависимостей, параллельные вычисления.

Верификация программного обеспечения - это процесс обработки и анализа кода, результатом выполнения которого является принятие решения о соответствии программы предъявляемым требованиям. В основе данного процесса лежат построение и проверка формальной модели программы. На данный момент разработано значительное число методов верификации, основанных на формальных и неформальных моделях [1]. Существенными недостатками таких моделей является либо недостаточная универсальность, либо экспоненциально возрастающая сложность построения и анализа [2].

Ключевым этапом проектирования моделей верификации является решение задачи выявления структурных особенностей программного кода. Общепринятым способом отображения зависимостей между блоками про-

219

граммы является граф информационных зависимостей. Под графом информационных зависимостей понимается граф, вершинами которого являются состояния рассматриваемой системы, а дугами - информационно-логические зависимости между ними.

Любое императивное программное обеспечение, в общем случае, представляет собой набор операторов, которые выполняются в строго заданном порядке. Порядок их исполнения определяется алгоритмом работы приложения. Выделим следующие группы алгоритмов:

- линейные алгоритмы. В коде отсутствуют логические переходы, операторы выполняются последовательно друг за другом;

- алгоритмы разветвленной структуры. В коде программы присутствуют логические или безусловные переходы. Выполнение того или иного оператора зависит от введенного условия.

Для построения информационных связей между состояниями программы необходимо выполнить следующие шаги:

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

2. На втором этапе, используя синтаксическое дерево, выделяются все возможные состояния - изменения связи объектов данных (переменных) с их значениями. Изменение значений является побочным эффектом операции присвоения, и во многих современных языках программирования сама операция также возвращает некоторый результат (как правило, копию присвоенного значения). На физическом уровне результат операции присвоения состоит в проведении записи и перезаписи ячеек памяти или регистров процессора Для таких распространенных языков программирования, как C, C++, Pascal, Delphi, состояния будем определять наличием в выражении оператора «=» (С, С++) или «:=» (Pascal, Delhi). В синтаксическом дереве выделяются узлы, имеющие указанные операторы.

Рис. 1. Дерево зависимостей состояний от переменных

220

3. Среди выделенных узлов выделяют те, которые тем или иным образом зависят друг от друга. Критерием для поиска таких состояний будут участвующие в операции переменные. Другими словами, зависимость состояния от другого состояния выражается в том, в какой части выражения участвует рассматриваемая переменная. Для зависимых состояний, она справа(RValue) от оператора присваивания (записи). Осуществляя поиск вхождений каждой переменной программы в выделенные состояния, можно получить дерево зависимости состояний от переменных (рис. 1).

4. Для каждого узла построенного на этапе 3 дерева осуществляется поиск состояний, в которых переменные участвуют в левой (LValue) части выражения. Совместив дерево зависимостей состояний от переменных и построенного на данном шаге дерева, получим искомое дерево зависимостей состояний от состояний (рис. 2).

Рис. 2. Дерево зависимостей состояний программы

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

Рис. 3. Пример графа информационных зависимостей

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

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

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

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

Бурное развитие многопроцессорных систем и накопленный багаж последовательных алгоритмов делают актуальной задачу распараллеливания существующих императивных алгоритмов. Она делится на два этапа: анализ исходного кода и синтез параллельной системы. Анализ необходим для выявления скрытого параллелизма в исходной последовательной программе. Прежде всего, сюда включается выявление зависимостей по данным между операторами языка описания алгоритма. На этапе анализа могут собираться сведения о необходимом размещении данных в случае, если используется система с распределенной памятью. Кроме того, возможен сбор сведений о времени выполнения различных участков программы с целью выбора наилучшего варианта распараллеливания системы.

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

Приведем пример использования графа информационных зависимостей для построения схемы распараллеливания последовательной программы, описанной на языке высокого уровня.

Предположим, что в программе имеется несколько операторов (1), которые выполняют простые арифметические операции. При этом, структура программы такова, что выполнение последующего оператора возможно лишь при условии успешного завершения предшествующих вычис-

лений. Используя методику построения графа информационных зависимостей, краткое описание которой приводилось ранее, возможно получить граф информационных зависимостей программы (рис. 3).

уаг 4 := 2;

уаг1 := 100;

уаг2:= уаг1; (1)

уаг3 := уаг1 + уаг 4;

уаг 5 := уаг 3 + уаг 1 + уаг 2;

уаг7 := уаг3 + уаг5.

По графу зависимостей видно, что выполнение вычисления значений переменных «уаг2» и «уаг3» можно выполнять параллельно, т.к. между данными операциями отсутствует информационно-логическая связь. Вместе с этим, распараллелить вычисления операций «уаг5» и «уаг 3» невозможно, так, переменная «уаг 3» используется в качестве аргумента при подсчете значения «уаг5». Процесс выявления блоков, обработку которых можно производить параллельно, является достаточно сложным. В приведенном примере представлена линейная структура программы. В ней отсутствуют условные переходы между состояниями, циклы, а также вызовы функций и процедур. Распараллеливание, к примеру, такой распространенной синтаксической конструкции как циклы, является задачей нетривиальной. На данный момент известны такие методики распределения вычислений в циклах как метод гиперплоскостей, метод координат, метод параллелепипедов [3].

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

Напомним, что сеть Петри представляет собой двудольный ориентированный граф, состоящий из вершин двух типов - позиций и переходов, соединённых между собой дугами. В позициях могут размещаться маркеры, способные перемещаться по сети. Совокупность позиций маркеров в сети описывает состояние сети в каждый текущий момент времени и определяется системой условий.

Ключевой особенностью сетей Петри является наличие в его математическим аппарате понятия событий. Событием называют срабатывание

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

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

si: var4 := 2 s2: vari := 1QQ s3: vari := vari * var4 ч4: var2 := vari £5: varfj := varS *■ vari s7" var7 "= гагЗ ■*■ var5

Рис. 4. Сеть Петри, построенная по графу информационных

зависимостей

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

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

Таким образом, совместное построение сети Петри и графа информационных зависимостей программы является одним из возможных подходов к решению проблемы распараллеливания вычислений. Предложенная методика хорошо применима в области верификации программного обеспечения. Граф информационных зависимостей позволяет учитывать все особенности логической и информационной структуры программы, что является основным аспектом при построении моделей программы [4].

Список литературы

1. Ивутин А.Н., Дараган Е.И. Основные подходы к верификации программного обеспечения реального времени // Известия ТулГУ. Технические науки 2011. Вып. 2. С. 563-567

2. Hoffman L. Talking Model-Checking Technology // Communications of the ACM. 2008. Vol. 51. № 07/08. P.110-112

3. Касьянов В. Н., Мирзуитова И. Л. Реструктурирующие преобразования: Алгоритмы распараллеливания циклов.: Программные средства иматематические основы информатики. Новосибирск: ИСИ СО РАН, 2004 С.142-188.

4. Кларк Э.М., Грамберг О., Пелед Д. Верификация моделей программ: Model Checking. пер. с англ.; под ред. Р. Смелянского. М.:МЦНМО, 2002. 416 с.

A.N. Ivutin, E.I. Daragan

APPLICATION OF PETRI NETS AND METHODS GRAPHING INFORMATION DEPENDENCIES FOR SOLVING PARALLEL COMPUTING AND VERIFICATION

The basic aspects of parallel software are considered. Examples of the application of a technique of constructing a graph of information dependencies, as well as the possibility of its use for the construction of Petri nets are presented.

Key words: software, Petri nets, graph information dependencies, parallel computing.

Получено 16.09.11

УДК 004.412

А.Н. Ивутин, канд. техн. наук, доц.,

(4872) 33-24-45, а1ехеулуийп@£тай.сот (Россия, Тула, ТулГУ),

А.А. Суслин, асп., (960) 599-99-91, suslin@bгvs.net (Россия, Тула, ТулГУ)

ПОСТРОЕНИЕ БАЙЕСОВСКОЙ СЕТИ ДОВЕРИЯ ДЛЯ ОЦЕНКИ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ НА ОСНОВАНИИ ЭКСПЕРИМЕНТАЛЬНЫХ ДАННЫХ

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

Ключевые слова: байесовские сети доверия, байесовский вывод, надежность программного обеспечения, оценка надежности, информационная безопасность, статистические модели надежности.

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

226

i Надоели баннеры? Вы всегда можете отключить рекламу.