Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой проект [17] / Курсовой17.doc
Скачиваний:
138
Добавлен:
02.05.2014
Размер:
366.08 Кб
Скачать

7 Результаты моделирования

Заявок обсужено

Заявок потеряно

Загрузка процессора

P отказа

Заявок 1 линии

Заявок

2 линии

1334

0

93,38

0

670

663

1335

0

93,45

0

659

675

1324

0

92,68

0

656

667

1327

0

92,89

0

657

669

1340

0

93,8

0

673

666

1343

0

94,01

0

667

675

1337

0

93,59

0

662

674

1328

0

92,96

0

672

655

1321

0

92,47

0

662

658

1329

0

93,03

0

663

665

Средние значения

1331,8

0

93,226

0

664,1

666,7

Заключение

Анализ работы системы коммутации данных позволяет сделать вывод об эффективном ее устройстве. Так для заданных условий необслуженных заявок нет, а вероятность отказа равна 0; Процессор загружается примерно на 90%. Уменьшение же интервала поступления заявок даже на 1 приведет к появлению необслуженных заявок. Увеличение контроля потоков незначительно снижает вероятность отказов, засчет буферизации необслуженных заявок, однако не влияет на производительность системы в целом.

Список литературы

  1. Советов Б. Я., Яковлев С. А. Моделирование систем: Учеб. Для вузов 3-е издание, перераб. И доп. – М: Высш. Школа, 2001 г. – 343 с.

  2. Советов Б. Я., Яковлев С. А. Моделирование систем: Курсовое проектирование: Учеб. Пособие по специальности АСУ. – М: Высш. Школа, 1988г. – 135 с.

Приложение А (обязательное) Псевдокод моделирующего алгоритма

структура generator

начало

скаляр ntime - целый

скаляр type - целый

конец

структура proc

начало

скаляр ntime - целый

скаляр type - целый

конец

структура line

начало

скаляр ntime - целый

конец

скаляр line_control - целый

скаляр gen_time - целый

скаляр lng_time - целый

скаляр line_time - целый

скаляр line_lng - целый

скаляр CPU_speed - целый

скаляр end_time - целый

скаляр count_err - целый

скаляр count_task - целый

скаляр count_line1 - целый

скаляр count_line2 - целый

скаляр t - целый

Алгоритм BeginParam(*bfr,*bfr1,*bfr2,*sr,*CPU,*ln)

начало

gen_time = StrToСкаляр(Edit1->Text)

lng_time = StrToСкаляр(Edit2->Text)

CPU_speed = StrToСкаляр(Edit3->Text)

line_time = StrToСкаляр(Edit4->Text)

line_lng = StrToСкаляр(Edit5->Text)

count_err = 0

count_task = 0

count_line1= 0

count_line2= 0

t=0

end_time=StrToСкаляр(Edit7->Text)

sr[0].type=1

sr[1].type=2

для(i=0,i<2,i++)

начало

sr[i].ntime=0

ln[i].ntime=0

конец

CPU->ntime=0

CPU->type=0

для(i=0,i<line_control,i++)

начало

bfr1[i]=0 bfr2[i]=0

конец

для(скаляр i=0,i<2*line_control,i++) bfr[i]=0

конец

скаляр Алгоритм GenTime(a,b)

начало

возврат(t+a+random(b+1))

конец

void Алгоритм GetTask(*sr)

начало

если(sr[0].ntime <=t) sr[0].ntime = GenTime(gen_time,lng_time)

если(sr[1].ntime <=t) sr[1].ntime = GenTime(gen_time,lng_time)

конец

скаляр Алгоритм Bufering(*sr,k,*bfr)

начало

скаляр fl = 0

для(скаляр i=0 i<2*line_control&&fl==0 i++)

начало

если(bfr[i]==0)

начало

bfr[i] = sr[k].type

fl=1

конец

конец

возврат(fl)

конец

void Алгоритм sdvig(*bfr,N)

начало

для(скаляр i=0 i<N-1 i++)

bfr[i]=bfr[i+1]

bfr[N-1]=0

конец

void Алгоритм Processing(*bfr, *CPU, *bfr1, *bfr2)

начало

если(bfr[0]!=0 && CPU->ntime<=t)

начало

если(CPU->type==1) начало Bufer_line(CPU,bfr1) count_line1++ конец

если(CPU->type==2) начало Bufer_line(CPU,bfr2) count_line2++ конец

