Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мим.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

510 Sunavail nak

В поле <A> блока задается имя накопителя (оператора STORAGE). В программе накопитель под именем NAK становится недоступным.

Формат записи блока SAVAIL:

530 Savail nak

Блок SAVAIL переводит накопитель под именем NAK из состояния недоступности в состояние доступности. В поле <A> блока SAVAIL задается имя накопителя, которое переводится в состояние доступности.

Блоки SUNAVAIL и SAVAIL работают совместно.

В данной программе перевод из состояния недоступности в состояние доступности происходит через 17 мин. (в поле <A> блока ADVANCE под номером 520 задано время задержки, равное 17 мин.). В то же время состояние недоступности наступает каждые 291 мин. Команды на недоступность генерируются блоком GENERATE под номером 500.

Формат записи блока GATE в режиме SNV:

20 Gate snv nak,facil2

В операционном поле <X> блока GATE задан логический операнд SNV — многоканальное устройство (накопитель) не доступно. В поле <A> определено имя накопителя (в программе nak), состояние которого проверяется. В поле <B> задается альтернативный блок (в программе FACIL2), если логический операнд поля <X> имеет значение "ложь". Если альтернативный блок задан, то блок GATE работает в режиме безусловного входа, т.е. транзакт всегда может войти в блок GATE. При этом если логический операнд имеет значение "истина", то транзакт пытается войти в следующий по номеру блок (в программе блок под номером 30). Если же операнд имеет значение "ложь", то транзакт пытается войти в альтернативный блок, заданный полем <B> (в программе блок под номером 100 и с меткой FACIL2).

Перераспределение требований по устройствам может быть изменено блоком GATE с другим условием в операционном поле <X>.

Приведем программу под номером 8 для решения примера 7, в котором зададим условие доступности накопителя. Для этого случая в поле <X> блока GATE установим логический операнд SV. Изменение режима работы блока GATE отразится на статистике устройств и накопителя.

Программа 8

SIMULATE

nak STORAGE 3; Накопитель емкостью в 3 единицы

***************************************************************

10 GENERATE 5,1,,100

20 GATE SV nak,FACIL2; Анализ доступности накопителя

30 ENTER nak

40 FACIL1 SEIZE 1; 1-е устройство с меткой FACIL1

50 LEAVE nak

60 ADVANCE 13,1

70 RELEASE 1

80 TRANSFER ,EXIT

100 FACIL2 SEIZE 2; 2-е устройство с меткой FACIL2

200 ADVANCE 9,1

300 RELEASE 2

400 EXIT TERMINATE 1

500 GENERATE 29,1; Команды недоступности

510 SUNAVAIL NAK

520 ADVANCE 17

530 SAVAIL NAK

550 TERMINATE

START 100

;END

Задание к программам 7 и 8.

  • Видоизменить программы так, чтобы моделирование осуществлялось в течение 5 часов.

  • В исходных программах изменить емкость накопителя: 2, 4, 5, 6, 7, 8, 9, 10.

  • В исходных программах команды недоступности генерировать по средним значениям из интервала от 15 до 50 мин.

  • Запрограммировать ситуацию: если 1-е устройство не доступно, то транзакты должны покидать систему. Система функционирует 5 часов.

  • Изучить и объяснить файлы стандартных отчетов.

Моделирование накопления транзактов, синхронизации движения транзактов по модели, управление потоком транзактов в зависимости

от состояния логического ключа

Блок GATHER осуществляет накопление сообщений (транзактов), принадлежащих одному и тому же набору (ансамблю), с последующей попыткой одновременной передачи их к следующему блоку. Действие блока GATHER аналогично действию блока ASSEMBLE. Отличие состоит в том, что после накопления в блоке числа транзактов, указанного в поле <A>, они все передаются в следующий блок. Блок GATHER не уничтожает вошедших транзактов.

Блок MATCH предназначен для синхронизации продвижения двух транзактов одного ансамбля (семейства), движущихся по разным путям модели. Для синхронизации необходимы два блока MATCH, находящиеся в соответствующих местах моделирующей программы и называемые сопряженными.

