Программирование в 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 нет транзакта этого семейства .
|
