
- •Лабораторные работы 5-6
- •Модель управления ресурсами в локальной вычислительной сети.
- •Int Next_top; /* Номер следующего узла */
- •Построение замкнутой модели многопользовательской информационной системы
- •1.3. Модель бизнес-процесса «эффективность предприятия»
- •2. Построение интерфейса пользователя
- •2.1. Построение диалогового окна настройки параметров модели.
- •6.2.Использование функционального окна визуализации работы модели.
- •Void *pointer; // Настраиваемый указатель любой области
- •Int next; // Номер «текущего» узла
- •Void funcwindow(struct fwcb*);
- •Void funcwindow(struct fwcb *s)
- •Int xL; // X левого верхнего угла эллипса
- •InvalidateRect(shwnd,null,1);
Построение замкнутой модели многопользовательской информационной системы
Под замкнутой моделью информационной системы будем понимать модель системы, работающей в режиме “запрос-ответ” (например, это может быть работа группы пользователей с компьютерной сетью в диалоговом режиме), в которой транзакты, единожды сгенерированные, циркулируют в пределах графа модели, не погибая в терминаторе. Транзакт - запрос пользователя, выйдя из генератора, проходит по графу модели, превращается в ответ, возвращается к пользователю и вновь начинает играть роль запроса того же пользователя.
Моделировать новый запрос новым сгенерированным транзактом не представляется возможным, так как невозможно рассчитать заранее время обработки запроса системой (это случайная величина) и, следовательно, нельзя задать частоту генератора. В этом случае модель может быть построена следующим образом:
- пользователи (или группы пользователей, в зависимости от сложности моделируемой системы) представляются одно- или многоканальными узлами типа “сервер”;
- число каналов сервера соответствует числу пользователей, время обработки транзакта сервером соответствует времени подготовки пользователями запроса;
- приписываемая транзакту роль запроса или ответа обозначается в одном из его параметров;
- для зарядки транзактами серверов пользователей, принадлежащих к одному классу, используется единственный генератор, порождающий всего один транзакт, далее транзакты размножаются с помощью узлов типа “creat”.
Далее представлены варианты зарядки модели транзактами.
а) Зарядка одного многоканального сервера (рис. 18)
1
AG
4 запрос граф
2 модели
CRSответ
3 группа
T пользователей
Описание узлов имеет вид:
ag(“Cхема зарядки”,1,none,none,0.0,zero,zero,2);
top(2):creat(“Пользователи”,4,users,none,4,3);
place;
top(3):term(“Выключение AG”);
cheg(,1,none,none,modtime,zero,zero,3);
place;
top(4):serv(“Терминалы”,users,none,expo,think_time,
zero,zero,номер_следующего_узла>);
t->iu0=QUERY;
place;
Генератор (узел 1) в течение единицы модельного времени генерирует один транзакт, который попадает в узел “creat” (узел 2) в качестве порождающего. Узел 2 порождает семейство транзактов, количеством users (модельная константа - число пользователей) и с номером семейства 4 (номер узла, моделирующего работу пользователей). Порождающий транзакт погибает в терминаторе (узел 3). В этот же момент происходит перенастройка генератора (оператор cheg): интервал между генерацией транзактов устанавливается равным времени моделирования modtime (константа из оператора modbeg). Таким образом генератор “выключается”, так как за время моделирования больше не успевает выпустить ни одного транзакта. Порожденные же узлом “creat” транзакты попадают в узел “serv” (узел 4), моделирующий работу пользователей. Число каналов в нем равно числу влетевший в него транзактов (константа users), среднее время обслуживания транзакта равно среднему времени обдумывания пользователем запроса (модельная константа think_time). Далее, перед выходом транзакта из узла, ему присваивается начальная метка “запрос” ( в параметр iu0 заносится модельная константа QUERY).
Таким образом, по графу модели начинает циркулировать столько запросов, сколько имеется пользователей. Адрес же возврата запроса можно определить по значению параметра “номер семейства”. В случае с одним сервером пользователей эта проблема не столь актуальна, тогда как в двух описанных далее случаях этот способ очень удобен.
б) Зарядка нескольких одноканальных серверов (рис. 19)
Отличие этой схемы от варианта а) состоит в введении дополнительного узла “queue” (узел 4). Узел 2 “creat” генерирует users транзактов (по числу пользователей), не присваивая им номер семейства. Далее эти транзакты попадают в очередь (узел 4), где каждому из них присваивается свой номер семейства, равный номеру сервера, в который этот транзакт полетит. Также в параметр транзакта ru0 заносится среднее время задержки в сервере, моделирующем работу пользователя. Этот параметр используется при описании серверов пользователей (узлы 5 - users+4, где users - число серверов).
Описание узлов имеет вид:
ag(“Схема зарядки”,1,none,none,0.0,zero,zero,2);
top(2):creat(“Пользователи”,none,users,none,4,3);
place;
top(3):term(“Выключение AG”);
cheg(1,none,none,modtime,zero,zero,3);
place;
top(4):t->ft=addr[4]->na+5;
t->ru0=<время_обдумывания_запроса_пользователем>;
t->iu0=QUERY;
queue(“Выбор терминала”,none,t->ft);
place;
1 5
AG
S1
2 4 6
CR Q S2
3
T
в) Зарядка нескольких многоканальных серверов (рис. 20)
Третий вариант отличается от схемы б) введением второго узла “creat” (узел 5). Он получает последовательно из очереди (узел 4) порождающие транзакты, уже обладающие необходимыми параметрами для каждого сервера, моделирующего работу группы пользователей (см. описание узла 4 в п. б). Эти транзакты становятся образцами для порождаемых семейств. Количество транзактов, генерируемых дополнительно для каждого сервера, равно числу моделируемых этим сервером пользователей минус 1, так как порождающий транзакт-образец тоже используется в качестве запроса и поступает в тот же сервер, что и порожденные.
В данном случае первый узел “creat” генерирует транзакты - группы пользователей. Переменная users в описании узла - это число групп пользователей. Описание дополнительного узла “creat” имеет вид:
top(5):creat(“Пользователи”,t->ft,<число_каналов-1>,copy,
t->ft,t->ft);
place;
1
6
AG S1
2 4 5 7
CR Q CR S2
...
3 users+5
TSusers
Рис. 25. Система с несколькими многоканальными серверами
В описании узла 4 “queue” нужно также заменить параметр t->ft на номер 5, так как из очереди все транзакты идут в узел 5 “creat”.
Для описания серверов число пользователей можно задать в некотором массиве, доступ к которому осуществлять через значение параметра транзакта “номер семейства”, равный номеру соответствующего сервера.