You are on page 1of 1

Klijent - server aplikacija.

Server ima zadatak da sinhronizovano opsluzuje zahteve


klijenata. Zahtevi se opsluzuju u redosledu dolazaka klijentskih zahteva i dok se
jedan zahtev obradjuje na serveru, drugi ulaze u red cekanja. Klijentski zahtevi
dolaze na slucajan nacin po Poasonovoj raspodeli sa konstantom LambdaZahteva i
obradjuju se u vremenima generisanim na slucajan nacin po Poas. raspodeli sa
konstantom LambdaObrade. Napisati funkciju koja odredjuje duzinu reda cekanja (za
svaki trenutak) i prosecno cekanje klijentskih zahteva (dobija se kada se zbir svih
vremena cekanja zahteva podeli sa brojem zahteva). Vreme simulacije je VremeSim.
KOD:
function [q,d] = server(LambdaZahteva, LambdaObrada, VremeSim)
dolasci = poissrnd(LambdaZahteva, 1, VremeSim);
wait = poissrnd(LambdaObrada, 1, VremeSim); // za svaki trenutak koliko se ceka na
obradu
dolasci = cumsum(dolasci);
d=dolasci(dolasci<=VremeSim); // u kojim trenucima dolaze zahtjevi
q=zeros(1,VremeSim);
q(1) = sum(d==1); //uzimam za prvi trenutak broj pridoslih zahteva, ako ih ima
vremeCekanja=0; // sabiram vremena cekanja
for t=1:VremeSim
if (q(t)==0)
q(t) = sum(d==t); // ovaj if je iz razloga, ako se desi da nisam
provjerio
end // za trenutak t pa mi ostala nula u tom trenutku u nizu
if (q(t)>0) // ako imam zahtjeva trenutno, odradicu jedan, ostali u red
q(t) = q(t) - 1; //skidam ga sa reda cekanja za taj trenutak
k=0;
vremeCekanja = vremeCekanja + wait(t);
while (t<=VremeSim && k<=wait(t)) //zadrzavam server dok se obradjuje
ovaj
t=t+1; // i pravim red za svaki trenutak
q(t) = sum(d==t); // inkrementiram t i dodajem na red za taj
trenuta
q(t+1) = q(t) + q(t-1); // dodajem i ove sto su cekali prije
d(d==t) = 0; //ponistavam vreme zahtjeva za taj tren da mi se ne
bi kasnije dodao
k=k+1; // k ide od 0 do trjanja obrade trenutnog zahtjeva
end
t=t-1;
end
end
d = vremeCekanja / length (d); //prosjecno vrijeme cekanja
-------
main:
[q,d] = server(3,3,20);

by Skovla ;)

Rok Jul2009 iako se slika zove jul2010

You might also like