- •Аннотация
- •Содержание:
- •Введение
- •1 Объекты системы моделирования сим-си
- •1.1 Общая классификация
- •1.2 Системные константы, типы и переменные
- •Системные типы
- •Скалярные типы данных
- •Множественные типы данных
- •Системные переменные
- •2 Принципы и методы построения моделей
- •2.1 Создание транзактов
- •2.2 Уничтожение транзактов
- •2.3 Продвижение транзактов
- •2.4 Задержка транзактов. Функцияdelayt
- •2.5 Блокировка транзактов
- •2.5.1 Функцияwait
- •2.5.2 Функцииacceptиsend
- •2.6 Изменение порядка осуществления событий. Функцияnехt
- •2.7 Использование приборов
- •2.7.1 Функции ввода транзактов в прибор
- •2.7.1.1 Захват прибора. Функцияinfac
- •2.7.1.2 Занятие прибора. Функцияseize
- •2.7.2 Функцияoutfac. Вывод транзакта из прибора
- •2.8 Регистрация очередей. Функцииinqueue,outqueue
- •2.9 Накопители (многоканальные устройства). Функцииenterиleave
- •2.10 Построение гистограмм. Функцииtabulate,newhist,prnhist
- •2.11. Создание, использование и обработка списков
- •2.11.1 Создание списков
- •2.11.2 Включение объектов в списки
- •2.11.3 Удаление объектов из списков
- •2.11.4 Просмотр элементов списка. Сканирование
- •2.11.5 Списки пользователя. Организация различных дисциплин обслуживания с помощью списков пользователя
- •2.12 Модельная среда
- •2.12.1 Создание модельной среды
- •2.12.2 Уничтожение очередей, приборов, накопителей и гистограмм
- •2.13 Ансамбли
- •2.13.1 Создание ансамблей. Функцияsplit
- •2.13.2 Сбор членов ансамбля. Функцияassemble
- •2.13.3 Изменение приоритета всех членов ансамбля. Функцияpriority
- •2.13.4 Изменение значения параметра всех членов ансамбля. Функцияparmans
- •2.14 Генераторы случайных чисел
- •2.15 Процесс моделирования. Функцияplan
- •2.16 Создание системной среды. Функцияinitlist
- •2.17 Структура модели
- •2.18 Сброс статистики и очистка системной и модельной среды. Функцииresetallиclear
- •3 Вывод результатов моделирования
- •4 Отладочные средства
- •4.1 Диагностика ошибок
- •4.2 Трассировка
- •Приложение 1. Коды и сообщения об ошибках
- •Приложение 2. Сообщения в режиме трассировки
- •Приложение 3. Системные константы и типы данных
- •Приложение 4. Системные переменные
- •Приложение 5 Заголовки системных функций
- •Приложение6. Примеры моделей Пример 1.
- •Пример 2.
- •Пример 3.
- •Диагностика ошибок
- •Системные списки Список current
- •Список прибора Fac f
- •Список future
2.15 Процесс моделирования. Функцияplan
Процесс моделирования заключается в многократном повторении функции void plan()и блока выбора события.
Внутри блока выбора события оператор switch(sysevent)выбирает событие, номер которого совпадает со значениемsysevent.
Функция plan:
1) переводит первый транзакт из списка waitl[sysevent], если этот список непустой, в списокcurrent; при этом устанавливаетсяwaitevent[sysevent]=false; если списокwaitl[sysevent]был пустой, устанавливаетсяwaitevent[sysevent]=true;
2) проверяет trans==nil:
если trans==nil, то функцияplanвыполняет (в порядке записи) одно из следующих действий:
- пытается выбрать активный транзакт из списка current;
- если список currentпустой, то выбирает активный транзакт из спискаfutureи устанавливает новое значение модельного времени, затем выбирает из спискаfutureвсе транзакты, значение поляnexttimeкоторых совпадает с новым значением модельного времени;
- назначает sysevent=trans->eve.
Если trans!=nil, то назначается sysevent=succ(sysevent).
2.16 Создание системной среды. Функцияinitlist
Перед началом моделирования необходимо создать системные списки, создать необходимое количество транзактов, поместив их в пассивный буфер и присвоить начальные значения системным переменным.
Это осуществляется функцией void initlist(int n). Параметр этой функции n- число транзактов, необходимое для моделирования.
2.17 Структура модели
Модель представляет собой функцию на C++ и оформляется соответствующим образом. Все модели имеют общие черты построения. Типовая структура модели приводится ниже:
voidmodel() {
//variables
pfacility <ссылки на приборы>;
pqueue<ссылки на очереди>;
pstorage<ссылки на накопители>;
plistt<ссылки на списки транзактов>;
phistogram<ссылки на гистограммы>;
...
initlist(<кол-во транзактов>);
newfac(...); ...;
newqueue(...); ...;
newstorage(..., ...); ...;
newuserlt(...); ...;
newhist(..., ...); ...;
initcreate(<номер события>,<время>); ...;
ограничение числа повторений, например, по времени:
while(systime<...) {
plan();
switch(sysevent){
case1: <действие для события 1>;break;
case2: <действие для события 2>;break;
case3: <действие для события 3>;break;
...
casen: <действие для событияN>;break;
}
}
printall();
}
2.18 Сброс статистики и очистка системной и модельной среды. Функцииresetallиclear
Функция voidresetall()служит для сброса статистики, накопленной в процессе моделирования. Для всех списков, очередей, приборов и накопителей обнуляются число входов, время занятости; время предыдущего обращения становится равнымsystime, и т.д.
Функция voidclear()возвращает все транзакты в списокdelist, сбрасывает всю накопленную статистику, т.е. возвращает систему в состояние, предшествующее началу моделирования.
3 Вывод результатов моделирования
Для печати статистики, собранной в результате моделирования, служит функция voidprintall(). Статистика, распечатываемая этой функцией приerrtest==false, содержит:
- значение абсолютного системного времени в виде
systime=<абсолютное системное время>;
- номер текущего события в виде
sysevent=<номер текущего события>;
- для всех выполняемых событий: количество выполнений каждого события в виде
event <номер события>
total <число выполнений>
- для всех очередей в модели: имя очереди, число входов, число входов с нулевым временем ожидания, максимальная длина, среднее время ожидания, процент входов в пустую очередь, текущая длина, среднее время ожидания без учета нулевых входов, средняя длина очереди;
- для всех приборов в модели: имя прибора, число входов, среднее время обработки транзакта в приборе, загрузка, число захватов;
- для всех накопителей в модели: имя накопителя, емкость, загрузка, среднее время пребывания транзакта в накопителе, текущее содержимое, максимальное содержимое, среднее содержимое, число входов;
- для всех списков пользователя: имя списка, текущая длина, максимальная длина, транзакты, находящиеся в списке с полями: номер, рrty(приоритет),еvе(событие инициализации),nехttimе(время попадания в список),аns(номер ансамбля), параметры транзакта.
- для выдачи на печать расширенной (аварийной) статистики необходимо выполнить присваивание errtest=true; при этом дополнительно печатаются системные списки по ссылкамcurrent,future,waitl[i], гдеi=1..iEveMax(номер последнего выполняемого события) и другие с содержащимися в них транзактами. Печать системных списков аналогична печати списков пользователя, которая описана выше.
В системе существуют функции для вывода на печать некоторой части статистики:
voidprnt1(ptransact t)- печать полей транзакта.t- ссылка на транзакт
voidprnlt(plistt& lt); - печать полей списка транзактов и находящихся в нем транзактов.lt- ссылка на список
voidprwaitl() - печать списков ожидающих транзактов (списковwаitl[i])
voidprnq(pqueue q)- печать полей очереди.q- ссылка на очередь
voidprnlq(plistq lq)- печать списка очередей.lq- ссылка на список
voidprns(pstorage st)- печать полей накопителя.st- ссылка на накопитель
voidprnls(plists ls)- печать списка накопителей.ls- ссылка на список
voidprnf(pfacility f)- печать полей прибора.f- ссылка на прибор
voidprnlf(plistf ls)- печать списка приборов.lf- ссылка на список
void prnuserlt()- печать списков пользователей
void lfprint(plistf lf)- печать полей транзактов, входящих в списки приборов.lf- ссылка на список приборов
void lsprint(plists ls); - печать полей транзактов, входящих в списки накопителей.ls- ссылка на список накопителей.
