- •Исследование алгоритмов управления ресурсами однопроцессорных серверов при оперативной обработке задач (алгоритмы spt и rr) курсовая. Введение
- •1. Постановка задачи
- •2. Теоретическая часть
- •2.1 Алгоритм spt
- •2.2 Алгоритм rr
- •2.3 Алгоритм fb
- •3. Описание алгоритма
- •Представленная программа основана на очереди заявок, реализованной на списках. Для реализации программы использовались следующие блоки:
- •4. Результаты работы
- •5. Анализ работы программы
- •Список используемых источников
Список используемых источников
В.И. Ключко, В.И.Лойко, Архитектура вычислительных систем и сетей ЭВМ. Изд. КубГТУ. 2000г.-153с.
В.И. Лойко, Методические указания к лабораторным работам. Изд. КубГТУ. 2000г. -25с.
Приложения
Приложение 1
Листинг программы
Program Kurs;
Uses Crt;
Type
pointer=^pnt;
pnt =record
ptr:pointer;
time:integer;
end;
Var i: integer;
a,prr,pspt,ph,p1,p2,px:pointer;
l,r,N,t,t2,k,k2,v,d,s2,c:integer;
P, Dlit, Short: Integer;
Summ,Tspt,Trr:Integer;
ch:char;
{Процедура добавления заявки}
Procedure push (var px,y:pointer; l:integer);
begin
new(p1);
p1^.ptr:=nil;
if y=nil then
begin
px:=p1;
y:=p1;
y^.time:=l;
end
else
begin
y^.ptr:=p1;
y^.time:=l;
end;
y:=p1;
end;
Begin
Repeat
Clrscr;
Randomize;
{ Число тактов}
Write(' Введите число заявок (100 или 1000) ');
Readln(N);
{ Вероятность прихода заявки}
Write(' Введите вероятность прихода заявки (30% или 60%) ');
Readln(P);
{ Длительность решения задачи}
Write(' Введите длительность решения задачи (0-7) ');
Readln(Dlit);
{ Заявка считается короткой}
Writeln(' Заявка считается короткой (4) ');
{Readln(}Short:=4;{);}
{Заполнение списка заявок}
a:=nil;ph:=nil;p1:=nil;p2:=nil;prr:=nil;pspt:=nil;
v:=0;
c:=0;
Summ:=0;
{ For i:=1 to n do}
Repeat
begin
r:=random(10)+1; {Генерации вероятности прихода заявки}
If r<=(P div 10) {------------------------}
then
begin
l:=random(Dlit)+1; {Генерация длительности заявки}
push(ph,a,l); {Добавление заявки}
inc(v); {Счетчик заявок}
Summ:=Summ+l; {Сумма длинн заявок}
end
else push(ph,a,0); {Заявки нет}
c:=c+1;
end;
Until v=n;
Writeln;
Writeln(' Сумма длин всех заявок: ',Summ);
{;Алгоритм без сортировки}
t:=0;
a:=ph;
k:=0;
i:=1;
s2:=0;
d:=0;
Tspt:=0;
Repeat
If a^.time=0 {Если время заявки 0 (заявки в этот такт нет) }
then
begin
if d<i then
begin
d:=i; {Простой}
inc(s2);
inc(t)
end;
a:=a^.ptr; {Следующая заявка}
end
else
begin
if d<i then
begin
d:=d+a^.time;
inc(t,a^.time);
inc(k);
a:=a^.ptr; {Следующая заявка}
end
end;
inc(i);
Until (a^.ptr=nil) ; { Заявки кончились}
s2:=n-s2;
If k=0 then k:=1;
Writeln;
Writeln(' Среднее время пребывания заявки в очереди : ',t/k:0:4);
Writeln(' Число тактов процессора: ',d);
{;Алгоритм SPT с сортировкой}
t:=0;
a:=nil;
px:=ph;
k:=0;
i:=1;
s2:=0;
d:=0;
Tspt:=0;
repeat
if (px^.time=0) then
if (a=nil) then
begin
ph:=px^.ptr;
Dispose(px);
px:=ph;
end
else
begin
a^.ptr:=px^.ptr;
Dispose(px);
px:=a^.ptr;
end
else begin
a:=px;
px:=px^.ptr;
end;
Until (a^.ptr=nil);
a:=ph;
Repeat
inc(Tspt);
If a^.time=0 {Если время заявки 0 (заявки в этот такт нет) }
then
begin
if d<i then
begin
d:=i; {Простой}
inc(s2)
end;
a:=a^.ptr; {Следующая заявка}
end
else
begin
if d<i then
begin
d:=d+a^.time; { Считаем число тактов работы алгоритма SPT }
inc(t,a^.time);
inc(k);
a:=a^.ptr; {Следующая заявка}
end
end;
inc(i);
Until (a^.ptr=nil) ; { Заявки кончились}
s2:=n-s2;
If k=0 then k:=1;
Writeln;
Writeln(' SPT: Среднее время пребывания заявки в очереди : ',t/k:0:4);
Writeln(' Число тактов процессора: ',d);
{;Алгоритм RR}
t:=0;
t2:=0;
s2:=0;
a:=ph;
k:=0;
k2:=0;
i:=1;
d:=0;
Trr:=0;
Repeat
inc(Trr); { Считаем время работы алгоритма RR }
If a^.time=0 {Если время заявки 0 (заявки в этот такт нет) }
then
begin
if d<i then
begin
d:=i;
inc(s2)
end;
a:=a^.ptr; { Следующая заявка}
end
else
if (a^.time>0) and (a^.time<5) {Если длина заявки дольше короткой}
then
begin
if d<i then
begin
d:=d+a^.time;
inc(t,a^.time);
inc(k);
a:=a^.ptr; { Следующая заявка}
end
end
else {Отбрасываем длинную заявку в конец очереди}
begin
if d<i then
begin
d:=d+Short;
p2:=a^.ptr;
inc(t2,a^.time);
inc(k2);
r:=a^.time-Short;
repeat
a:=a^.ptr;
until a^.ptr=nil;
push(ph,a,r);
a:=p2;
end
end;
inc(i);
Until (a^.ptr=nil) ;
s2:=n-s2;
If k=0 then k:=1;
Writeln;
Writeln(' RR : Среднее время пребывания короткой заявки в очереди : ',t/k:0:4);
Writeln(' Среднее время пребывания длинной заявки в очереди : ',t2/k2:0:4);
Writeln(' Число тактов процессора: ',d);
Writeln;
Writeln('Выход? (Y-Да) ' );
Ch:=ReadKey;
Until (Ch='y') or (CH='Y') or (CH='н')or(CH='Н');
End.
Приложение 2
Результат работы программы
Результат работы программы для 100 заявок с вероятностью прихода заявки 60%, длительностью решения задачи 7т:
Результат работы программы для 100 заявок с вероятностью прихода заявки 60%, длительностью решения задачи 7т:
Размещено на Allbest.ru