Система обработки сообщений с ограниченным временем прохождения

Автор: Пользователь скрыл имя, 09 Ноября 2011 в 14:04, курсовая работа

Описание работы

В систему обработки поступают сообщения по одному через 3±1с., накапливаясь, если необходимо, в буфере емкостью в два сообщения (при отсутствии места в буфере сообщение теряется).

Содержание

1. Введение 5

2. Общие теоретические сведения 5

3. Математическая модель решения поставленной задачи. 6

4. Блок-схема алгоритма решения задачи 9

5. Руководство пользователя. 10

6. Анализ результатов и выводы 11

7. Список использованной литературы. 12

Приложение А 13

Работа содержит 1 файл

Отчет по курсовой работе (моделирование систем) 8 семестр.docx

— 345.74 Кб (Скачать)

. 
 

 

4. Блок-схема алгоритма решения задачи

 

 

     

5. Руководство пользователя.

    После запуска программы откроется  окно, представленное на рис. 3.

Рис. 3. Окно программы

     Установите  необходимую ёмкость буфера и  нажмите на кнопку START.

     После нажатия на кнопку начнется процесс моделирования системы, результат работы представлен на рис. 4.

Рис. 4. Результат работы программы

6. Анализ результатов и выводы

    По  результатам тестирования можно  сделать следующие выводы:

    1. Самым эффективным размером буфера для моделируемой системы является буфер размером в 2. При увеличении размера начинает резко расти количество пакетов, потерянных из-за простоя в буфере.
    2. Размер буфера более 4 нецелесообразен, так как при заданных временных параметрах минимальное время поступления пакетов – 2 секунды. Но учитывая, что пакет не может храниться более 8 секунд, в буфере не может храниться сообщений больше, чем 4.
    3. Минимальное модельное время, обеспечивающее необходимую достоверность результатов, экспериментально была определена и установлена на уровне 2000 секунд.
    4. Среднее время нахождения пакета в системе равно 9.1±0.35 секунд.
    5. Коэффициент потерь составляет ≈0.45 или 45%.
    6. Использование буфера в системах подобного рода дает максимальный эффект, когда среднее значение частоты поступления запросов значительно больше времени их обработки.
 
 

 

  1. Список  использованной литературы.
  1. Советов Б.Я., Яковлев С.А. Моделирование систем. Практикум: Учеб. пособие для вузов  по спец. "Автоматизир. системы обработки  информ. И упр.".-М.:Высш.шк., 1999.-224 с.
  2. http://www.sernam.ru/t_51.php - Характеристики цифровых сетей.
  3. Петров А.В. Моделирования систем. Учебное пособие. 2000 г.

 

Приложение  А

Листинг программы 

unit Unit1; 

interface 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, ComCtrls; 

type

  TForm1 = class(TForm)

    Button1: TButton;

    Label1: TLabel;

    Chart1: TChart;

    Series1: TLineSeries;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Chart2: TChart;

    Series2: TBarSeries;

    TrackBar1: TTrackBar;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Label10: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure TrackBar1Change(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form1: TForm1;

  buffer, raspred:array[1..16] of integer;

  count_out1, all_time, max_buf, count_out2, count_work, count_in, buf_capacity,time:integer; 

implementation 

{$R *.dfm} 

function getBufCount:integer;

var ii:integer;

cnt:integer;

begin

  cnt:=0;

  for ii:=1 to 16 do

     begin

        if buffer[ii]<>0 then inc(cnt);

     end;

  result:=cnt;

end; 

procedure working(t:integer);

var y:boolean;

i:integer;

begin

   y:=false;

   i:=buf_capacity;

   while y=false do

      begin

         dec(i);

         if buffer[i]<>0 then

            begin

               Form1.Series1.AddXY(time,buffer[i]+t);

               y:=true;

               inc(raspred[buffer[i]+t]);

               all_time:=all_time+buffer[i]+t;

               buffer[i]:=0;

            end;

         if i<=buf_capacity then

            begin

               y:=true;

            end;

      end;

end; 

procedure addtobuf;

var

y:boolean;

i:integer;

begin

   y:=false;

   i:=0;

   while y=false do

      begin

         inc(i);

         if buffer[i]=0 then

            begin

               buffer[i]:=1;

               y:=true;

            end;

         if i>=buf_capacity then

            begin

               if y<>true then

                  begin

                     y:=true;

                     inc(count_out1); //Ïîòåðÿííûé ïàêåò

                     Form1.Label1.Caption:=inttostr(count_out1);

                  end;

            end;

      end;

end; 

procedure TForm1.Button1Click(Sender: TObject);

var

i, time_get, time_do, time_work:integer;

flag:boolean;

begin

   Label1.Caption:='0';

   Label4.Caption:='0';

   Label8.Caption:='0';

   Label10.Caption:='0';

   Label12.Caption:='0';

   Series1.Clear;

   Series2.Clear;

   randomize;

   time:=0;

   all_time:=0;

   count_out1:=0;

   count_out2:=0;

   count_work:=0;

   count_in:=0;

   max_buf:=0;

   i:=0;

   time_work:=0;

   for i:=1 to 16 do

            begin

               buffer[i]:=0;

               raspred[i]:=0;

            end;

   flag:=true;

   buf_capacity:=TrackBar1.Position;

   time_do:=1;

   time_get:=1;

   while time<2000 do

      begin

         randomize;

         inc(time);

         //Èçìåíåíèå âðåìåíè íàõîæäåíèÿ  â áóôåðå çàïðîñîâ

         for i:=1 to buf_capacity do

            begin

              if buffer[i]<>0 then buffer[i]:=buffer[i]+1;

            end;

         //Äîáàâëåíèå íîâîãî çàïðîñà, åñëè  òðåáóåòñÿ

         if time=time_get then

            begin

              addtobuf;

              time_get:=time_get+2+random(3);

              inc(count_in);

              Label10.Caption:=inttostr(count_in);

            end;

         //Óäàëåíèå çàïðîñîâ > 8 ñåêóíä

         for i:=1 to buf_capacity do

            begin

               if buffer[i]>8 then

                  begin

                     buffer[i]:=0;

                     inc(count_out2);//Óâåëè÷èâàåì êîë-âî ïîòåðÿííûõ  ïàêåòîâ

                     Label4.Caption:=inttostr(count_out2);

                  end;

            end;

         //Îáðàáîòêà çàïðîñîâ

         if time=time_do then

            begin

              time_work:=3+random(5);

              time_do:=time_do+time_work;

              working(time_work);

              inc(count_work);

              Label8.Caption:=inttostr(count_work);

            end;

      if (max_buf<getBufCount) then max_buf:=getBufCount;

      end;

    for i:=4 to 14 do

      begin

        if raspred[i]<>0 then Series2.Add(raspred[i], inttostr(i), clRed);

      end;

    Label12.caption:=floattostr(all_time/count_work);

    //showmessage('Ìàêñèìàëüíàÿ  çàïîëíåííîñòü áóôåðà: '+inttostr(max_buf));

end; 

procedure TForm1.TrackBar1Change(Sender: TObject);

begin

Label6.Caption:= inttostr(Trackbar1.Position);

end; 

end.

Информация о работе Система обработки сообщений с ограниченным временем прохождения