Для представления в модели коммутируемых объектов используют логические ключи, моделируемые блоками LOGIC и GATE. Блок LOGIC устанавливает положение ключа, которое может быть проверено любым сообщением (транзактом) в любой части модели. Блок LOGIC используется для "включения", "выключения" или инвертирования состояния ключа. Блок GATE, в зависимости от состояния логического ключа, осуществляет управление потоком транзактов.

Пример 8. Смоделировать следующий процесс прохождения 100 пакетов на почте.

На участок сборки пакетов поступают коробки, и письма с интервалом времени 254 единицы. На контроль коробки затрачивается 41 единицы времени; контроль писем производится последовательно со временем 21 единица времени на письмо. Операция сборки требует одновременного поступления коробки и всех писем и производится со временем 42 единицы. В одной коробке должно быть 8 писем. Все процессы подчиняются равномерному закону.

Единица времени задается пользователем. Система GPSS/PC осуществляет моделирование в относительных единицах, поэтому в файле стандартного отчета указываемые единицы времени можно рассматривать как те, которые задаются пользователем (минуты, секунды и т.д.). Решение примера 8 приводится как программа 9.

Программа 9

simulate

10 generate 25,4,,100

20 split 8,chan2

30 chan1 seize 1

40 advance 4,1

50 release 1

60 transfer ,comm

70 chan2 seize 2

80 advance 2,1

90 release 2

100 gather 8

110 comm assemble 9

120 chan3 seize 3

130 advance 4,2

140 release 3

150 exit terminate 1

start 100

;end

Формат записи блока GATHER:

  1. gather <A>

В поле <A> задается число транзактов, принадлежащих к одному семейству, которое надо накопить (в программе 8 транзактов). Операнд поля <A> может быть именем, положительным целым (как в программе число 8), СЧА, СЧА с параметром (СЧА$<параметр>). При входе транзакта в блок GATHER, интерпретатор GPSS/PC просматривает семейство, к которому он принадлежит, и проверяет, находится ли в данном блоке GATHER другой транзакт из того же семейства. Если в блок GATHER не вошло заданное число транзактов, транзакты, находящиеся в блоке, остаются в состоянии синхронизации.

В программе после поступления в блок GATHER 8 транзактов они все выходят из блока и поступают в следующий по номеру блок — блок под номером 110 ASSEMBLE. Блок ASSEMBLE по своему функциональному назначению собирает 9 транзактов и отправляет в следующий по номеру блок один транзакт. С помощью блока ASSEMBLE моделируется процесс сборки пакета — 8 писем и коробка.

Изучение блока MATCH.

Пример 9. Информация поступает на узел связи с интервалом времени 30050 единиц. Обработку производят двое операторов. После завершения операции обработки, выполняемой первым оператором со временем 90 единиц и вторым со временем 60 единиц, производится операция сверки, время выполнения которой принимается равной нулю. Затем третий оператор производит формирование пакета информации со временем 40 единиц. Формирование начинается только после поступления всех отдельных частей информации (условных частей информации). Смоделировать процесс прохождения 100 пакетов информации. Программа решения примера 9 представлена как программа 10.

Программа 10

simulate

10 generate 300,50

20 split 1,chan2

30 chan1 seize 1

40 advance 90

50 sss1 match sss2

60 release 1

70 transfer ,comm

80 chan2 seize 2

90 advance 60

100 sss2 match sss1

110 release 2

120 comm assemble 2

130 seize 3

140 advance 40

150 release 3

200 terminate 1

start 100

;end

Из условия примера видно, что специальных мер по реализации прохождения точно 100 пакетов не требуется, так как время поступления условных частей информации на обработку заметно больше суммарного времени обработки: 30050 против 90+60+40=190. В блоке GENERATE не используется поле <D> с установкой числа 100. Синхронизация прохождения транзактов по модели осуществляется с помощью двух блоков MATCH. Один блок MATCH установлен как бы в первом устройстве, а другой — во втором. Транзакты не отправляются в блок ASSEMBLE (на формирование пакета) до тех пор, пока оба устройства (оба оператора) не закончат требуемую обработку.

Формат записи блоков MATCH:

