Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №3. Имитационное моделирование информационных процессов на языке высокого уровня. Модель через список будущих событий.Содержание книги
Поиск на нашем сайте
Цель работы: исследование возможностей и приобретение навыков использования имитационных моделей, реализованных с помощью языка С++ на основе модели через список будущих событий. Методические указания Рассмотрим процесс моделирования системы на языке С++. Пусть генерируются заявки каждые 5+-2 секунды, которые попадают в очередь. После этого транзакты поступают в ЭВМ и обрабатываются там втечении 8+-3 сек. Далее после обработки они удаляются из системы. Данный процесс показан на рисунке 18.3.
Рис. 18.3. Q-схема прохождения заявки В этой задаче необходимо найти: 1. Количество поступивших заявок. 2. Обработанное количество заявок. 3. Текущее количество заявок в очереди. 4. Текущее количество заявок на обработке. Форма приложения представлена на рисунке 18.4. Рис. 18.4. Форма приложения На ней показаны параметры модели, которые можно регулировать, кнопки запуска, выхода, а также результаты моделирования. Заголовочный файл программы имеет вид: Model2.h //----------------------------------------------- #ifndef model2H #define model2H //----------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp>
//----------------------------------------------- class TForm1: public TForm { __published: // IDE-managed Components TGroupBox *GroupBox1; TLabel *Label1; TEdit *Edit1; TEdit *Edit2; TLabel *Label2; TLabel *Label3; TEdit *Edit3; TLabel *Label4; TEdit *Edit4; TLabel *Label5; TEdit *Edit5; TButton *Button1; TGroupBox *GroupBox2; TLabel *Label6; TEdit *Edit6; TLabel *Label7; TEdit *Edit7; TButton *Button2; TLabel *Label8; TEdit *Edit8; TLabel *Label9; TEdit *Edit9; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); };
//определяем класс Очередь class IM_Queue{ public: String Name;//название int Number;//номер int Disciplina;//дисциплина обслуживания int QueueSize;//длина очереди void __fastcall Queue();//занесение транзакта в очередь void __fastcall Depart();//удаление транзакта из очереди }; //определяем класс Устройство class IM_Device{ public: String Name;//название int Number;//номер boolean Free;//true-свободно, false-занято void __fastcall Seize();//занятие устройства void __fastcall Release();//удаление транзакта из устройства }; //определяем класс Событие class IM_Event{ public: String Name;//название события int Type;//тип события float Time;//время наступления события }; //определяем класс Система class IM_System{ public: float Sim_Time;//модельное время int Tranzakt_Value;//количество транзактов, попавших в систему int Tranzakt_Process;//количество обработанных транзактов IM_Event Events[2];//список будущих событий IM_Queue q1; IM_Device d1; float tgen1,tgen2;//время генерация заявок float tend;//время окончания моделирования float t1evm1,t2evm1;//время обработки на ЭВМ1; int num_events;//число событий в системе int next_event_type;//следующий тип события void __fastcall Init();//инициализация системы void __fastcall Synhronize();//синхронизация событий int __fastcall Generate_Interval(int time1,int time2);//планирование интервала time1+-time2 void __fastcall GoIn();//событие поступления заявки void __fastcall GoOut();//событие ухода заявки void __fastcall Report();//получение статистических данных }; //----------------------------------------------- extern PACKAGE TForm1 *Form1; //----------------------------------------------- #endif
Листинг формы представлен следующим образом: Model2.cpp //----------------------------------------------- #include <vcl.h> #pragma hdrstop #include "model2.h" //----------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //----------------------------------------------- void __fastcall IM_System::Init(){ //инициализация модельного времени и состояния системы Sim_Time=0.0; Tranzakt_Value=0; Tranzakt_Process=0; q1.Name="Очередь 1"; q1.Number=1; q1.QueueSize=0;//очередь пуста d1.Name="Устройство 1"; d1.Number=1; d1.Free=True;//устройство свободно //считывание данных с формы tgen1=StrToInt(Form1->Edit1->Text); tgen2=StrToInt(Form1->Edit2->Text); tend=StrToInt(Form1->Edit3->Text); t1evm1=StrToInt(Form1->Edit4->Text); t2evm1=StrToInt(Form1->Edit5->Text); num_events=2;//определяем число событий //планирование первого события Events[0].Name="Генерация заявки"; Events[0].Type=0; Events[0].Time=Sim_Time+Generate_Interval(tgen1,tgen2); Events[1].Name="Окончание обслуживания заявки"; Events[1].Type=1; Events[1].Time=1.0e+30;//событие произойдет во времени 10 в 30 } void __fastcall IM_System::Synhronize(){ float min_time_next_event=1.0e+29;//берем для сравнения большое число next_event_type=-1;//предполагаем, что событий нет //открываем цикл, в котором определяем событие с наименьшим временем for (int i=0;i<num_events;i++){ if (Events[i].Time<min_time_next_event){ min_time_next_event=Events[i].Time; next_event_type=i;//отыскиваем тип события } } //если событий нет, то завершаем моделирование if (next_event_type==-1){ ShowMessage("Список событий пуст"); exit(1); } //переводим модельные часы на ближайшее событие Sim_Time=min_time_next_event; } int __fastcall IM_System::Generate_Interval(int time1,int time2){ Randomize(); return (time1-time2)+random(2*time2+1); } void __fastcall IM_System::GoIn(){ Tranzakt_Value++;//увеличиваем число поступивших транзактов //планируем время поступления следующей заявки Events[0].Time=Sim_Time+Generate_Interval(tgen1,tgen2); //если устройство свободно, то занимаем его для текущей заявки if (d1.Free){ d1.Seize(); //планируем время обработки в устройстве Events[1].Time=Sim_Time+Generate_Interval(t1evm1,t2evm1); } //иначе заносим транзакт в очередь else{ q1.Queue(); } } void __fastcall IM_System::GoOut(){ Tranzakt_Process++;//увеличиваем число обработанных транзактов //если очередь свободна, то делаем устройство незанятым if (q1.QueueSize==0){ d1.Release(); //исключаем следующее событие обработки заявки Events[1].Time=1.0e+30; } //иначе выбираем из очереди следующий элемент else{ q1.Depart(); //планируем время обработки следующей заявки Events[1].Time=Sim_Time+Generate_Interval(t1evm1,t2evm1); } }
void __fastcall IM_System::Report(){ Form1->Edit6->Text=IntToStr(Tranzakt_Value); Form1->Edit7->Text=IntToStr(Tranzakt_Process); Form1->Edit8->Text=IntToStr(q1.QueueSize); if (d1.Free)//если устройство свободно Form1->Edit9->Text="0"; else Form1->Edit9->Text="1";
} //----------------------------------------------- void __fastcall IM_Queue::Queue(){ QueueSize++;//увеличиваем длину очереди } void __fastcall IM_Queue::Depart(){ QueueSize--;//уменьшаем длину очереди } //----------------------------------------------- void __fastcall IM_Device::Seize(){ Free=False;//устройство занято } void __fastcall IM_Device::Release(){ Free=True;//устройство свободно } //----------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { IM_System System1;//объявление новой системы моделирования System1.Init(); System1.Synhronize();//синхронизируем события //открываем цикл до тех пор, пока не наступит заданное время моделирования while (System1.Sim_Time<=System1.tend) { //выбираем тип события switch (System1.next_event_type){ case 0: System1.GoIn();//поступление заявки break; case 1: System1.GoOut();//удаление заявки break; } System1.Synhronize();//синхронизируем события } System1.Report(); } //----------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { exit(1); } //-----------------------------------------------
В заголовочном файле model2.h описываются классы: IM_Queue – Очередь, IM_Device – Устройство, IM_Event – Событие, IM_System - Система. Префикс IM образован от словосочетания “Имитационное Моделирование”. Программа сначала считывает исходные данные для моделирования и инициализирует состояние системы. Затем в цикле происходит выборка событий из списка будущих событий. Цикл продолжается до тех пор, пока не истечен заданный период имитации. Задание на лабораторную работу Разработать программу моделирования системы на языке С++, используя список будущих событий. Варианты: 1. По каналу связи каждые 10+-7 сек. передаются сообщения длиной от 1 до 7 Мбайт. Экспериментально определить требуемую минимальную пропускную способность канала. Рассмотреть возможность и экспериментально определить размер и принцип работы буфера, позволяющего уменьшить пропускную способность на 20%, 30%, 50%. 2. Вычислительная система состоит из двух ЭВМ и общего буфера. Каждые 10+-5 с на обработку приходит задача. Для решения каждой задачи требуется 20+-8 с. Каждая ЭВМ в один момент может решать только одну задачу. Оставшиеся задачи хранятся в буфере. Если какая – либо ЭВМ освобождается, а буфер пуст – она берет на себя половину нагрузки другой ЭВМ. Определить среднюю загруженность буфера при обработке 1000 заданий, время работы каждой ЭВМ и число выполненных заданий. 3. В вычислительную систему каждые 20+-5 с приходят два пакета данных, каждый из которых обрабатывается на отдельной ЭВМ в течение 20+-8 с (для каждого пакета – время свое). После того как пакеты обработаны, происходит их совместный анализ на третьей ЭВМ в течение 25 с. Перед третьей ЭВМ имеется буфер на 10 пакетов. Если пакет приходит в систему, а вторая первая или вторая ЭВМ заняты – пакет теряется. Обработать 1000 пакетов. Оценить количество потерянных пакетов, загрузку буфера, время простоя и работы каждой ЭВМ и всей системы. 4. По цифровому каналу передаются пакеты данных, каждый из которых содержит N = 10…100 блоков. Время передачи Т=5*N. Вероятность того, что при передаче очередного блока произойдет сбой, равна 0,05. Если во время передачи сообщения на каком-либо блоке происходит сбой, то последующие блоки сообщения не передаются. Смоделировать процесс передачи 10000 пакетов. Определить число сбоев. Подсчитать количество потерянных блоков. Исследовать зависимости этих величин от длины пакета и вероятности ошибки. 5. Система передачи данных обеспечивает передачу пакетов данных из пункта А в пункт С через транзитный пункт В. В пункт А пакеты поступают через 10+-5 мс. Здесь они буферизуются в накопителе емкостью 20 пакетов и передаются по любой из двух линий АВ1 за время 18+-3 мс или АВ2 – за время 20мс. В пункте В они снова буферизируются в накопителе емкостью 25 пакетов и далее передаются по линиям ВС1 (за 25+-3мс) и ВС2 (за 25 мс). Причем пакеты из АВ1 поступают в ВС1, а из АВ2 в ВС2. 6. Система обработки информации содержит мультиплексный канал и три миниЭВМ. Сигналы от датчиков поступают на вход канала через интервалы времени 10+-5 мкс. В канале они буферизируются и предварительно обрабатываются в течение 10+-3 мкс. Затем они поступают на обработку в ту миниЭВМ, где имеется наименьшая по длине входная очередь. Емкости входных накопителей всех миниЭВМ рассчитаны на хранение величин 10 сигналов. Время обработки сигнала в любой миниЭВМ равно 33 мкс. 7. Магистраль передачи данных состоит из двух каналов (основного и резервного) и общего накопителя. При нормальной работе сообщения передаются по основному каналу за 7+-3 с. В основном канале происходят сбои через интервалы времени 200+-35 с. Если сбой происходит во время передачи, то за 2 секунды запускается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23+-7 с. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения поступают через 9+-4 с и остаются в накопителе до окончания передачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу. 8. На устройство предварительной обработки информации каждые 5+-1 мин. Поступают пять сообщений с датчиков типа А и каждые 20+-7 мин 20сообщений с датчиков типа В. Устройство имеет два буфера, на 10 сообщений типа А и 10 сообщений типа В. Обработка начинается только при полном заполнении обоих буферов и длится 10 мин. 9. В системе передачи данных осуществляется обмен пакетами данных между пунктами А и В по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени между ними 10+-3 мс. Передача пакета занимает 10 мс. В пунктах имеются буферные регистры, которые могут хранить два пакета. В случае прихода пакета в момент занятости регистров пунктам системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетов данных за 10+-5 мс. При занятости спутниковой линии пакет получает отказ. 10. Специализированная вычислительная система состоит из трех процессоров и общей оперативной памяти. Задания, поступающие на обработку через интервалы времени 5+-2 мин, занимают объем оперативной памяти размером в страницу. После трансляции первым процессором в течение 5+-1 мин. их объем увеличивается до двух страниц, и они поступают в оперативную память. Затем, после редактирования во втором процессоре, которое занимает 2,5+-,5 мин. На страницу, объем возрастает до трех страниц. Отредактированные задания через оперативную память поступают в третий процессор на решение, требующее 1,5+-,5 мин на страницу, и покидают систему, минуя оперативную память. Содержание отчета по лабораторной работе 1. Титульный лист. 2. Тема лабораторной работы. 3. Цель лабораторной работы. 4. Отражение хода лабораторной работы. 5. Вывод.
|
||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 380; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.227 (0.012 с.) |