Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ-2013-анн-130515.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
1.69 Mб
Скачать

9.2. Моделирование сетями Петри задач о производителе/потребителе и о чтении/записи Задача о производителе и потребителе

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

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

На рис. 20.1 даны фрагменты двух параллельных процессов. Первый процесс – потребитель позиция p1, переход t1 (начало производства), потом p3 (собственно работа), переход t3 (сдача продукции на склад и разрешение на производство следующей единицы). Второй процесс: позиция p2 (потребность в продукции), переход t2 (выбор со склада), позиция p4 (использование), переход t4 (готовность получить ещё единицу продукции).

Р ис. 20.1. Модель задачи о производителе/потребителе.

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

Как происходит работа

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

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

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

Р ис. 20.2. Модель задачи о производителе/потребителе с ограниченным складом.

Задача о чтении/записи

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

Сеть, моделирующая эту задачу, похожа на сеть для задачи о взаимном исключении. Здесь тоже между процессами позиция, переключающая процессы, но она должна допускать n параллельных процессов чтения. Значит, в ней следует разместить n разрешающих фишек. Запись требует запрещения всех процессов чтения, то есть, вход перехода «начало записи» – n-кратная центральная позиция: для начала записи требуется наличие в ней n разрешающих фишек.

На рис. 20.3 изображены фрагменты двух процессов: чтения и записи, в центре управляющая позиция p с n разрешающими фишками. Процесс чтения: позиция p1, переход t1 (начало чтения), потом p3 (собственно чтение), переход t3 (чтение завершено), возврат фишек в p1 и p. Процесс записи: позиция p2, переход t2, позиция p4, переход t4, возврат фишки в p2 и n фишек в p.

Р ис. 20.3. Модель чтения/записи.

Начальная маркировка выглядит так: входная позиция для начала чтения содержит n фишек (может быть запущено n процессов чтения), центральная их должна разрешить, там тоже n фишек. Входная позиция для начала записи содержит одну фишку.

Как происходит работа

При чтении выбирается по фишке из позиций p1 и p (переход t1). Теперь могут быть запущены переходы t1 (новое чтение) и t3 (завершение старого). Начать запись невозможно: в позиции p недостаточно разрешающих фишек. Завершение чтения возвращает фишки. Как только появилось n фишек в управляющей позиции, т.е. все процессы завершились, можно запустить переход начала записи (переход t2), и все n фишек позиции p перейдут в переход. Теперь ни одно чтение, как и вторая запись, не возможно: позиция p стала пустой. Естественно, эти n фишек после записи нужно вернуть, чтобы процессы снова могли начаться.

Сеть Петри может запустить процесс, если в позиции есть фишка, но она не может проверить позицию на ноль фишек. Значит, мы не можем смоделировать бесконечное число процессов.