- •Аннотация
- •Содержание:
- •Введение
- •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.7.1 Функции ввода транзактов в прибор
2.7.1.1 Захват прибора. Функцияinfac
Функцией void infac(pfacility&)осуществляется захват прибора. Если прибор был свободен, то ее действие аналогично функцииseize. Если же в приборе находился транзакт, то его обработка прерывается и он поступает в список прерваных транзактов данного прибора (f->inter), а полюstatusприбора присваивается значениеpreempted. После освобождения прибора прерваный транзакт возвращается в него на дообработку. Список прерваных транзактов строится в порядке, обратном поступлению. Если имеют место несколько уровней захвата, то прерваные транзакты обрабатываются с дисциплиной LIFO. Число уровней захвата не ограничено.
Если транзакт, занимающий прибор находится в списке current, т. е. захват должен произойти в тот же момент модельного времени, что и освобождение прибора, то активный транзакт не захватывает прибор, а помещается в соответствующий списокwaitlи ждет освобождения прибора.
Пример 7.1. Обработка транзактов с абсолютными приоритетами
...;
if(f->transpoint!=nil)
if(trans->prty>f->transpoint->prty)
infac(f);
else seize(f);
else seize(f);
2.7.1.2 Занятие прибора. Функцияseize
Для реализации дисциплины с относительными приоритетами используется функция void seize(pfacility&). Если статус прибора равенfree, то его занимает транзакт высшего приоритета из числа претендующих на его использование. Если прибор занят (его статус равенseized), то транзакт помещается в список прибора последним в своем классе приоритетов.
2.7.2 Функцияoutfac. Вывод транзакта из прибора
Все события, осуществляемые при занятии прибора, размещаются после события, содержащего функцию void infac(pfacility&). После того, как они выполнены, прибор необходимо освободить, чтобы обеспечить дальнейшее продвижение транзакта, занимающего прибор, и сделать прибор доступным для других транзактов. Для этого используется функцияvoid outfac(pfacility&).
Прибор освобождается вне зависимости от каких-либо условий, однако функция проверяет, какой транзакт освобождает прибор. Если прибор освобождается не тем транзактом, который его занимал, то печатается сообщение об ошибке.
Если прибор был захвачен, то возвращается на дообработку транзакт, который ранее его занимал.
Если список освобождаемого прибора содержит транзакты, то функция outfacпроизводит занятие прибора первым транзактом из этого списка.
Функция outfacосвобождает прибор, занятый как функциейseize, так и функциейinfac.
2.8 Регистрация очередей. Функцииinqueue,outqueue
Очереди могут образовываться в любых частях модели, где возникает необходимость задержки или блокировки транзактов. Специального учета их динамики в общем случае не ведется. Средством для сбора статистики и оценки динамики очередей служат объекты типа queue.
Для входа в очередь используют функцию void inqueue(pqueue&), для выхода из нее -void outqueue(pqueue&).
Функции позволяют безусловно вставать в очередь и выходить из нее.
2.9 Накопители (многоканальные устройства). Функцииenterиleave
Для занятия транзактом многоканального устройства используется функция void enter(pstorage s,int c), гдеc– количество занимаемых ячеек
Для освобождения многоканального устройства функция void leave(pstorage s,int c), гдеc– количество освобождаемых ячеек
В отличие от прибора накопитель может быть освобожден не тем транзактом, которым был занят.