50 sss1 match <A>

100 sss2 match <A>

В поле <A> блока MATCH (под номером 50 и меткой sss1) в программе задается имя сопряженного блока MATCH (метка sss2 под номером 100). Синхронизация движения транзактов осуществляется путем подбора пар транзактов из одного ансамбля и задержки этих транзактов до тех пор, пока оба транзакта из одной пары не поступят в заданные точки модели (в программе это выходы устройств — блоки RELEASE под номерами 60 и 110, откуда они поступают далее на формирование пакета в блок ASSEMBLE).

Без условий синхронизации пример 9 можно видоизменить к следующему виду.

Пример 10. Информация поступает на узел связи с интервалом времени 30050 единиц. Обработку производят двое операторов. После завершения операции обработки, выполняемой первым оператором со временем 90 единиц и вторым со временем 60 единиц, информация отправляется к третьему оператору. Третий оператор производит формирование пакета из поступивших частей информации со временем 40 единиц. Смоделировать процесс прохождения 100 пакетов.

Программа решения примера 10 представлена как программа 11.

Программа 11

simulate

10 generate 300,50

20 split 1,chan2

30 chan1 seize 1

40 advance 90

50 release 1

60 transfer ,comm

70 chan2 seize 2

80 advance 60

90 release 2

100 comm assemble 2

110 seize 3

120 advance 40

130 release 3

200 terminate 1

start 100

;end

Программа 11 по сравнению с программой 10 имеет на два блока меньше, но это приводит к иным результатам. Анализ результатов произвести по файлам стандартного отчета.

Работа логического ключа

Пример 11. На обработку поступают 101 требование с интервалом времени 71 единицы. Нечетные по номеру требования обрабатываются на первом приборе со временем 15 единиц, четные — на втором приборе со временем 17 единиц. Смоделировать процесс прохождения и обработки требований в системе.

Формирование потока четных и нечетных по номеру требований осуществляется блоками LOGIC и GATE (в режиме LS).

Решение примера 11 приводится в программе 12.

Программа 12

simulate

10 generate 10,1,,101

20 logic I key1; Задание операции инвертирования ключа key1

30 gate LS key1,chan2

40 chan1 seize 1

50 advance 15

60 release 1

70 transfer ,exit

80 chan2 seize 2

90 advance 17

100 release 2

200 exit terminate 1

start 101

end

Формат записи блока LOGIC:

  1. logic <X> <A>

Во вспомогательном поле операций <X> задается мнемоническое обозначение I — логический ключ под именем key1 инвертируется. В поле <A> задается номер или имя (в программе имя key1) логического ключа. Ссылка на имя ключа может происходить в любом месте программы. В поле <X> могут быть также заданы следующие мнемонические обозначения:

S — логический ключ устанавливается в состояние "включен";

R — логический ключ устанавливается в состояние "выключен".

Формат записи блока GATE для проверки логических ключей:

  1. gate <X> <A>,<B>

Во вспомогательном поле <X> задается один из следующих логических операторов:

LS — логический ключ, заданный в поле <A>, включен;

LR — логический ключ, заданный в поле <A>, выключен.

В поле <A> задается номер или имя логического ключа, состояние котрого проверяется (в программе key1). В поле <B> задается номер блока, к которому переходит транзакт, если логический оператор вспомогательного поля <X> имеет значение "ложь" (в программе устройство с меткой chan2). Если значение логического оператора — "истина", транзакт переходит к следующему по номеру блоку (в устройство с меткой chan1 под номером 40).

Задания к примерам 9, 11.

  • Для примера 9 изменить средние времена обработки: 60 и 90, 60 и 60, 120 и 60, 60 и 120, соответственно для первого и второго устройств.

  • Для примера 11 применить режим LS блока GATE для изменения порядка прохождения через устройства четных и нечетных транзактов. В исходной программе применить режимы "S" и "R" для блока LOGIC. Написать программу, в которой четные транзакты обрабатываются в устройстве пятикратным циклом, а нечетные транзакты обрабатываются семикратным циклом. В программе изменить имя логического ключа, задать какой-либо числовой номер логического ключа.

  • Изучить и объяснить файлы стандартных отчетов рассмотренных программ.

