ТЕОРИЯ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ. Теория вычислительных процессов
![]()
|
Основные определения Теоретико-множественное определение сетей Петри Пусть мультимножество это множество, допускающее вхождение нескольких экземпляров одного и того же элемента. СетьПетриN является четверкой N = (P,Т,I,O), где P = {p1,p2,...,pn} —конечное множество позиций, n 0; T = {t1, t2,..., tm} — конечное множество переходов, m 0; I:T ![]() О:T ![]() Позиция p ![]() ![]() ![]() ![]() ![]() ![]() Пример 4.1. Сеть Петри N = (P,T,I,O), P = {p1,p2,p3}, T = {t1,t2}, I(t1) = {p1,p1,p2}, O(t1) = {p3}, I(t2) = {p1,p2,p2}, O(t2) = {p3}. Использование мультимножеств входных и выходных позиций перехода, а не множеств, позволяет позиции быть кратным входом и кратным выходом перехода соответственно. При этом кратность определяется числом экземпляров позиции в соответствующем мультимножестве. Графы сетей Петри Наиболее наглядным представлением сети Петри является её графическое представление, которое представляет собой двудольный, ориентированный мультиграф. Граф сети Петри обладает двумя типами узлов: кружок, представляющий позицию сети Петри; и планка или прямоугольник, представляющие переход сети Петри. О ![]() В графе сети Петри не возможны дуги между двумя позициями и между двумя переходами. Маркировка сетей Петри Маркировка — это размещение по позициям сети Петри фишек, изображаемых на графе сети Петри точками. Фишки используются для определения выполнения сети Петри. Количество фишек в позиции при выполнении сети Петри может изменяться от 0 до бесконечности. М ![]() ![]() ![]() ![]() Маркированнаясеть Петри N = (P,Т,I,О,) определяется совокупностью структуры сети Петри (P,T,I,О) и маркировки . На рисунке 4.2 представлена маркированная сеть Петри = <1,0,1>. Множество всех маркировок сети Петри бесконечно. Если фишек, помещаемых в позицию слишком много, то удобнее не рисовать фишки в кружке этой позиции, а указывать их количество. Правила выполнения сетей Петри Сеть Петри выполняется посредством запусковпереходов. Запуск перехода управляется фишками в его входных позициях и сопровождается удалением фишек из этих позиций и добавлением новых фишек в его выходные позиции. Переход может запускаться только в том случае, когда он разрешен. Переход называется разрешенным, если каждая из его входных позиций содержит число фишек, не меньшее, чем число дуг, ведущих из этой позиции в переход (или кратности входной дуги). Пусть функция ^#: P ![]() ![]() ![]() ![]() Пусть функция #^: T ![]() ![]() ![]() ![]() П ![]() ![]() ![]() Запуск разрешённого перехода t ![]() ![]() ![]() Сеть Петри до запуска перехода t1 (рис. 4.3, а). Сеть Петри после запуска перехода t1 (рис. 4.3, б). Переход tв маркированной сети Петри с маркировкой может быть запущен всякий раз, когда он разрешен и врезультате этого запуска образуется новая маркировка ', определяемая для всех p ![]() '(p) = (p) – ^#(p,t) + #^(t,p). Запуски могут осуществляться до тех пор, пока существует хотя бы один разрешенный переход. Когда не останется ни одного разрешенного перехода, выполнение прекращается. Если запуск произвольного перехода t преобразует маркировку сети Петри в новую маркировку ', то будем говорить, что ' достижима из посредством запуска перехода t и обозначать этот факт, как ![]() Преобразование маркировки сети Петри изображено на рисунке 4.3. Переход t1 преобразует маркировку =<5,1> в маркировку ’=<2,3>. Моделирование систем на основе сетей Петри В этом разделе рассмотрим метод моделирования на основе сетей Петри, а также его применение для моделирования параллельных систем взаимодействующих процессов и решения ряда классических задач из области синхронизации процессов. События и условия Представление системы сетью Петри основано на двух основополагающих понятиях: событияхи условиях. Возникновением событий управляет состояние системы, которое может быть описано множеством условий. Условие может принимать либо значение «истина», либо значение «ложь». Возникновение события в системе возможно, если выполняются определённые условия – предусловиясобытия. Возникновение события может привести к выполнению других условий – постусловий события. Пример 4.2. Моделирование последовательной обработки запросов сервером базы данных. Сервер находится в состоянии ожидания до тех пор, пока от пользователя не поступит запрос клиента, который он обрабатывает и отправляет результат такой обработки пользователю. Условиями для рассматриваемой системы являются: а) сервер ждет; б) запрос поступил и ждет; в) сервер обрабатывает запрос; г) запрос обработан. Событиями для этой системы являются: 1. Запрос поступил. 2. Сервер начинает обработку запроса. 3. Сервер заканчивает обработку запроса. 4. Результат обработки отправляется клиенту.
Т ![]() На рисунке 4.4. предусловие выполняется для события 2. Одновременность и конфликт
Особенность сетей Петри - их асинхроннаяприрода. В сетях Петри отсутствует измерение времени. В них учитывается лишь важнейшее свойство времени – частичное упорядочение событий. Выполнение сети Петри (или поведение моделируемой системы) рассматривается здесь как последовательность дискретных событий, которая является одной из возможных. Если в какой-то момент времени разрешено более одного перехода, то любой из них может стать «следующим» запускаемым. Переходы в сети Петри, моделирующей некоторую систему, представляют ее примитивные события (длительность которых считается равной 0), и в один момент времени может быть запущен только один разрешённый переход. М ![]() В этой ситуации два перехода являются разрешенными и не влияют друг на друга в том смысле, что могут быть запущены один вслед за другим в любом порядке. Другая ситуация в приведенной справа сети Петри. Эти два разрешённые перехода находятся в конфликте, т. е. запуск одного из них удаляет фишку из общей входной позиции и тем самым запрещает запуск другого. Таким образом, моделируются взаимоисключающие события системы. Моделирование параллельных систем взаимодействующих процессов
Моделирование последовательных процессов Вырожденным случаем параллельной системы процессов является система с одним процессом. Сначала рассмотрим, как сетью Петри может быть представлен отдельный процесс. Отдельный процесс описывается программой на одном из существующих языков программирования. Пример 4.3. Последовательная программа на абстрактном языке программирования, вычисляющая Y! и произведение всех чётных чисел из отрезка [1,Y] для Y ![]() ![]() read(Y); X1:=1; X2:=1; while Y>0 do begin if mod(Y,2) = 0 then begin X1:=X1*Y; end; X2:=X2*Y; Y:=Y-1; end; write(X1); write(X2); end П ![]() Стандартный способ представления структуры программы и потока управления в ней - это блок-схемы, которые в свою очередь могут быть представлены сетями Петри. Блок-схема программы состоит из узлов двух типов (принятия решения, обозначаемых ромбами, и вычисления, обозначаемых прямоугольниками) и дуг между ними. Блок-схема программы изображена на рисунке 4.6, где блоки: a:read(Y); X1:=1; X2:=1; b: Y>0 c: mod(Y,2)=0 d: X1:=X1*Y; e: X2:=X2*Y; Y:=Y-1; f: write(X1); write(X2); В сети Петри (рисунок 4.7), моделирующей блок-схему, узлы блок-схемы представляются переходами сети Петри как показано ниже, а дуги блок-схемы — позициями сети Петри. Фишка в сети Петри представляет счетчик команд блок-схемы. Моделирование взаимодействия процессов. Параллельная система может строиться несколькими способами. Один из способов состоит в простом объединении процессов, без взаимодействия во время их одновременного выполнения. Так, например, если система строится этим способом из двух процессов, каждый из которых может быть представлен сетью Петри, то сеть Петри моделирующая одновременное выполнение двух процессов, является простым объединением сетей Петри для каждого из двух процессов. Начальная маркировка составной сети Петри имеет две фишки, по одной в каждой сети, представляя первоначальный счетчик команд процесса. Такой способ введения параллелизма имеет низкое практическое значение. Далее будем рассматривать параллельные системы процессов, допускающие взаимодействие процессов во время их параллельного выполнения. Существуют различные виды взаимодействия (синхронизации) процессов, в том числе: взаимодействие посредством общей памяти; - посредством передачи сообщения различных видов. Таким образом, для моделирования сетями Петри параллельных систем процессов, помимо последовательных процессов, необходимо уметь моделировать различные механизмы взаимодействия (синхронизации) процессов. Далее покажем, как сети Петри могут моделировать различные механизмы синхронизации процессов, на основе решения с помощью сетей Петри ряда задач, ставших классическими в области синхронизации. Задача о взаимном исключении. Пусть несколько процессов разделяют общую переменную, запись, файл или другой элемент данных. Для обновления разделяемого элементаданных процесс должен сначала считать старое значение, затем вычислить новое и, наконец, записать его на то же место. Если два процесса P1 и P2в одно и то же время пытаются выполнить такую последовательность действий, то могут возникнуть искажения данных. Например, возможна последовательность: Процесс P1 считывает значение х из разделяемого объекта; Процесс P2 считывает значение х из разделяемого объекта; Процесс P1 вычисляет новое значение х'=f(x); Процесс P2 вычисляет новое значение х"= g(x); Процесс P1 записывает х' в разделяемый объект; Процесс P2 записывает х" в разделяемый объект, уничтожая значение х; Результат вычисления процесса P1 потерян. Д ![]() Следующая сеть Петри (рис. 4.8) моделирует механизм взаимного исключения для двух процессов P1 и P2. Она легко обобщается на произвольное число процессов. Позиция m представляет условие «критическая секция свободна», разрешающее вход в критическую секцию. Попытка процесса P1 (P2) войти в критическую секцию осуществляется после помещения фишки в его позицию s1 (s2). Такая попытка может увенчаться успехом, если в позиции mсодержится фишка. Если оба процесса пытаются войти в критическую секцию одновременно, то переходы t1 иt2 вступят в конфликт, и только один из них сможет запуститься. Запуск t1 запретит запуск перехода t2, вынуждая процесс P2 ждать, пока процесс P1 выйдет из своей критической секции, и возвратит фишку обратно в позицию m. Задача о производителе/потребителе. В ![]() Позиция B представляет буфер, каждая фишка соответствует сообщению, которое произведено, но еще не использовано. Задача об обедающих философах. Напомним, что задача об обедающих философах была предложена Дейкстрой и связана с пятью философами, которые попеременно то гуляли по саду и думали, то ели. За едой философы сидят за круглым столом, в центре которого стояла большая миска спагетти. На столе также лежало пять вилок, по одной между соседними посадочными местами. Для употребления спагетти необходимо две вилки. Поэтому каждый философ должен сначала взять вилку слева и вилку справа, а затем приступать к еде. Возможна ситуация, в которой каждый философ возьмет вилку слева, а затем будет ждать, когда освободится вилка с правой стороны. Так они будут ждать, пока не умрут от голода. Тем самым, это состояние системы «обедающие философы» является тупиковым. П ![]() В этой сети Петри позиция пi, i ![]() ![]() Каждому философу i ![]() |