Программирование в GPSS - Синхронизация транзактов

Любые элементы в системах прямо или опосредованно связаны, взаимодействуют. Зависимость между процессами, протекающими в разных частях системы, нередко выражается в форме синхронизации, т.е. в форме взаимного согласования этих процессов по времени. Для моделирования различных видов синхронизации в GPSS применяются блоки SPLIT, ASSEMBLE, GATHER, MATCH, GATE .

Блок SPLIT предназначен для моделирования одновременного начала нескольких процессов. В момент входа транзакта в блок SPLIT создается несколько копий этого транзакта. Число копий задается в поле A. Исходный (порождающий) транзакт переходит в блок, определенный в поле B. Все копии переходят к блоку, следующему за SPLIT. Если поле C блока SPLIT пустое, то все копии идентичны породившему их транзакту. Например, при входе транзакта в блок

SPLIT 4,NEXT

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

Если поле C не пустое, то его значение интерпретируется как номер параметра транзакта. Пусть N - значение этого параметра в момент входа транзакта в блок SPLIT. Тогда в момент выхода из SPLIT данный параметр у исходного транзакта будет иметь значение N+1 , а у копий соответственно N+2, N+3, ... , N+K , где K - общее число вышедших из блока SPLIT транзактов. Например, если транзакт, имеющий нуль в десятом параметре, войдет в блок

SPLIT 2,ABCDE,10,

то параметр P10 у этого транзакта приобретет значение 1, а у копий соответственно 2 и 3 .

Транзакты - копии могут двигаться в модели независимо друг от друга. Копии могут проходить блоки SPLIT и порождать новые копии .

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

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

В одном блоке ASSEMBLE могут одновременно проходить сборку транзакты, принадлежащие к разным семействам. Например, если в блок

ASSEMBLE 4

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

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

Блок MATCH синхронизирует продвижение двух транзактов, принадлежащих к одному семейству и двигающихся в модели по различным путям. В поле A блока MATCH задается имя другого блока, который называется сопряженным блоком MATCH. Два транзакта, принадлежащие к одному семейству и поступающие в пустые сопряженные блоки MATCH в моменты времени T1 и T2 і T1, выходят из этих блоков одновременно в момент T2.

Пример. Необходимо промоделировать сборку изделий рабочими A,B и C. Изделия в разобранном виде поступают каждые 300 ± 100 мин. Каждое из них разделяется между рабочими A и B, которые параллельно готовят свою часть изделия к сборке. Подготовка изделия состоит из двух фаз, причем после окончания первой фазы производится сверка с одновременным участием обоих рабочих A и B. После сверки рабочие независимо друг от друга выполняют вторую фазу. На выполнение первой фазы рабочий A тратит 100 ± 20 мин, а рабочий B 80 ± 20 мин.

Вторую фазу рабочий A выполняет 50 ± 5 мин, а рабочий B 70 ± 10 мин.

После окончания работы рабочими A и B рабочий C выполняет сборку изделия. Сборка занимает 50 ± 5 мин. и не может быть начата до тех пор, пока рабочие A и B не закончили выполнение своих операций .

Модель описанного процесса может быть написана с применением блоков синхронизации транзактов:

*