Лабораторная работа №6

Программирование для статистической

и запоминающей категорий языка GPSS/PC.

Блоки MSAVEVALUE, TABULATE.

Операторы MATRIX, INITIAL, TABLE, QTABLE. Команда PLOT

Цель работы: ознакомление и изучение операторов и блоков системы GPSS/PC для формирования и сохранения матричных значений переменных, построение частотных таблиц заданных числовых атрибутов.

Статистическими объектами языка GPSS/PC являются очереди и таблицы. Регистрация частот попадания табулированной величины или заданного стандартного числового атрибута (СЧА) осуществляется блоком TABULATE. Табулируемая величина заносится в таблицу, имя и характеристики которой определяется оператором TABLE в общем случае и QTABLE для очереди. На основе сформированных таблиц возможно построение гистограмм (диаграмм) с помощью команды PLOT.

Для сохранения и запоминания в модели числовой информации, различных стандартных числовых атрибутов в GPSS/PC отводятся специальные ячейки основной памяти. Совокупности ячеек могут быть организованы в матрицы. Для записи числовой информации в ячейки служит блок SAVEVALUE, в матрицы — блок MSAVEVALUE, который работает совместно с оператором описания матриц MATRIX. Присвоение начальных значений ячейкам и матрицам производится с помощью оператора INITIAL.

Пример 1. На языке GPSS/PC создать две матрицы размером 23: одна должна быть заполнена натуральными нечетными числами, начиная с единицы, а другая со следующими элементами:

где с1 — СЧА — условное модельное время. Сохранить также выражение: целая часть от . Решение примера 1 приводится как программа 1.

Программа 1

simulate

var1 variable c1+100

var2 variable c1+sqr(100)

var3 variable int(sqr(101))

var4 variable sqr(625)

mat1 matrix ,2,3

mat2 matrix ,2,3

initial mx$mat2(2,3),10

initial mx$mat2(2,2),50

10 generate 7,2

*********************************

50 msavevalue mat1,1,1,1

60 msavevalue mat1,1,2,3

70 msavevalue mat1,1,3,5

80 msavevalue mat1,2,1,7

90 msavevalue mat1,2,2,9

100 msavevalue mat1,2,3,11

**********************************

110 msavevalue mat2,1,1,c1

120 msavevalue mat2,1,2,100

130 msavevalue mat2,1,3,v$var1

140 msavevalue mat2,2,1,v$var2

150 msavevalue mat2-,2,2,2

160 msavevalue mat2+,2,3,5

***********************************

170 savevalue mmm3,v$var3

200 terminate 1

start 10

;end

Формат записи операторов MATRIX:

mat1 matrix <A>,<B>,<C>

mat2 matrix <A>,<B>,<C>

Служебное слово MATRIX является операторм описания матрицы. Каждая матрица должна иметь свой оператор описания. Поле метки определяет имя матрицы (в программе это mat1 и mat2). Поле <A> в данной версии GPSS не используется (оставлено пустым для совместимости с более старыми версиями языка GPSS). В поле <B> задается число строк матрицы (для mat1 и mat2 число строк равно 2). В поле <C> задается число столбцов матрицы (для mat1 и mat2 число столбцов равно 3). Каждая матрица может содержать не более 8191 элементов.

Формат записи оператора задания начальных ячеек матрицы INITIAL:

initial mx$mat2(2,2),50

initial mx$mat2(2,3),10

Оператор INITIAL имеет поля <A> и <B>. В поле <A> задан стандартный числовой атрибут mx, связанный с именем матрицы посредством знака $, и с указанием номера строки и номера столбца определяемой матрицы. В поле <B> задается определяемая величина. Операнд поля <B> может быть целым действительным числом. Оператор задания матриц INITIAL должен располагаться в программе после определения матрицы оператором MATRIX.

Формат записи блока MSAVEVALUE рассмотрим на примере формирования матрицы под именем mat2. Во всех блоках используются поля <A>,<B>,<C>,<D>, поэтому приведем все блоки в заданных форматах программы 1.