![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 384; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.38.77 (0.012 с.) |