Операторы, имитирующие работу группирующей категории
Группирующую категорию образуют группы и списки. На языке GPSS W имеются различные по своему функциональному назначению списки, в том числе текущих событий, будущих событий, прерванных транзактов, транзактов, ожидающих в очереди. Наибольший интерес для программиста представляют списки пользователя, которые можно использовать для повышения эффективности работы программы. Списки пользователя позволяют поместить в них некоторые транзакты, которые не могут передвигаться в модели, в чем заранее уверен программист, и они выводятся из активного состояния, то есть переводятся в пассивное состояние. Этим самым они фактически лишаются регулярного «просмотра» диспетчером модели, за счет чего происходит сокращение времени моделирования. Снова вернуть их в активное состояние может только программист, предусмотрев для этого возможность их вывода из списка пользователя с помощью каких-то активных транзактов. Для изменения состояния списков пользователя применяют следующие блоки, представленные в таблице 1.12.
Таблица 1.16. Операторы, имитирующие работу группирующей категории
№ | Блок | Описание |
LINK A,B,C | Посылка активных транзактов в список пользователя, | |
UNLINK O A,B,C,D,E,F | Вывод пассивных транзактов из списка пользователя |
В операнде А данных блоков записывается идентификатор списка пользователя. В операнде В блока LINK указывается дисциплина помещения транзакта в список пользователя. Допустимы следующие дисциплины:
1. FIFO – первый пришел, первым вышел.
2. LIFO – последний пришел, первым вышел.
3. PR – чем выше приоритет, тем ближе к выходу из списка пользователя устанавливается транзакт.
4. Р – чем меньше число в параметре, тем ближе к выходу из списка пользователя устанавливается транзакт; в данном режиме требуется обязательно указать идентификатор параметра.
Ввод в список пользователя любого нового транзакта приводит к пересмотру очереди транзактов по выходу их из списка пользователя. Транзакт, вошедший в блок LINK, пытается войти в блок, метка которого указана в операнде С и таким образом, остаться активным. Если же это не удается, он переводится в пассивное состояние по правилу, заданному в операнде В.
Вывод пассивных транзактов из списка пользователя производится при поступлении какого-либо активного транзакта в блок UNLINK. В операнде O блока UNLINK записывается один из условных операторов отношений, или не записывается ничего. В операнде А блока UNLINK указывается идентификатор списка пользователя. В операнде В указывается метка, к которой направляются пассивные транзакты из списка, а активный транзакт переходит к следующему блоку. В операнде С указывается количество пассивных транзактов, удаляемых из списка пользователя. Если удаляются все транзакты, то записывается символ ALL. В операнде D указывается проверяемое значение. В операнде E указывается контрольное значение, которое сравнивается с содержимым операнда D. В операнде F указывается метка, к которой направляется транзакт в случае если по указанному условию в списке пользователя не удалось найти ни одного транзакта. Если в операнде F ничего не указано, то транзакт в любом случае направляется к следующему блоку.
Примеры использования описанных выше блоков приведены в таблице 1.17.
Таблица 1.17 Примеры использования операторов, имитирующих работу группирующей категории
Пример использования оператора | Комментарии |
LINK ONHOLD,FIFO | Активный транзакт помещается в конец списка пользователя с именем ONHOLD |
UNLINK |
Дата добавления: 2015-01-13; просмотров: 864;