КР (954217), страница 14
Текст из файла (страница 14)
Определяем загрузку основных узлов системы: рабочей станции, пользователя,канала передачи данных, процессоров и дисков сервера.
загрузка рабочей станции:
загрузка пользователя: где
загрузка канала
загрузка процессора
загрузка дисков где
Листинг программы
private void btnStart_Click(object sender, RoutedEventArgs e)
{
//входные данные
int N = Convert.ToInt32(this.mtxtN.Text);
int PR = Convert.ToInt32(this.mtxtPR.Text);
int D = Convert.ToInt32(this.mtxtDn.Text);
int T0 = Convert.ToInt32(this.mtxtT0.Text);
int Tp = Convert.ToInt32(this.mtxtTp.Text);
int Tk = Convert.ToInt32(this.mtxtTk.Text);
int Td = Convert.ToInt32(this.mtxtTd.Text);
int Tpr = Convert.ToInt32(this.mtxtTpr.Text);
double K1 = Convert.ToDouble(this.mtxtK1.Text);
double K2 = Convert.ToDouble(this.mtxtK2.Text);
double B = 1 / (1 - Convert.ToDouble(this.mtxtPi.Text));
double delta = Convert.ToDouble(this.mtxtD.Text);
double Pi = Math.Pow(Convert.ToInt32(this.mtxtDn.Text), -1);
double _lf1;
double _lf;
double _Tk;
double _Td;
double _Tpr;
int iter = 0;
//шаг 1
_lf1 = K1 * Math.Min(1 / (2 * Tk), Math.Min(PR / (B * Tpr), 1 / (B * Pi * Td))) * (N - 1) / N;
while (true)
{
//шаг 2
_Tk = (2 * Tk) / (1 - 2 * _lf1 * Tk);
_Tpr = (B * Tpr) / (1 - Math.Pow(B * _lf1 * Tpr / PR, PR));
_Td = B * Pi * Td / (1 - B * Pi * _lf1 * Td);
//шаг 3
_lf = (N - 1) / (T0 + Tp + _Tk + _Tpr + _Td);
//шаг 4
if (delta > (Math.Abs(_lf1 - _lf) / _lf))
break;
//шаг 5
_lf1 = _lf1 - (_lf1 - _lf) / K2;
iter++;
}
//шаг 6
_Tk = (2 * Tk) / (1 - 2 * _lf1 * Tk);
_Tpr = (B * Tpr) / (1 - Math.Pow(B * _lf1 * Tpr / PR, PR));
_Td = B * Pi * Td / (1 - B * Pi * _lf1 * Td);
double Tsc = T0 + Tp + _Tk + _Tpr + _Td;
double Rpc = (T0 + Tp) / Tsc;
double a = N / Tsc;
double Rk = 2 * a * Tk;
double Rpr = B * a * Tpr;
double Rd = B * a * Pi * Td;
this.txtRpc.Text = Rpc.ToString();
this.txtRu.Text = (Tp / Tsc).ToString();
this.txtNpc.Text = (N * Rpc).ToString();
this.txtNpcf.Text = (N * Tp / Tsc).ToString();
this.txtRk.Text = Rk.ToString();
this.txtRd1.Text = Rd.ToString();
this.txtRpr.Text = (Rpr / PR).ToString();
this.txtTsc.Text = Tsc.ToString();
this.txtTrs.Text = (Tsc - Tp).ToString();
this.txtIter.Text = iter.ToString();
}
Таблица 38. Результаты аналитического моделирования.
Номер эксперимента | 1 | 2 | 3 | 4 | 5 |
Исходные данные | |||||
Количество рабочих станций | 21 | 21 | 21 | 21 | 21 |
Среднее время дообработки запроса на РС | 210 | 420 | 210 | 210 | 210 |
Среднее время формирования запроса на РС | 210 | 420 | 210 | 210 | 210 |
Среднее время передачи через канал в прямом направлении | 5 | 5 | 10 | 5 | 5 |
Среднее время передачи через канал в обратном направлении | 5 | 5 | 10 | 5 | 5 |
Количество процессоров | 2 | 1 | 1 | 1 | 1 |
Среднее время обработки запроса на процессоре | 10 | 10 | 10 | 20 | 10 |
Количество дисков | 2 | 1 | 1 | 1 | 1 |
Среднее время обработки запроса на диске | 20 | 20 | 20 | 20 | 40 |
Вероятность обращения запроса к диску сервера после обработки запроса в процессоре | 0,8 | 0,8 | 0,8 | 0,8 | 0,8 |
Вероятность обращения запроса к ЦП после обработки на диске | 0 | 0 | 0 | 0 | 0 |
Результаты моделирования | |||||
Загрузка рабочей станции | 0,384 | 0,385 | 0,196 | 0,186 | 0,099 |
Загрузка пользователя рабочей станции | 0,192 | 0,192 | 0,098 | 0,093 | 0,049 |
Среднее количество работающих РС | 8,08 | 8,104 | 4,133 | 3,924 | 2,086 |
Среднее количество РС, формирующих запрос | 4,04 | 4,052 | 2,066 | 1,962 | 1,043 |
Загрузка канала | 0,192 | 0,096 | 0,196 | 0,093 | 0,049 |
Загрузка процессора | 0,48 | 0,482 | 0,492 | 0,934 | 0,248 |
Загрузка диска | 0,961 | 0,964 | 0,984 | 0,934 | 0,993 |
Среднее время цикла системы | 1092 | 2176 | 2134 | 2247 | 4227 |
Среднее время реакции системы | 882 | 1756 | 1923 | 2037 | 4016 |
Количество итераций | 2460 | 2320 | 1427 | 2044 | 1007 |
-
Имитационное моделирование сети
Рис. 73. Формализованная схема рассматриваемой РСОД.
Структура программы
Структура программы имеет следующий вид:
Таблица 4139. Структура программы.
Блоки и метки | Пояснение |
INITIAL | Задание количественных и временных параметров исходных данных моделируемой системы |
STORAGE | Задание многоканальных узлов системы |
FUNCTION | Задание функции распределения запросов по узлам и времени выполнения запросов в узлах |
GENERATE | Генерация количества задач, циркулирующих в системе |
Метка WOSF | Объединяет набор блоков, описывающих формирование запроса на рабочей станции |
Метка CAN | Объединяет набор блоков, описывающих обработку запроса в канале |
Метка SVR | Объединяет набор блоков, описывающих обработку запроса в процессоре |
Метка REP | Объединяет набор блоков, описывающих правило перехода запроса после обработки на диске в канал |
Метка WOSD | Объединяет набор блоков, описывающих дообработку запроса на рабочей станции |
Листинг программы на языке GPSS
INITIAL X$STATION_N,21
INITIAL X$STATION_TD,210
INITIAL X$STATION_TF,210
INITIAL X$CANAL_T,10
INITIAL X$SERVER_T,10
INITIAL X$DISK_N,1
INITIAL X$DISK_T,40
INITIAL X$PROBABILITY,0.8
WORKSTATION_D STORAGE 21
WORKSTATION_F STORAGE 21
SERVER STORAGE 1
DISK_N FUNCTION RN1,D2
0.5,1/1,2
EXPON FUNCTION RN1,C23
0,0/.1,.104/.2,.222/.3,.355/.4,.510/.5,.69/.6,.915/.7,1.2/
.75,1.37/.8,1.5/.84,1.83/.88,2.12/.9,2.3/.92,2.52/.94,2.82/
.95,2.98/.96,3.2/.97,3.5/.98,3.9/.995,5.3/.998,6.2/.9995,7/1,8
GENERATE ,,,X$STATION_N
WOSF QUEUE QSYSTEM
QUEUE QFORM
ENTER WORKSTATION_F,1
ADVANCE X$STATION_TF,FN$EXPON
LEAVE WORKSTATION_F,1
DEPART QFORM
ASSIGN 3,SVR
CAN QUEUE QCANAL
SEIZE CANAL
DEPART QCANAL
ADVANCE X$CANAL_T,FN$EXPON
RELEASE CANAL
TRANSFER ,P3
SVR ENTER SERVER,1
ADVANCE X$SERVER_T,FN$EXPON
LEAVE SERVER,1
ASSIGN 5,FN$DISK_N
QUEUE P5
SEIZE P5
DEPART P5
ADVANCE X$DISK_T,FN$EXPON
RELEASE P5
TRANSFER X$PROBABILITY,PER,SVR
PER ASSIGN 3,WOSD
TRANSFER ,CAN