CPU->ntime=t+CPU_speed

CPU->type=bfr[0]

sdvig(bfr,2*line_control)

count_task++

конец

конец

void Алгоритм Bufer_line(proc *CPU,скаляр *bfr)

начало

для(скаляр i=0 i<line_control i++)

если(bfr[i]==0) bfr[i] = CPU->type

конец

Алгоритм Line_proc(*bfr,*ln,k)

начало

если(bfr[0]!=0 && ln[k].ntime<=t)

начало

ln[k].ntime=GenTime(line_time,line_lng)

sdvig(bfr,line_control)

конец

конец

скаляр Алгоритм Load_buf(bfr,N)

начало

скаляр c=0

для(скаляр i=0 i<N i++)

если(bfr[i]!=0) c++

возврат (c)

конец

Алгоритм Out_param(*bfr, *bfr1,*bfr2,*sr, *CPU,*ln)

начало

Edit8->Text=count_task

Edit9->Text=count_err

float temp=CPU_speed*count_task

float temp2=count_err+count_task

Edit10->Text=(temp/end_time)*100

Edit11->Text=count_err/temp2

Edit12->Text=count_line1

Edit13->Text=count_line2

конец

Алгоритм Моделирования

начало

line_control=StrToСкаляр(Edit6->Text)

generator *source = new generator [2]

line *ln = new line[2]

массив *bufer = new скаляр[2*line_control]

массив *bufer1 = new скаляр[line_control]

массив *bufer2 = new скаляр[line_control]

proc *CPU = new proc

BeginParam(bufer,bufer1,bufer2,source,CPU,ln)

GetTask(source)

для(t=0 t<end_time t++)

начало

для(скаляр l=0 l<2 l++)

начало

если(source[l].ntime==t)

начало

если(Bufering(source,l,bufer)==0) count_err++

конец

конец

GetTask(source)

Processing(bufer,CPU,bufer1,bufer2)

Line_proc(bufer1,ln,0)

Line_proc(bufer2,ln,1)

конец

Out_param(bufer,bufer1,bufer2,source,CPU,ln)

конец

Приложение Б (обязательное) Листинг программы

Unit1.h

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Chart.hpp>

#include <ExtCtrls.hpp>

#include <Series.hpp>

#include <TeEngine.hpp>

#include <TeeProcs.hpp>

#include "CGAUGES.h"

#include <Menus.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TButton *Button1;

TGroupBox *GroupBox1;

TLabel *Label1;

TEdit *Edit1;

TEdit *Edit2;

TLabel *Label2;

TEdit *Edit3;

TLabel *Label3;

TEdit *Edit4;

TEdit *Edit5;

TLabel *Label4;

TEdit *Edit6;

TLabel *Label5;

TEdit *Edit7;

TGroupBox *GroupBox2;

TLabel *Label6;

TEdit *Edit8;

TLabel *Label7;

TEdit *Edit9;

TLabel *Label8;

TEdit *Edit10;

TLabel *Label9;

TEdit *Edit11;

TLabel *Label10;

TEdit *Edit12;

TLabel *Label11;

TEdit *Edit13;

TChart *Chart1;

TLineSeries *Series1;

TChart *Chart2;

TLineSeries *Series2;

TCGauge *CGauge1;

TButton *Button2;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *Q1;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall Q1Click(TObject *Sender);

private: // User declarations

struct generator {

int ntime;

int type;

};

struct proc {

int ntime;

int type;

};

struct line {

int ntime;

};

int line_control;

int gen_time;

int lng_time;

int line_time;

int line_lng;

int CPU_speed;

int end_time;

int count_err;

int count_task;

int count_line1;

int count_line2;

int t;

void BeginParam(int *,int *,int *,generator *,proc *,line *);

int GenTime(int a,int b);

void GetTask(generator *);

int Bufering(generator *,int,int*);

void Processing(int*, proc*,int*,int*);

void sdvig(int*, int);

void Bufer_line(proc*,int*);

void Line_proc(int*, line*, int);

int Load_buf(int*, int);

void Out_param(int*,int*,int*,generator*,proc*,line*);

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CGAUGES"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void TForm1::BeginParam(int *bfr,int *bfr1,int *bfr2,generator *sr,proc *CPU,line *ln)

