- •Федеральное агентство по образованию
- •А.Ю. Кузьмин, к.Т.Н., доц. Кафедры прикладных исследований инновационных проектов и единой документации цф Российской академии права
- •Введение
- •1.2. Описание моделируемого процесса
- •1.3. Пример решения
- •1.4. Задание и алгоритм выполнения лабораторной работы
- •1.5. Отчет о выполнении работы
- •Контрольные вопросы
- •2.3. Пример решения
- •2.4. Задание и алгоритм выполнения лабораторной работы
- •2.5. Отчет о выполнении работы
- •Контрольные вопросы
- •Моделирование клапана с таймером
- •3.3. Пример решения
- •3.4. Задание и алгоритм выполнения лабораторной работы
- •3.5. Отчет о проделанной работе
- •Контрольные вопросы
- •Как производится управление модельным временем?
- •Литература
- •Лабораторная работа №4 моделирование замкнутой корпоративной информационной системы
- •4.1. Цель работы
- •4.2. Описание моделируемого процесса
- •4.3. Пример решения
- •4.4. Задание и алгоритм выполнения лабораторной работы
- •4.5. Отчет о проделанной работе
- •Контрольные вопросы
- •Лабораторная работа № 5
- •5.3. Пример решения
- •5.4. Задание и алгоритм выполнения лабораторной работы
- •5.5. Отчет о проделанной работе
- •Контрольные вопросы
- •Литература
- •Заключение
- •Библиографический список Рекомендуемой литературЫ
- •Технологический процесс построения имитационной модели
- •1.1. Вербальное описание моделируемого процесса
- •Этапы построения модели.
- •1.2. Построение графа модели
- •Инициализация модели (рис. П 1.4)
- •Описание узлов модели
- •Установление очереди заявок (рис. П. 1.5)
- •1.6. Использование узла «Ключ» (рис. П. 1.6, п. 1.7)
- •2. Создание выполняемого файла модели
- •2.7.2. Теперь можно приступать к эксперименту (рис. П. 1.13).
- •Приложение 2 образец титульного листа для выполнения лабораторной работы
- •Приложение 3 варианты построения объектных кодов имитационных моделей
- •Вариант объектного кода модели для выполнения лабораторной работы № 1
- •Int Forw; /* Номер следующего узла */
- •Int Dist; /* Закон распределения времени обслуживания */
- •Вариант объектного кода модели для выполнения лабораторной работы № 2
- •Вариант объектного кода модели для выполнения лабораторной работы № 3
- •Вариант объектного кода модели для выполнения лабораторной работы № 4
- •Int Next_top; /* Номер следующего узла */
- •Вариант объектного кода модели для выполнения лабораторной работы № 5
Вариант объектного кода модели для выполнения лабораторной работы № 3
Обратите внимание, что в данном примере параметры модели заданы с помощью констант пользователя (операторы #define), а не переменных. Это значит, что их значения нельзя менять в процессе работы PILGRIM-программы.
Текст модели
/* Модель работы станции метрополитена */
/* Единица измерения времени - 1 секунда */
/* Врем моделирования - 8 часов */
#include <pilgrim.h>
#define T_PASS 15.0 /* Интервал прихода пассажиров */
#define T_POEZD 90.0 /* Интервал прихода поездов */
#define T_POEZD_STAND 30.0 /* Время стоянки поезда */
forward
{
modbeg("Станция метро”,7,60.0*60*8,(long)time(NULL),
none,2,none,4,2);
ag("Пассажиры",1,none,expo,T_PASS,zero,zero,2);
ag("Поезда",5,none,none,T_POEZD,T_POEZD/3,zero,6);
network(dummy,dummy)
{
top(2):queue("Перрон",none,3);
clcode
if (addr[2]->na == 1)
hold(3);
place;
top(3):key("Двери поезда",4);
place;
top(4):term("Пассажир сел в поезд");
place;
top(6):serv("Поезд стоит",1,none,none,T_POEZD_STAND,
T_POEZD_STAND/3,zero,17);
rels(3);
place;
top(7):term("Поезд ушел");
hold(3);
place;
fault(123);
}
modend("Metro.rep",1,12,page);
return 0;
}
Вариант объектного кода модели для выполнения лабораторной работы № 4
Текст модели
/* Модель управления ресурсами в ЛВС под UNIX/System-V */
/* Время измеряется в секундах */
#include <Pilgrim.h>
#define USERS 50 /* Количество пользователей */
#define RAM 0 /* Флаг создания процесса */
#define BUFF 1 /* Флаг захвата буферов I/O */
#define HDD 2 /* Флаг операции I/O */ #define MAX_RAM 64 /* Максимальный объем RAM */
#define MAX_BUFFERS 10 /* Максимальное число буферов */
#define PROCESS_STATUS t->iu0 /* Состояние транзакта */
#define RAM_AMOUNT t->iu1 /* Выделяемый объем RAM */
#define BUF_AMOUNT t->iu2 /*Число выделяемых буферов */
#define HDD_ACCESS t->iu3/*Флаг получения доступа к HDD*/
#define MEMORY 5 /* Узел выделения RAM */
#define IO_BUFFERS 7 /* Узел выделения буферов I/O */
#define MOD_TIME 28800.0 /*Время моделирования 8 часов */
Int Next_top; /* Номер следующего узла */
forward
{
modbeg("Лок.ВС / UNIX-V", 1,MOD_TIME,(long)time(NULL),
none,5,none,none,2 );
ag("Вспом. транзакт",9,none,none,0.0,zero,zero,10);
supply(MEMORY,add,MAX_RAM);
/*Максимально возможный объем памяти */
supply(IO_BUFFERS,add,MAX_BUFFERS);
/*Максимальное число буферов */
network(dummy,dummy)
{
top(1):queue("Очередь к CPU",none,2);
place;
top(2):switch(PROCESS_STATUS)
{
case HDD: /* Процесс создан и работает */
if (rundum()>0.8 && HDD_ACCESS)
Next_top=8;
/* Управление возвращается пользователю */
else
Next_top=3; /* Очередная операция I/O */
break;
case BUFF: /* Отвести процессу буферы I/O */
Next_top=7;
break;
case RAM: /* Создать процесс */
Next_top=5;
break;
}
serv("CPU",1,none,unif,0.1,0.1,zero,Next_top);
if (Next_top==8)
{
clcode
HDD_ACCESS=0; /* Доступ к HDD прекращен*/
detach(MEMORY,RAM_AMOUNT);
/* Освободить память */
detach(IO_BUFFERS,BUF_AMOUNT);
/* Освободить буферы */
}
place;
top(3):HDD_ACCESS=1; /*Получение доступа к HDD */
queue("Очередь к HDD", none,4);
place;
top(4):serv("HDD",1,none,beta,0.05,0.1,0.15,1 );
place;
top(5):RAM_AMOUNT=1+rundum()*(MAX_RAM-1);
PROCESS_STATUS=BUFF; /* Запросить буферы I/O */
attach("Выделить RAM",RAM_AMOUNT,prty,6);
place;
top(6):manage("Диспетчер ресурсов",1);
place;
top(7):BUF_AMOUNT=1+rundum()*(MAX_BUFFERS-1);
PROCESS_STATUS=HDD; /* Начать операции I-O */
attach("Выделить буферы I/O",BUF_AMOUNT,prty,6);
place;
top(8):PROCESS_STATUS=RAM; /* Создание процесса */
serv("Терминалы п-лей",USERS,none,
norm,10.0,2.5,zero,1);
place;
/* Схема зарядки */
top(10):creat("Генерация п-лей",none,USERS,copy,8,11);
place;
top(11):term("Выключение Ag 9");
cheg(9,none,none,MOD_TIME,zero,zero,11);
place;
fault(123);
}
modend("Unix5.rep", 1, 13, page );
return 0;
}