jakie egzamin, egzamin 11, Serwer 4 procesorowy, procesory niezależne, bufor na 6 miejsc, czas obsługi wykładniczy u


Serwer 4 procesorowy, procesory niezależne, bufor na 6 miejsc, czas obsługi wykładniczy u. Jaki będzie najkrótszy, średni i najdłuższy czas obsługi, narysować model."

MAIN MODULE zad3;

FROM IOMod IMPORT ReadKey;

FROM RandMod IMPORT Random, RandomObj;

FROM ListMod IMPORT QueueList;

FROM SimMod IMPORT SimTime, StartSimulation;

FROM SimMod IMPORT TriggerObj;

FROM StatMod IMPORT SREAL,RStatObj;

TYPE ZadanieRec = RECORD

start: REAL;

END RECORD;

ServerObj = OBJECT; FORWARD;

TYPE

BuforObj = OBJECT(QueueList)

dlugosc: INTEGER;

server: ServerObj;

trig: TriggerObj;

ASK METHOD Dodaj(INOUT zadtemp: ZadanieRec);

ASK METHOD Init(IN servertemp: ServerObj; IN trigtemp:TriggerObj);

END OBJECT;

TYPE

GenZadObj = OBJECT

lambda: REAL;

bufor: BuforObj;

los: RandomObj;

ASK METHOD Init(IN lambdatemp: REAL; IN lostemp: RandomObj; IN bufortemp: BuforObj);

TELL METHOD GenerujZad(IN LZ: INTEGER);

END OBJECT;

TYPE ServerObj = OBJECT;

czasobsl: SREAL;

bufor: BuforObj;

los: RandomObj;

iloscproc: INTEGER;

u: REAL;

ilosczajetych: INTEGER;

trig: TriggerObj;

ASK METHOD Init(IN bufortemp:BuforObj; IN lostemp:RandomObj; IN utemp:REAL; IN trigtemp: TriggerObj);

ASK METHOD Wolny():BOOLEAN;

TELL METHOD Obsluga();

END OBJECT;

OBJECT BuforObj;

ASK METHOD Init(IN servertemp: ServerObj; IN trigtemp:TriggerObj);

BEGIN

server:=servertemp;

trig:=trigtemp;

dlugosc:=6;

END METHOD;

ASK METHOD Dodaj(INOUT zadtemp: ZadanieRec);

BEGIN

IF numberIn >= dlugosc

DISPOSE(zadtemp);

ELSE

Add(zadtemp);

IF ASK server TO Wolny()

ASK trig TO Release();

END IF;

END IF;

END METHOD;

END OBJECT;

OBJECT ServerObj;

ASK METHOD Init(IN bufortemp:BuforObj; IN lostemp:RandomObj; IN utemp:REAL;IN trigtemp: TriggerObj);

BEGIN

bufor:=bufortemp;

los:=lostemp;

u:=utemp;

iloscproc:=4;

ilosczajetych:=0;

trig:=trigtemp;

END METHOD;

ASK METHOD Wolny():BOOLEAN;

BEGIN

IF ilosczajetych<iloscproc

RETURN TRUE;

ELSE

RETURN FALSE;

END IF;

END METHOD;

TELL METHOD Obsluga();

VAR

zadanie: ZadanieRec;

Czas: REAL;

BEGIN

WHILE TRUE

IF ASK bufor TO numberIn > 0

INC(ilosczajetych);

OUTPUT("Aktualny czas: ", SimTime," Obsluga zadania - start");

zadanie := ASK bufor TO Remove();

Czas := ASK los TO Exponential(1.0/u);

WAIT DURATION Czas;

ON INTERRUPT;

END WAIT;

czasobsl:=SimTime-zadanie.start;

DISPOSE(zadanie);

OUTPUT("Aktualny czas: ", SimTime," Obsluga zadania - koniec");

DEC(ilosczajetych);

ELSE

WAIT FOR trig TO Fire();

END WAIT;

END IF;

END WHILE;

END METHOD;

END OBJECT;

OBJECT GenZadObj;

ASK METHOD Init(IN lambdatemp: REAL; IN lostemp: RandomObj; IN bufortemp: BuforObj);

BEGIN

lambda:=lambdatemp;

los:=lostemp;

bufor:=bufortemp;

END METHOD;

TELL METHOD GenerujZad(IN LZ: INTEGER);

VAR

i:INTEGER;

zadanie: ZadanieRec;

dt: REAL;

BEGIN

FOR i:=1 TO LZ

dt:=ASK los TO Exponential(1.0/lambda);

WAIT DURATION dt;

END WAIT;

NEW(zadanie);

OUTPUT("Aktualny czas: ", SimTime," Wygenerowano zadanie nr: ",i);

zadanie.start:=SimTime;

ASK bufor TO Dodaj(zadanie);

END FOR;

END METHOD;

END OBJECT;

VAR

tmp:CHAR;

bufor:BuforObj;

GenZad:GenZadObj;

los:RandomObj;

trig:TriggerObj;

server:ServerObj;

BEGIN

NEW(bufor);

NEW(GenZad);

NEW(server);

NEW(los);

NEW(trig);

ASK bufor TO Init(server,trig);

ASK GenZad TO Init(2.0,los,bufor);

ASK server TO Init(bufor,los,5.0,trig);

TELL server TO Obsluga();

TELL GenZad TO GenerujZad(10);

StartSimulation();

OUTPUT("sredni czas obslugi : ",ASK GETMONITOR(ASK server TO czasobsl,RStatObj) TO Mean());

OUTPUT("maksymalny czas obslugi : ",ASK GETMONITOR(ASK server TO czasobsl,RStatObj) TO Maximum);

OUTPUT("minimalny czas obslugi : ",ASK GETMONITOR(ASK server TO czasobsl,RStatObj) TO Minimum);

tmp:=ReadKey();

END MODULE.



Wyszukiwarka