{

Series1->Clear();

Series2->Clear();

gen_time = StrToInt(Edit1->Text);

lng_time = StrToInt(Edit2->Text);

CPU_speed = StrToInt(Edit3->Text);

line_time = StrToInt(Edit4->Text);

line_lng = StrToInt(Edit5->Text);

count_err = 0;

count_task = 0;

count_line1= 0;

count_line2= 0;

t=0;

end_time=StrToInt(Edit7->Text);

sr[0].type=1;

sr[1].type=2;

for(int i=0;i<2;i++)

{

sr[i].ntime=0;

ln[i].ntime=0;

}

CPU->ntime=0;

CPU->type=0;

for(int i=0; i<line_control;i++)

{

bfr1[i]=0; bfr2[i]=0;

}

for(int i=0; i<2*line_control;i++) bfr[i]=0;

}

int TForm1:: GenTime(int a,int b)

{

return(t+a+random(b+1));

}

void TForm1:: GetTask(generator *sr)

{

if(sr[0].ntime <=t) sr[0].ntime = GenTime(gen_time,lng_time);

if(sr[1].ntime <=t) sr[1].ntime = GenTime(gen_time,lng_time);

}

int TForm1:: Bufering(generator *sr,int k,int *bfr)

{

int fl = 0;

for(int i=0;i<2*line_control&&fl==0;i++) {

if(bfr[i]==0) {

bfr[i] = sr[k].type;

fl=1;

}

}

return(fl);

}

void TForm1:: sdvig(int *bfr,int N)

{

for(int i=0; i<N-1;i++)

bfr[i]=bfr[i+1];

bfr[N-1]=0;

}

void TForm1::Processing(int *bfr, proc *CPU,int *bfr1, int *bfr2)

{

if(bfr[0]!=0 && CPU->ntime<=t)

{

if(CPU->type==1) {Bufer_line(CPU,bfr1); count_line1++;}

if(CPU->type==2) {Bufer_line(CPU,bfr2); count_line2++;}

CPU->ntime=t+CPU_speed;

CPU->type=bfr[0];

sdvig(bfr,2*line_control);

count_task++;

}

}

void TForm1:: Bufer_line(proc *CPU,int *bfr)

{

for(int i=0;i<line_control;i++)

if(bfr[i]==0) bfr[i] = CPU->type;

}

void TForm1:: Line_proc(int *bfr, line *ln, int k)

{

if(bfr[0]!=0 && ln[k].ntime<=t)

{

ln[k].ntime=GenTime(line_time,line_lng);

sdvig(bfr,line_control);

}

}

int TForm1::Load_buf(int* bfr, int N)

{

int c=0;

for(int i=0;i<N;i++)

if(bfr[i]!=0) c++;

return (c);

}

void TForm1:: Out_param(int *bfr,int *bfr1,int *bfr2,generator *sr,proc *CPU,line *ln)

{

Edit8->Text=count_task;

Edit9->Text=count_err;

float temp=CPU_speed*count_task;

float temp2=count_err+count_task;

Edit10->Text=(temp/end_time)*100;

Edit11->Text=count_err/temp2;

Edit12->Text=count_line1;

Edit13->Text=count_line2;

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

line_control=StrToInt(Edit6->Text);

generator *source = new generator [2];

line *ln = new line[2];

int *bufer = new int[2*line_control];

int *bufer1 = new int[line_control];

int *bufer2 = new int[line_control];

proc *CPU = new proc;

BeginParam(bufer,bufer1,bufer2,source,CPU,ln);

GetTask(source);

for(t=0; t<end_time; t++)

{

CGauge1->Progress = t;

for(int l=0;l<2;l++){

if(source[l].ntime==t)

{

if(Bufering(source,l,bufer)==0) count_err++;

}

}

GetTask(source);

Processing(bufer,CPU,bufer1,bufer2);

Series1->AddXY(t,Load_buf(bufer1,line_control));

Series2->AddXY(t,Load_buf(bufer2,line_control));

Line_proc(bufer1,ln,0);

Line_proc(bufer2,ln,1);

}

Out_param(bufer,bufer1,bufer2,source,CPU,ln);

delete bufer;

delete bufer1;

delete bufer2;

delete CPU;

delete source;

delete ln;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

Form2->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Q1Click(TObject *Sender)

{

Form3->ShowModal();

}

//---------------------------------------------------------------------------

Соседние файлы в папке Курсовой проект [17]