* МОДЕЛЬ СБОРКИ ИЗДЕЛИЙ
GENERATE 300,100 ;ПОСТУПЛЕНИЕ ИЗДЕЛИЙ
SPLIT 1,MANB ;РАЗДЕЛЕНИЕ ИЗДЕЛИЙ
SEIZE 1 ;ЗАНЯТЬ РАБОЧЕГО А
ADVANCE 100,20 ;ПЕРВАЯ ФАЗА
ARB1 MATCH ARB2 ;ЖДАТЬ РАБОЧЕГО В
ADVANCE 50,5 ;ВТОРАЯ ФАЗА
RELEASE 1 ;ОСВОБОДИТЬ РАБОЧЕГО А
TRANSFER ,MANC ;ПЕРЕДАЧА ИЗДЕЛИЯ В СБОРКУ
MANB SEIZE 2 ;ЗАНЯТЬ РАБОЧЕГО В
ADVANCE 90,20 ;ВРЕМЯ ПЕРВОЙ ФАЗЫ
ARB2 MATCH ARB1 ;ЖДАТЬ РАБОЧЕГО А
ADVANCE 70,10 ;ВТОРАЯ ФАЗА
RELEASE 2 ;ОСВОБОДИТЬ РАБОЧЕГО В
MANC ASSEMBLE 2 ;ЖДАТЬ ОБЕ ЧАСТИ ИЗДЕЛИЯ
SEIZE 3 ;ЗАНЯТЬ РАБОЧЕГО С
ADVANCE 50,5 ;СБОРКА ИЗДЕЛИЯ
RELEASE 3 ;ОСВОБОДИТЬ РАБОЧЕГО С
TERMINATE 1 ;СБОРКА ЗАВЕРШЕНА
START 1000 ;МОДЕЛИРОВАТЬ 1000 СБОРОК
Отчет об исследовании.
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 300781.128 18 3 0
NAME VALUE
ARB1 5.000
ARB2 11.000
MANB 9.000
MANC 14.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1000 0 0
2 SPLIT 1000 0 0
3 SEIZE 1000 0 0
4 ADVANCE 1000 0 0
ARB1 5 MATCH 1000 0 0
6 ADVANCE 1000 0 0
7 RELEASE 1000 0 0
8 TRANSFER 1000 0 0
MANB 9 SEIZE 1000 0 0
10 ADVANCE 1000 0 0
ARB2 11 MATCH 1000 0 0
12 ADVANCE 1000 0 0
13 RELEASE 1000 0 0
MANC 14 ASSEMBLE 2000 0 0
15 SEIZE 1000 0 0
16 ADVANCE 1000 0 0
17 RELEASE 1000 0 0
18 TERMINATE 1000 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
1 1000 0.509 153.112 1 0 0 0 0 0
2 1000 0.576 173.246 1 0 0 0 0 0
3 1000 0.166 49.908 1 0 0 0 0 0

Синхронизация транзактов может производиться и с помощью уже известного нам блока GATE, если в нем указано условие синхронизации М или NM, а в поле A - имя блока ASSEMBLE, GATHER или MATCH. Условие М означает «в указанном блоке находится транзакт одного семейства с тем, который обращается к блоку GATE». Условие NM противоположно условию М. Например, если в модели имеются строки:

CPU GATE M PROG1
.
.
PROG1 MATCH PROG2
.
.
DISK GATE NM PROG2
.
.
PROG2 MATCH PROG1,

то в блок CPU транзакт сможет войти лишь при условии, что в блоке PROG1 в состоянии синхронизации находится другой транзакт из этого же семейства. В блок DISK транзакт какого - либо семейства сможет войти при условии, что в блоке PROG2 нет транзакта этого семейства .



 
Оглавление
Программирование в GPSS
прагматический аспект
Классы объектов языка GPSS
Интерпретации транзактов
Интерпретаций устройст
Элементы реальных систем
Очереди и таблицы
Блоки
Модельное время
Общеалгоритмические средства GPSS
Стандартные числовые атрибуты
Арифметические переменные
Логические (булевы) переменные
Функции
Ячейки и матрицы ячеек
Задание начальных значений ячеек и матриц
Объектно-ориентированные средства GPSS
Создание и уничтожение транзактов
Задержка транзактов в блоках ADVANCE
Операции занятия и освобождения устройств
Операции захвата и освобождения устройств
Операции блокирования и разблокирования устройств
Описание памятей и работа с ними
Операции с ключами
Блок GATE
Синхронизация транзактов
Изменение параметров транзактов
Управление маршрутами транзактов в модели
Сбор статистики с помощью очередей
Сбор статистики с помощью таблиц
Стандартные числовые атрибуты
Атрибуты транзактов
Атрибуты блоков
Системные атрибуты
Атрибуты оборудования
Статистические атрибуты
Атрибуты ячеек SAVEVALUE
Функции и переменные
Атрибуты списков пользователя
Атрибуты группы
Системные атрибуты
Блоки COUNT и SELECT
Все страницы