Теория вычислительных процессов |
Лекция 16 |
Лекция 16
4.3. Моделирование систем на основе сетей Петри
В этом разделе рассмотрим метод моделирования на основе сетей Петри, а также его применение для моделирования параллельных систем взаимодействующих процессов и решения ряда классических задач из области синхронизации процессов.
Представление системы сетью Петри основано на двух основополагающих понятиях: событиях и условиях. Возникновением событий управляет состояние системы, которое может быть описано множеством условий. Условие может принимать либо значение “истина”, либо значение “ложь”.
Возникновение события в системе возможно, если выполняются определённые условия - предусловuя события. Возникновение события может привести к выполненшо других условий - постусловий события.
Пример 4.2. Моделирование последовательной обработки запросов сервером базы данных. Сервер находится в состоянии ожидания до тех пор, пока от пользователя не поступит запрос клиента, который он обрабатывает и отправляет результат такой обработки пользователю.
Условиями для рассматриваемой системы являются:
а) сервер ждет;
б) запрос поступил и ждет;
в) сервер обрабатьвает запрос;
г) запрос обработан.
Событиями для этой системы являются:
1) Запрос поступил.
2) Сервер начинает обработку запроса.
3) Сервер заканчивает обработку запроса.
4) Результат обработки отправляется клиенту.
Для перечисленных событий можно составить следующую таблицу их пред- и постусловий.
Такое представление системы легко моделировать сетью Петри. В сети Петри условия моделируются позициями, события - переходами. При этом входы перехода являются предусловиями соответствующего события; выходы - постусловиями. Возникновение события моделируется запуском соответствующего перехода. Выполнение условия представляется фишкой в позиции, соответствующей этому условию. Запуск перехода удаляет фишки, представляющие выполнение предусловий и образует новые фишки, которые представляют выполнение постусловий.
Рис. 4.4.
На рисунке 4.4. предусловие выполняется для события 2.
4.3.2. Одновременность и конфликт
Особенность сетей Петри - их асинхронная природа. В сетях Петри отсутствует измерение времени. В них учитывается лишь важнейшее свойство времени - частичное упорядочение событий.
Выполнение сети Петри (или поведение моделируемой системы) рассматривается здесь как следовательность дискретных событий, которая является одной из возможных. Если в какой-то момент времени разрешено более одного перехода, то любой из них может стать “следующим” запускаемым. Переходы в сети Петри, моделирующей некоторую систему, представляют ее примитивные собьrrия (длительность которых считается равной 0), и в один момент времени может бьrrь запущен только один разрешенный переход.
Моделирование одновременного (параллельного) возникновения независимых событий системы в сети Петри демонстрируется на рисунке 4.5.
Рис. 4.5.
В этой ситуации два перехода являются разрешенными и не влияют друг на друга в том смысле, что могут бытъ запущены один вслед за другим в любом порядке. .
Другая ситуация в приведенной справа сети Петри. Эти два разрешённые перехода находятся в конфликте, т.е. запуск одного из них удаляет фишку из общей входной позиции и тем самым запрещает запуск другого. Таким образом, моделируются взаимоисключающие собьrrия системы.
4.3.3. Моделирование параллельных систем взаимодействующих процессов
4.3.3.1. Моделирование последовательных процессов
Вырожденным случаем параллельной системы процессов является система с одним процессом. Сначала рассмотрим, как сетью Петри может бытъ представлен отдельный процесс. Отдельный процесс описывается программой' на одном из существующих языков программирования.
Пример 4.3. Последовательная программа на абстрактном языке программирования, вычисляющая Y! и произведение всех чётных чисел из отрезка [l,Y] для Y Nat.
begin .
read(Y);
X1:=1;
Х2:=1;
while Y>0 do
begin
if mod(Y,2)=0
then begin
Х1:=Х1*Y;
end;
false begin
X2:=Х2*Y;
Y:=Y-1;
end;
write(X1);
write(X2);
end
Программа представляет два различных аспекта процесса: вычисление и управление. Сети Петри удачно представляют структуру и управление программ. Они предназначены для моделирования упорядочения действий и потока информации, а не для действительного вычисления самих значений.
Стандартный способ представления структуры программы и потока управления в ней - это блок-схемы, которые в свою очередь могут быть представлены сетями Петри. Блок-схема программы состоит из узлов двух типов (принятия решения, обозначаемых ромбами, и вычисления, обозначаемых прямоугольниками) и дуг между ними. Блок-схема программы изображена на рисунке 4.6, где блоки:
а: read(Y); Х1 :=1; Х2:=1;
b: Y>0
с: mod(Y,2)=0
d: Х1:=Х1*Y;
е: Х2:=Х2*Y; Y:=Y-1;
f: write(Xl); write(X2);
Рис.4.6.
В сети Петри (рисунок 4.7), моделирующей блок-схему, узлы блок-схемы представляются переходами сети Петри как показано ниже, а дуги блок-схемы - позициями сети Петри. Фишка в сети Петри представляет счетчик команд блок-схемы.
Рис. 4.7.
4.3.3.2. Моделирование взаимодействия процессов.
Параллельная система может строиться несколькими способами. Один из способов состоит в простом объединении процессов, без взаимодействия во время их одновременного выполнения. Так, например, если система строится этим способом из двух процессов, каждый из которых может быть представлен сетью Петри, то сеть Петри, моделирующая одновременное выполнение двух процессов, является простым объединением сетей Петри для каждого из двух процессов. Начальная маркировка составной сети Петри имеет две фишки, по одной в каждой сети, представляя первоначальный счетчик команд процесса.
Такой способ введения параллелизма имеет низкое практическое значение. Далее будем рассматривать параллельные системы процессов, допускающие взаимодействие процессов во время их параллельного выполнения.
Существуют различные виды взаимодействия (синхронизации) процессов, в том числе: взаимодействие посредством общей памяти; посредством передачи сообщения различных видов.
Таким образом, для моделирования сетями Петри параллельных систем процессов, помимо последовательных процессов, необходимо уметь моделировать различные механизмы взаимодействия (синхронизации) процессов.
Далее покажем, как сети Петри могут моделировать различные механизмы синхронизации процессов, на основе решения с помощью сетей Петри ряда задач, ставших классическими в области сиихронизации.
4.3.3.3. Задача о взаимном исключении
Пусть несколько процессов разделяют общую переменную, запись, файл или другой элемент данных. Для обновления разделяемого элемента данных процесс должен сначала считать старое значение, затем вычислить новое и, наконец, записать его на то же место. Если два процесса Р1 и Р2 в одно и то же время пытаются вьmолнить такую последовательность действий, то могут возникнугь искажения данных. Например, возможна последовательность:
1) Процесс Р1, считывает значение х из разделяемого объекта,
2) Процесс Р2 считывает значение х из разделяемого объекта.
3) Процесс Р1 вычисляет новое значение x'=f{x).
4) Процесс Р2 вычисляет новое значение x"=g(x).
5) Процесс Р1 записывает х' в разделяемый объект.
6) Процесс Р2 записывает х" в разделяемый объект, уничтожая значение х
Результат вычисления процесса Р1 потерян.
Для исключения подобных проблем используется метод взаимного исключения, основанный на понятии критическая секция. Критическая секция это участок кода процесса, на котором он осуществляет доступ к разделяемому объекту данных. Прежде, чем выполнить свою критическую секцию, процесс ждёт, пока другой процесс не закончит выполнение собственной критической секции (если такое выполнение имеет место). Затем он входит в критическую секцию и блокирует доступ для любого другого процесса к своей критической секции. После вьполнения процессом критической секции деблокируется доступ для других процессов к разделяемому объекту данных.
Следующая сеть Петри (рис. 4.8) моделирует механизм взаимного исключения для двух процессов Р1 и Р2. Она легко обобщается на произвольное число процессов.
Позиция m представляет условие “критическая секция свободна”, разрешающее вход в критическую секцию. Попытка процесса Р1 (Р2) войти в критиче .скую секцию осуществляется после помещения фишки в его позицию S1 (S2), Такая попытка может увенчаться успехом, если в позиции m содержится фишка. Если оба
Рис.4.8.
процесса пытаются войти в критическую секцию одновременно, то переходы t1 и t2 вступят в конфликт, и только один из них сможет запуститься. Запуск t1 запретит запуск перехода t2, вынуждая процесс Р2 ждать, пока процесс Р1 выйдет из своей критической секции, и возвратит фишку обратно в позицию m.
4.3.3.4. Задача о производителе/потребителе
В задаче о производителе/потребителе также присутствует разделяемый
объект - буфер, посредством которого реализуется взаимодействие через асинхронную передачу сообщений. Процесс-производитель создает сообщения, которые помещаются в буфер. Потребитель ждет, пока сообщение не будет помещено вбуфер, извлекает его оттуда и использует. Такое взаимодействие может быть промоделировано сетью Петри, изображенной на рисунке. 4.9.
Рис. 4.9.
Позиция В представляет буфер, каждая фишка соответствует сообщению, которое произведено, но еще не использовано.
4.3.3.5. Задача об обедающих философах
Напомним, что задача об обедающих философах бьша предложена Дейкстрой и связана с пятью философами, которые попеременно то гуляли по саду и думали, то ели. За едой философы сидели за круглым столом, в центре которого стояла большая миска спагетти. На столе также лежало пять вилок, по одной между соседними посадочными местами. Для употребления спагетти необходимо две вилки. Поэтому каждый философ должен сначала взять вилку слева и вилку справа, а затем приступать к еде. Возможна ситуация, в которой каждый философ возьмет вилку слева, а затем будет ждать, когда освободится вилка с правой стороны. Так они будут ждать, пока не умрут от голода. Тем самым, это состояние системы “обедающие философы” является тупиковым.
Проблема тупика в этой системе может быть решена путем следующей модификации ее правил поведения. Пусть философ при переходе из состояния размышления в состояние приема пищи берет одновременно обе вилки (слева и справа), если они свободны. Сеть Петри (рис. 4.10) моделирует такую модифицированную систему обедающих философов, свободную от тупиков.
В этой сети Петри позиция ni, i {l,2,З,4,5}, представляет условие “i-тая вилка свободна”. В начальной маркировке каждая из этих позиций имеет фишку. Каждому философу i
{l,2,З,4,5} соответствует две позиции: позиция дi - представляющая условие “i-тый философ думает”; и позиция еi - представляющая условие “i-тый философ ест”. В начальной маркировке все позиции дi содержат фишку, а все позиции еi пусты.
Каждому философу i {1,2,З,4,5} также соответствует два перехода: переход начi - представляющий событие “начало приема пищи i-тым философом”; и переход завi - представляющий событие “завершение приема пищи i-тым философом”.
назад | содержание | вперед