КП (954317), страница 11
Текст из файла (страница 11)
Где tк1 и tк2 соответственно среднее время передачи запроса по каналу в прямом и обратном направлениях.
-
Порядок расчета рассматриваемой системы методом фонового потока.
Приближённый итерационный алгоритм нахождения значения и выходных характеристик аналитической модели имеет следующий вид:
1. Определяем начальное значение для ф1
К1 принимает значения в диапазоне 0.995…0.99995.
2. Определяем значения Тп и Тд соответственно из выражений (2), (3) и (4).
3. Определяем значение ф из следующего выражения:
4. Определяем относительную погрешность 1 для ф1 1 принимает значения в диапазоне 0.001…0.00001.
Если , то алгоритм завершил работу, и переходим к пункту 6, иначе выполняется следующий пункт алгоритма.
5. Определяем новое приближённое значение для ф1:
К2 принимает значения в диапазоне 10…1000.
После этого переходим к пункту 2 данного алгоритма.
Определяем выходные результаты аналитической модели:
Tреак=T0+Tк+(Tп+Tд) (10)
Tреак=(N-1)/ф–Tр (11)
2=Т/(Tреак+Tр) (12)
pп=2tп/С (13)
pдi=Pi2tд (14)
Предложенная аналитическая модель реализована программно на языке Delphi.
-
Листинг программы.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, ExtCtrls, jpeg;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Edit19: TEdit;
Button1: TButton;
Button2: TButton;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Image1: TImage;
Label23: TLabel;
Label24: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function GetMinimum(f1:real; f2:real; f3:real):real;
function GetPower( f:real;Power:real) :real;
var
Form2: TForm2;
//////////////////////////////////
NPC,NServ:Integer; //кол-во рабочих станций, серверов
MTQueryPC , // время дообработки запроса
MTFormQueryPC , //формирование запроса
MTTChannelDirect , // время передачи в прямом направлении
MTTChannelRevers , //время передачи в обратном направлении
MTQueryServer , //обработка на сервере
Precision : real;
implementation
{$R *.dfm}
function GetMinimum(f1:real; f2:real; f3:real):real;
var Minimum:real;
begin
Minimum := f1;
if (f2 < Minimum)then Minimum := f2;
if (f3 < Minimum)then Minimum := f3;
result:= Minimum;
end;
function GetPower( f:real;Power:real) :real;
var i:Integer;
begin
if Power=0 then result:= 1;
i:= 0;
while i < Power
do
begin
f := f*f;
i:= i+1;
end;
result:= f;
end;
function Calc():bool;
var tcs,T0,Tp,K1,K2,delta1,
Tk,Tc,Lf,B,Lf1,tk_,Ppc,
Pk,Pc,Tcircle,L, Treaction,Delta:real;
C :Integer;
N,IterationNumber :Integer;
begin
NPC := StrToInt(Form2.Edit1.Text);
NServ:= StrToInt(Form2.Edit6.Text);
MTQueryPC := StrToInt(Form2.Edit2.Text); // время дообработки запроса
MTFormQueryPC:= StrToInt(Form2.Edit3.Text); //формирование запроса
MTTChannelDirect := StrToInt(Form2.Edit8.Text); //время передачи в прямом направлении
MTTChannelRevers := StrToInt(Form2.Edit9.Text); //время передачи в обратном направлении
MTQueryServer := StrToInt(Form2.Edit7.Text); //обработка на сервере
Precision := StrToFloat(Form2.Edit5.Text);
IterationNumber :=0;
tcs := MTQueryServer; // время дообработки запроса
C := NServ;
N := NPC; //кол-во рабочих станций, серверов
T0 := MTQueryPC; // время дообработки запроса
Tp := MTFormQueryPC; //формирование запроса
K1 :=StrToFloat(Form2.Edit11.Text);
K2 := StrToInt(Form2.Edit13.Text);
delta1 := 0;
Tk := 0;
Tc := 0;
Lf := 0;
B := 1;
Lf1:= 0;
tk_ := 0.5 * (MTTChannelDirect + MTTChannelRevers);
// выходные данные
Ppc := 0;
Pk := 0;
Pc := 0;
Tcircle := 0;
L := 0;
Treaction := 0;
// шаг 1
Lf1 := K1*GetMinimum(1 / (2 * tk_), C/tcs, 10000) * (NPC - 1) / NPC;
while true do
begin
// шаг 2
Tk := 2 * tk_ / (1 - 2 * Lf1 * tk_);
Tc := tcs / (1 - GetPower(( Lf1 * tcs / C), C));
// шаг 3
Lf := (N - 1) / (T0 + Tp + Tk + Tc);
// шаг 4
Delta := (Abs(Lf1 - Lf) / Lf);
if ( Delta < Precision) then Break;
// шаг 5
delta1 := (Lf1 - Lf) / K2;
Lf1 := Lf1 - delta1;
end;
// шаг 6
Tk:= 2 * tk_ / (1 - 2 * Lf1 * tk_);
Tc := B * tcs / (1 - GetPower((B * Lf1 * tcs / C), C));
Tcircle := T0 + Tp + Tk + B * Tc;
Ppc := (T0 + Tp) / Tcircle;
L := N / Tcircle;
Pk := 2 * L * tk_;
Pc := B * L * tcs/C;
Treaction := Tcircle - (Tp);
// вывод
Form2.Edit4.Text := FloatToStr(RoundTo(Pk,-2));
Form2.Edit12.Text := FloatToStr(roundto(Ppc,-2));
Form2.Edit14.Text := FloatToStr(roundto((T0 / Tcircle),-2));
Form2.Edit10.Text := FloatToStr(roundto(Tcircle,-2));
Form2.Edit15.Text := FloatToStr(roundto((NPC * Ppc),-2));
Form2.Edit19.Text := FloatToStr(roundto(NPC * (Tp / Tcircle),-2));
Form2.Edit18.Text := FloatToStr(roundto(Treaction,-2));
Form2.Edit16.Text := FloatToStr(roundto((Pc/2),-2));
Form2.Edit17.Text := FloatToStr(roundto(L,-2));
/// конец
result:= true;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Calc();
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Close();
end;
end.
-
Интерфейс программы
Главная форма программы имеет вид:
Рис9. Главная форма программы
Вводим исходные данные и нажимаем кнопку «Вычислить»
-
Результаты аналитического эксперимента.
Таблица 38. Результаты аналитического эксперимента.
Номер эксперимента | 1 | 2 | 3 | 4 | 5 |
Исходные данные | |||||
Количество рабочих станций | 31 | 31 | 31 | 31 | 31 |
Среднее время дообработки запроса на РС | 310 | 210 | 310 | 310 | 310 |
Среднее время формирования запроса на РС | 310 | 310 | 210 | 310 | 310 |
Среднее время передачи через канал в прямом направлении | 5 | 5 | 5 | 5 | 5 |
Среднее время передачи через канал в обратном направлении | 5 | 5 | 5 | 5 | 5 |
Количество процессоров | 2 | 2 | 2 | 2 | 2 |
Среднее время обработки запроса на процессоре | 10 | 10 | 10 | 20 | 10 |
Результаты моделирования. | |||||
Загрузка рабочей станции | 0,83 | 0,92 | 0,92 | 0,78 | 0,82 |
Загрузка пользователя рабочей станции | 0,41 | 0,23 | 0,69 | 0,39 | 0,41 |
Среднее количество работающих РС | 5,8 | 6,4 | 6,44 | 5,5 | 5,77 |
Среднее количество РС формирующих запрос | 2,9 | 1,6 | 4,83 | 2,7 | 2,9 |
Загрузка канала | 0,42 | 0,23 | 0,23 | 0,39 | 0,41 |
Загрузка процессора | 0,21 | 0,13 | 0,13 | 0,39 | 0,2 |
Среднее время цикла системы | 167,7 | 304,3 | 304,3 | 179,3 | 169,6 |
Среднее время реакции системы | 97,7 | 234,3 | 94,3 | 109,3 | 99,6 |
-
Имитационное моделирование сети.
-
Формализованная схема.
-
Рис.11. Формализованная схема.
ОАдб – обслуживающий аппарат (ОА), имитирующий работу рабочей станции по дообработке запроса к серверу.
ОАф – ОА, имитирующий работу рабочей станции по формированию запроса к серверу.