ВИСНОВКИ
В результаті виконання курсової роботи визначена середня трудомісткість алгоритмів заявок, обчислена мінімальна швидкодія процесора, необхідна для розвязання потоку цих заявок, обрана найбільш вдала дисципліна обслуговування та розраховані параметри системи оперативної обробки мінімальної конфігурації, із заданим часом перебування та заданою вартістю.
Побудова логічних схем заявок та визначення середньої трудомісткості алгоритмів заявок методом марківських ланцюгів відбулися без використання компютера. Всі інші параметрі, які зазначені вище, були розраховані за допомогою програми, написаній на мові С++. Результати моделювання підтвердили очікувані закономірності. Спираючись на отримані результати програми, були побудовані графіки залежності часу очікування від швидкодії процесора, від завантаження потоком заявок, від пріоритету заявки для всіх дисциплін обслуговування.
ПЕРЕЛІК ПОСИЛАНЬ
1. Методичні вказівки до виконання курсової роботи з курсу “Компютерні системи” / Співст.: В.М.Струнілін . - Донецьк: ДонНТУ, 2008. - 23с.
2. Методичні вказівки по оформленню курсових і дипломних проектів (робіт) / Співст.: В.М.Струнілін. - Донецьк: ДонНТУ, 2010. - 24с.
Додаток А. Програма моделювання. Текст програми
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
FILE *fout; //файл результата
int flag=0;//флаг оптимального быстродействия
float Bmin,dB,a,c,d; //для процессора
float Boptim=0;//оптимальное быстродействие
float sum1,sum2,sum3,sum4;//для омега
float F;//Вероятностная функция штрафа
float R,l,L;//суммарная загрузка, для длины очереди
float omega[5];//среднее значение времени ожидания
float v[5]; //среднее значение времени пребывания
float ro[5]; //загрузка потока
float P[5];//вероятность пребывания
float lambda[5]={ 1.4, 1.0, 1.6, 1.6, 0.9}; //интенсивности потоков
float teta[5]={ 21020, 138532, 37460, 20416, 41200}; //трудоемкости
float nu[5]={ 0.8, 0.9, 1.0, 0.9, 0.95}; //коэффициенты вариации
float omega_z[5]={ 0.5, 3.1, 1.3, 1.3, 0.2}; //ограничение по времени ожидания
int q[5][5]={ 0,0,0,0,0, //матрица приоритетов
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0 };
void processor() //определение быстродействия процессора
{
int i;
for (i=a=c=d=0;i<5;i++)
{
a+=lambda[i]*teta[i];
c+=lambda[i]*teta[i]*teta[i]*(1+nu[i]*nu[i]);
d+=lambda[i]*teta[i]*omega_z[i];
}
Bmin=ceil(0.5*a+sqrt(0.25*a*(a+2*c/d)));
fprintf(fout,"Bmin = %7.4f операций в секунду ",Bmin);
Bmin=ceil(Bmin+(Bmin/10));
fprintf(fout,"Увеличиваем быстродействие процессора на 10% ");
fprintf(fout,"Bmin = %7.4f операций в секунду ",Bmin);
}
double shtraf(float Bproc)
{
int i,j;
for (i=0;i<5;i++)
{
v[i]=(float)teta[i]/Bproc;
ro[i]=lambda[i]*v[i];
}
for (i=0;i<5;i++)
{
for (j=0,sum1=sum2=sum3=sum4=0;j<5;j++)
{
sum1+=q[j][i]*(q[j][i]-1)*ro[j];
sum2+=(2-q[i][j])*(1+q[i][j])*lambda[j]*teta[j]*teta[j]*(1+nu[j]*nu[j]);
sum3+=q[j][i]*(3-q[j][i])*ro[j];
sum4+=(1-q[i][j])*(2-q[i][j])*ro[j];
}
omega[i]=sum2/(Bproc*(2-sum3)*(2-sum4));
omega[i]/=Bproc;
omega[i]+=((teta[i]*sum1)/(Bproc*(2-sum1)));
for (j=0,R=0;j<5;j++)
R+=ro[j];
L=R/(1-R);
l=L*R;
P[i]=R*exp((-R*omega_z[i])/omega[i]);
}
for (i=0,sum1=F=0;i<5;i++)
{
sum1+=lambda[i];
F+=lambda[i]*P[i];
}
return F;
}
void disciplina(int choice,float Bproc)
{
double cur_shtraf,min_shtraf;
int stb,stk,i,j;
int loop;
if(choice>3)
goto vyhod;
switch (choice)
{
case 0: for(stk=0;stk<5;stk++) //БП
for(stb=0;stb<5;stb++)
q[stk][stb]=0;
goto begin; //БП
case 1: for(stk=0;stk<5;stk++) //ОП
for(stb=0;stb<5;stb++)
if (omega_z[stk]<omega_z[stb])
q[stk][stb]=1;
else
if((omega_z[stk]==omega_z[stb])&&(stk!=stb))
{
if(teta[stk]<teta[stb])
q[stk][stb]=1;
}
goto begin;
case 2: for(stk=0;stk<5;stk++) //АП
for(stb=0;stb<5;stb++)
if (q[stk][stb]==1)
q[stk][stb]=2;
goto begin;
case 3: min_shtraf=shtraf(Bproc); //СП
for(stk=0;stk<5;stk++)
for(stb=0;stb<5;stb++)
if ((stb!=stk)&&(q[stk][stb]==2))
{
q[stk][stb]=1;
cur_shtraf=shtraf(Bproc);
if (cur_shtraf>min_shtraf)
q[stk][stb]=2;
else min_shtraf=cur_shtraf;
}
}
begin:
fprintf(fout," Матрица приоритетов ");
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
fprintf(fout,"%d ",q[i][j]);
fprintf(fout," ");
}
dB=Bproc/4;
for (loop=0;loop<5;loop++)
{
fprintf(fout," %u.Быстродействие процессора %7.4f операций в секунду ",loop+1,Bproc);
fprintf(fout," N Время обслуживания Загрузка Ср.знач.времени Запас по Вероятность ");
fprintf(fout," ср. знач. 2 нач. мом. потока ожид. пребыв. времени пребывания ");
for (i=0;i<5;i++)
{
v[i]=(float)teta[i]/Bproc;
ro[i]=lambda[i]*v[i];
}
for (i=0;i<5;i++)
{
fprintf(fout," %3u",i+1);
fprintf(fout," %7.4f",v[i]);
fprintf(fout," %7.4f",(float)v[i]*v[i]*(1+nu[i]*nu[i]));
fprintf(fout," %7.4f",ro[i]);
for (j=0,sum1=sum2=sum3=sum4=0;j<5;j++)
{
sum1+=q[j][i]*(q[j][i]-1)*ro[j];
sum2+=(2-q[i][j])*(1+q[i][j])*lambda[j]*teta[j]*teta[j]*(1+nu[j]*nu[j]);
sum3+=q[j][i]*(3-q[j][i])*ro[j];
sum4+=(1-q[i][j])*(2-q[i][j])*ro[j];
}
omega[i]=sum2/(Bproc*(2-sum3)*(2-sum4));
omega[i]/=Bproc;
omega[i]+=((teta[i]*sum1)/(Bproc*(2-sum1)));
fprintf(fout," %7.4f",omega[i]);
fprintf(fout," %7.4f",v[i]+omega[i]);
fprintf(fout," %7.4f",omega_z[i]-omega[i]);
for (j=0,R=0;j<5;j++)
R+=ro[j];
L=R/(1-R);
l=L*R;
P[i]=R*exp((-R*omega_z[i])/omega[i]);
fprintf(fout," %7.4f ",P[i]);
}
for (i=0,sum1=F=0;i<5;i++)
{
sum1+=lambda[i];
F+=lambda[i]*P[i];
}
if((flag==0)&&(choice==3)&&(F<=0.01))
{
Boptim=Bproc;
flag=1;
}
fprintf(fout," ");
fprintf(fout," Суммарная интенсивность - %5.4f ",sum1);
fprintf(fout," Суммарная загрузка - %5.4f ",R);
fprintf(fout," Вероятностная функция штрафа - %5.4f ",F);
fprintf(fout," Средняя длина очереди - %5.4f ",l);
Bproc+=dB;
}
vyhod:
}
void sintezKS()
{
float In[5]={1.4,1.0,1.6,1.6,0.9}; //интенсивность поступления задач
float Ino;//интенсивность потока заявок на решение средней задачи
float Ro;//средняя трудоемкость при решении средней задачи
float buf;
float Rp;//средняя трудоемкость этапа счета
float Po;// верoятность выхода задачи из системы
float Ihd,Ist;// интенсивность обращения к HD и ST
int zck;// число селекторных каналов
float Ick;//интенсивность обращения к селекторным каналам
float Phd,Pst;// вероятности обращения HD и ST
float Lhd,Lst;// средняя длина записи при обращении
float Tck;// среднее время передачи через селекторный канал
float Umin;//ср. время ответа системы
float Upr;//ср. время пребывания задачи на процессоре
float Uhd,Ust;//ср. время пребывания на HD и ST
float Uck;//ср.время пребывания задачи на СК
float Uz;//ограничение на время пребывания
float Uzz;
float Smin;//стоимость системы
float D[10];//среднее число обращений к файлу
float Do;// суммарное число обращений к файлу при решении средней задачи
char flags[10];
float z1hd,z1st,z2hd,z2st;// количество HD и ST
int zhd,zst;
float Dhd,Dst,Dck;// количество обращений к HD,ST,CK
float R[5]={21.02,138.532,37.460,20.416,41.2};// трудоемкость процессорных операций в тысячах
int N[5][10]={ // ср. число обращений к файлам
{ 0, 0, 3, 5, 7, 9, 1, 0, 0, 0},
{ 0, 0, 0, 0, 7, 9,11, 8, 5, 0},
{ 0, 0, 6, 4, 8, 9,12, 0, 0, 0},
{ 1, 2, 4, 8,10, 0, 0, 0, 0, 0},
{ 0, 0, 0, 8,12, 6, 2, 4, 0, 0} };
float P[10];// вероятность использования файлов
float Vpr;//минимальное быстродействие
float Inn[10];// интенсивность обращения к файлам
float T[10];// предельное время доступа к информации
int M[10]={5,6,7,8,9,10,9,8,7,6};//длина файла
int L[10]={10,9,8,7,6,5,6,7,8,9};//ср.длина записи
float Thd=0.06,Tst=2.0;//ср.время доступа к данным
int Vhd=190,Vst=50;//скорость передачи данных
int Mhd=9,Mst=16;//емкость накопителя
float Dp=4.5;//стоимостной коэффициент
int Shd=80,Sst=35,Sck=150;//стоимость устройств
int n1=1,n2=3; //число нетиповых (CPU) и типовых (HD,ST,CK) устройств
float sqrt_q;//неопределенный коэффициент
float Vi;//быстродействие
int z_hd,z_st,z_ck;//количество типовых устройств
float U1;// задержка в решении задачи, связанная с округлением
float U;
float S;//стоимость ВС
float U1z;//новое ограничение
float Sz;
float Szz;
float sqrt_q1;
float V1;
int z_hd1,z_st1,z_ck1;
float S0;
int i,j;
fprintf(fout," Синтез СОО минимальной конфигурации ");
for (i=0,Ino=0;i<5;i++)
Ino+=In[i];
fprintf(fout,"Интенсивность потока заявок на решение средней задачи Ino=%3.2f ",Ino);
for (i=0,buf=0;i<5;i++)
buf+=In[i]*R[i];
Ro=buf/Ino;
fprintf(fout,"Средняя трудоемкость при решении средней задачи Ro=%5.2f тысяч процессорных операций ",Ro);
fprintf(fout,"Среднее число обращений к файлам F[j]: ");
for (i=0;i<10;i++)
{
for (j=0,buf=0;j<5;j++)
{
buf+=In[j]*N[j][i];
}
D[i]=(buf/Ino);
fprintf(fout," D(%u)=%5.3f ",i+1,D[i]);
}
for (i=0,Do=0;i<10;i++)
Do+=D[i];
fprintf(fout,"Суммарное число обращений к файлам при выполнении средней задачи Do=%5.3f ",Do);
fprintf(fout,"Вероятность использования файла F[j] при решении задач: ");
for (i=0;i<10;i++)
{
P[i]=D[i]/(Do+1);
fprintf(fout," P(%u)=%4.3f ",i+1,P[i]);
}
Rp=Ro/(Do+1);
fprintf(fout,"Средняя трудоемкость этапа счета Rp=%5.2f тысяч операций ",Rp);
Po=1/(Do+1);
fprintf(fout,"Вероятность выхода задачи из системы Po=%4.3f ",Po);
Vpr=((Boptim)/1000);
fprintf(fout,"Быстродействие процессора, которое обеспечивает минимальную функцию штрафа ");
fprintf(fout,"Vpr=%f тысяч операций в секунду ",Vpr);
fprintf(fout,"Интенсивность обращения к файлам F[j]: ");
for (i=0;i<10;i++)
{
Inn[i]=(float)Ino*D[i];
fprintf(fout," Inn(%u)=%4.3f ",i+1,Inn[i]);
}
fprintf(fout,"Предельное время доступа к информации: ");
for (i=0;i<10;i++)
{
if (Inn[i]!=0)
{ T[i]=(float)1/Inn[i];
fprintf(fout," T(%u)=%4.3f ",i+1,T[i]);
}
else
{T[i]=-1;
fprintf(fout," T(%u)=неопределенно ",i+1);
}
if (T[i]!=-1)
{
if (T[i]<Tst)
{
fprintf(fout,"необходимо размеcтить на HD ");
flags[i]=h;
}
else
{
fprintf(fout,"необходимо размеcтить на ST ");
flags[i]=s;
}
}
else
{
fprintf(fout,"неопределенно ");
flags[i]=u;
}
}
for (i=0,Dhd=Dst=0;i<10;i++)
{
if (flags[i]==h)
Dhd+=D[i];
else
Dst+=D[i];
}
fprintf(fout,"Количество обращений к HD Dhd=%5.3f ",Dhd);
fprintf(fout,"Количество обращений к ST Dst=%5.3f ",Dst);
Ihd=Ino*Dhd;
fprintf(fout,"Интенсивность обращения к HD Ihd=%5.3f ",Ihd);
Ist=Ino*Dst;
fprintf(fout,"Интенсивность обращения к ST Ist=%5.3f ",Ist);
z1hd=(Ihd*Thd);
z1st=(Ist*Tst);
fprintf(fout,"Количество HD по коэффициенту загрузки Z1hd=%5.3f ",z1hd);
fprintf(fout,"Количество ST по коэффициенту загрузки Z1st=%5.3f ",z1st);
for (i=0,z2hd=z2st=0;i<10;i++)
{
if (flags[i]==h)
z2hd+=M[i];
else
z2st+=M[i];
}
z2hd=(z2hd/Mhd);
z2st=(z2st/Mst);
fprintf(fout,"Количество HD по емкости Z2hd=%5.3f ",z2hd);
fprintf(fout,"Количество ST по емкости Z2st=%5.3f ",z2st);
if((z1hd>0)&&(z2hd>0))
{
if (z1hd>z2hd)
zhd= ceil (z1hd);
else
zhd= ceil (z2hd);
}
else
zhd=0;
if((z1st>0)&&(z2st>0))
{
if (z1st>z2st)
zst= ceil (z1st);
else
zst= ceil (z2st);
}
else
zst=0;
fprintf(fout,"Выбранное количество HD в проектируемой системе Zhd=%u ",zhd);
fprintf(fout,"Выбранное количество ST в проектируемой системе Zst=%u ",zst);
Ick=Ino*Do;
fprintf(fout,"Интенсивность обращения к селекторным каналам Ick=%5.3f ",Ick);
for (i=0,Phd=Pst=Lhd=Lst=0;i<10;i++)
{
if (flags[i]==h)
{
Phd+=P[i];
Lhd+=L[i]*P[i];
}
else
{
Pst+=P[i];
Lst+=L[i]*P[i];
}
}
fprintf(fout,"Вероятность обращения к HD Phd=%5.3f ",Phd);
fprintf(fout,"Вероятность обращения к ST Pst=%5.3f ",Pst);
Lhd=Lhd/Phd;
if(Pst>0)
Lst=Lst/Pst;
else
Lst=0;
fprintf(fout,"Средняя длина записи при обращении к HD Lhd=%5.3f Кб ",Lhd);
fprintf(fout,"Средняя длина записи при обращении к ST Lst=%5.3f Кб ",Lst);
Tck=Lhd*Phd/Vhd+Lst*Pst/Vst;
zck=ceil(Ick*Tck);
fprintf(fout,"Среднее время передачи средней записи через селекторный канал Tck=%5.3f c ",Tck);
fprintf(fout,"Количество селекторных каналов Zck=%u ",zck);
Upr=Ro/(Vpr-Ino*Ro);
if(zhd>0)
Uhd=Thd/(1-Ihd*Thd/zhd);
else
Uhd=0;
if(zst>0)
Ust=Tst/(1-Ist*Tst/zst);
else
Ust=0;
if(zck>0)
Uck=Tck/(1-Ick*Tck/zck);
else
Uck=0;
Umin=Upr+Dhd*Uhd+Dst*Ust+Do*Uck;
fprintf(fout,"Среднее время пребывания средней задачи на процессоре Upr=%6.3f c ",Upr);
fprintf(fout,"Среднее время пребывания на HD Uhd=%5.3f c ",Uhd);
fprintf(fout,"Среднее время пребывания на ST Ust=%5.3f c ",Ust);
fprintf(fout,"Среднее время пребывания заявки в селекторном канале Uck=%5.3f c ",Uck);
fprintf(fout,"Среднее время ответа в СОО Umin=%5.3f c ",Umin);
Smin=Dp*Vpr+zck*Sck+zhd*Shd+zst*Sst;
fprintf(fout,"Стоимость СОО Smin=%5.3f единиц стоимости",Smin);
fprintf(fout," Синтез СОО с заданным временем пребывания ");
Uz=0.5*Umin;
fprintf(fout,"Ограничение по времени пребывания Uz=%5.3f с ",Uz);
fprintf(fout,"Количество типовых устройств N1=%u Количество нетиповых устройств N2=%u ",n2,n1);
Dck=Dhd+Dst;
Uzz=Uz-(Dhd*Thd+Dst*Tst+Dck*Tck);
fprintf(fout,"Результирующее значение Uzz=%5.3f с ",Uzz);
sqrt_q=(sqrt(Ro*Dp)+(Thd*sqrt(Dhd*Ihd*Shd)+Tst*sqrt(Dst*Ist*Sst)+Tck*sqrt(Dck*Ick*Sck)))/Uzz;
fprintf(fout,"Неопределенный коэффициент Лагранжа sqrt_q=%5.3f ",sqrt_q);
Vi=Vpr+sqrt_q*sqrt(Ro/Dp);
fprintf(fout,"Быстродействие при первом приближении Vprmin=%5.3f тысяч операций в секунду ",Vi);
z_hd=ceil(Ihd*Thd+Thd*sqrt_q*sqrt(Dhd*Ihd/Shd));
z_st=ceil(Ist*Tst+Tst*sqrt_q*sqrt(Dst*Ist/Sst));
z_ck=ceil(Ick*Tck+Tck*sqrt_q*sqrt(Dck*Ick/Sck));
fprintf(fout,"Количество типовых устройств: ");
fprintf(fout," HD=%u ST=%u CK=%u ",z_hd,z_st,z_ck);
if (z_st>0)
{
U1=Uz-((Dhd*z_hd*Thd/(z_hd-Ihd*Thd))+(Dst*z_st*Tst/(z_st-Ist*Tst))+(Dck*z_ck*Tck/(z_ck-Ick*Tck)));
- ВСТУП
- 1. ВИЗНАЧЕННЯ СЕРЕДНЬОЇ ТРУДОМІСТКОСТІ АЛГОРИТМІВ ЗАЯВОК
- 1.1 Обчислення середньої трудомісткості потоку заявок №5
- 1.2 Обчислення середньої трудомісткості потоку заявок №9
- 1.3 Обчислення середньої трудомісткості потоку заявок №18
- 1.4 Обчислення середньої трудомісткості потоку заявок №3
- 1.5 Обчислення середньої трудомісткості потоку заявок №10
- 2. ОБЧИСЛЕННЯ МІНІМАЛЬНОЇ ШВИДКОДІЇ ПРОЦЕСОРА
- 3. ВИБІР ДИСЦИПЛІНИ ОБСЛУГОВУВАННЯ ТА РОЗРАХУНОК ХАРАКТЕРИСТИК КОМПЮТЕРНОЇ СИСТЕМИ
- 3.1 Дослідження безпріоритетної дисципліни обслуговування
- 3.2 Дослідження дисципліни обслуговування з відносним пріоритетом
- 3.3 Дослідження дисципліни обслуговування з абсолютним пріоритетом
- 3.4 Дослідження дисципліни обслуговування зі змішаними пріоритетами
- 4 РОЗРАХУНОК ХАРАКТЕРИСТИК КС МІНІМАЛЬНОЇ КОНФІГУРАЦІЇ
- 6. РОЗРАХУНОК ХАРАКТЕРИСТИК КС ЗАДАНОЇ ВАРТОСТІ
- 8. ПОРІВНЯННЯ АНАЛІТИЧНИХ РОЗРАХУНКІВ З РЕЗУЛЬТАТАМИ МОДЕЛЮВАННЯ
- ВИСНОВКИ