математическое моделирование. Т 1 МАТ. Моделирование. Литература по теме 197 Вопрос Узловые операторы. 201 Вопрос Текст программной модели смо. 202 Вопрос Сборка и запуск исполнительного модуля модели. 205
Скачать 1.51 Mb.
|
с метки-функции top (i), где i - номер этого узла (записывается с двоеточием). Начиная с метки top(i) транзакт проходит все операторы узла i без временных задержек и попадает в оператор place, где находится до тех пор, пока не появятся условия для перехода в следующий узел. В некоторых узлах одновременно могут находиться несколько транзактов и все они содержатся в операторе place. Не следует путать поток транзактов в модели с потоком управлений в обычной программе. Задержка транзакта в place - это и есть время пребывания в узле. После метки top(i) можно анализировать условия продвижения транзактов по графу модели, при этом используются операторы if или switch. Для динамического изменения направления движения транзактов, законов распределения, значений времени обслуживания и других параметров можно использовать операцию присваивания. Например, если в узле 3 нужно изменить значение переменной b в зависимости от значения переменной а, то следует записать: top(3): if (a < 0) b =4; else b =3*а+5; key («Переключатель», b); place; где key - оператор, определяющий узел типа клапан. Основным обязательным оператором, который стоит после двоеточия метки-функции, является оператор определения типа узла (узловой оператор). Этот оператор имеет условное наименование, совпадающее с типом узла. Сводка и краткая характеристика всех узлов, имеющихся в системе Pilgrim приводится в Приложении. В качестве узловых операторов могут использоваться все типы узлов кроме ag и parent. После узлового оператора могут размещаться сигнальные функции и операторы С++, образуя конструкцию: clcode { <операторы> } Эти операторы могут задавать различные действия по управлению работой модели, например, по сбору статистики или трассировке, которые будут обсуждаться далее. Последним оператором узла является оператор place; Описание узла иногда состоит только из метки-функции top(i), узлового оператора и оператора place. Например: top(i): key ( «Переключатель», j ); place; Вопрос 3. Текст программной модели СМО. На рис. 33 показан текст программы, который был сгенерирован на основании описания модели в конструкторе Gem для ранее рассмотренной модели СМО. #include forward { int fw; modbeg («СМО», 105, 2500, (long)time(NULL), none, 102, none,104, 2); ag («Генератор», 101, none, expo, 12.0, none, none, 102); network (dummy, dummy) { top (102): queue(«Очередь», none, 103); place; top (103): serv(«Сервер», 1, none, expo, 9.0, none, none, 104); place; top (104): term(«Терминатор 104»); place; fault (123); } modend («pilgrim.rep», 1, 8, page); return 0; } Рис. 33. Исходный текст программной модели СМО Для лучшего понимания сгенерированного текста приведем описание присутствующих в программе узловых операторов. Функция ag (Р1, Р2, Р3, Р4, Р5, Р6, Р7, Р8) описывает узел, порождающий в соответствии с заданным правилом в процессе моделирования транзакты и направляющий их в указанную точку (узел) модели. Функция имеет следующие параметры: Р1- символическое имя узла (строка длиной до 14 символов типа char);. Р2- номер узла-генератора (типа int); Р3- число (типа int в диапазоне 1-32767), обозначающее приоритет, который присваивается сгенерированному транзакту, или none, если приоритет не присваивается; Р4- тип функции распределения интервала времени между генерируемыми транзактами, имеющий значения: norm - нормальное распределение; unif - равномерное распределение; expo - экспоненциальное распределение; erln - обобщенное распределение Эрланга; beta - треугольное распределение; none -если интервал обслуживания является детерминированной величиной. Р5- величина (типа float), зависящая от типа функции распределения Р4: математическое ожидание интервала времени обслуживания транзакта (при Р4= norm, unif, expo); математическое ожидание одного слагаемого этого интервала (при Р4= erln); минимальное значение интервала (при Р4= beta); постоянная величина этого интервала (при Р4= попе). Р6 - величина (типа float), зависящая от типа функции распределения Р4: среднеквадратичное отклонение времени обслуживания (Р4= norm); максимальное отклонение от среднего времени обслуживания (Р4= unif); значение zero (Р4 = expo, none); число слагаемых, распределенных по экспоненциальному закону и входящих в случайный интервал обслуживания (если Р4= erln, то Р6 > 0); наиболее вероятное значение интервала времени обслуживания транзакта (при P4=beta). Р7- величина (типа float), зависящая от типа функции распределения Р4: максимально возможное значение интервала времени обслуживания транзакта (P4=beta); значение zero (Р4= norm, unif, expo, erln, ш). Р8- номер узла (типа int), в который поступает сгенерированный транзакт (узел-приемник). Функция queue (Р1,Р2,Р3) описывает узел, моделирующий очередь транзактов. Функция имеет следующие параметры. Р1 - символическое имя узла (строка длиной до 14 символов типа char); Р2 - тип организации очереди (типа int): Р2 - рйу, если очередь с приоритетами, Р2 - none, если очередь без приоритетов. Р3 - номер узла (типа int), в который переходит транзакт из очереди (узел-приемник). Если в качестве параметра Р6 оператора |