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);