22
SYSTÉMOVÁ TŘÍDA SIMULATION Třída SIMULATION je třetí systémovou třídou, která obsahuje prostředky pro vytváření diskrétních simulačních modelů. Je podtřídou třídy SIMSET. Deklarace systémové třídy SIMULATION : Simset class Simulation; begin link class process; …; ref(process) procedure current; …; ref(head) SQS; link class EVENTNOTICE; …; ref(EVENTNOTICE) procedure FIRSTEV; …; real procedure time; …;

SYSTÉMOVÁ TŘÍDA SIMULATION

  • Upload
    zizi

  • View
    33

  • Download
    0

Embed Size (px)

DESCRIPTION

SYSTÉMOVÁ TŘÍDA SIMULATION. Třída SIMULATION je třetí systémovou třídou, která obsahuje prostředky pro vytváření diskrétních simulačních modelů. Je podtřídou třídy SIMSET. Deklarace systémové třídy SIMULATION : Simset class Simulation ; begin link class process ; …; - PowerPoint PPT Presentation

Citation preview

Page 1: SYSTÉMOVÁ TŘÍDA   SIMULATION

SYSTÉMOVÁ TŘÍDA SIMULATIONTřída SIMULATION je třetí systémovou třídou, která obsahuje prostředky pro vytváření diskrétních simulačních modelů. Je podtřídou třídy SIMSET.

Deklarace systémové třídy SIMULATION :

Simset class Simulation;

begin

link class process; …;

ref(process) procedure current; …;

ref(head) SQS;

link class EVENTNOTICE; …;

ref(EVENTNOTICE) procedure FIRSTEV; …;

real procedure time; …;

Page 2: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

procedure hold …;

procedure passivate; …;

procedure wait …;

procedure cancel …;

procedure ACTIVATE …;

procedure accum …;

process class MAINPROGRAM; …;

ref(MAINPROGRAM) main;

SQS :- new head;

main :- new MAINPROGRAM;

main.EVENT :- new EVENTNOTICE(0,main)

main.EVENT.into(SQS)

end Simulation

Page 3: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Operační část třídy SIMULATION

obsahuje akce, které je třeba provést před zahájením vlastního simulačního výpočtu. Musí se provést inicializace řídicí struktury kalendáře událostí.

• vytvoří se spojový seznam realizující kalendář událostí

• exemplář třídy MAINPROGRAM, zpřístupněn proměnnou main

Proces main je pak naplánován k provedení v čase nula. Kalendář událostí tak na začátku vždy obsahuje jediný plán – právě plán procesu main.

Simulační výpočet

V operační části podtřídy třídy SIMULATION nebo jejího prefixovaného bloku musíme nejprve vytvořit potřebný exemplář simulačních procesů a naplánovat je pomocí prostředků pro aktivaci procesů. Pro rozběh simulačního výpočtu je možné potlačit (pasivací nebo suspendováním) plán procesu main (tím přestane být aktivní koprogram hlavního prefixovaného bloku).

Simulační výpočet se odehrává na principu kvaziparalelního výpočtu, je ukončen v okamžiku, jestliže je ukončen dynamický blok exempláře třídy SIMULATION - tedy proces main.

Page 4: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Kalendář událostí

Posloupnost časových okamžiků, v nichž se diskrétně chápaný dynamický systém mění, a posloupnost jim odpovídajících událostí, není vždy dána na začátku výpočtu. Jednou z úloh modelujícího simulačního programu je tuto posloupnost během simulace vytvářet. V prostředcích sdružených v systémové třídě SIMULATION se používá metoda zvaná „ časové plánování událostí “.

V každém okamžiku výpočtu modelujícího programu existuje neprázdná množina tak zvaných plánů událostí – záznamů typu < u, t >,

kde u – programová událost (její algoritmus)

t – hodnota času

Aby bylo možné v simulačním programu provádět dynamické plánování událostí, musí simulační program obsahovat nějakou informační strukturu, která bude uchovávat plány jednotlivých událostí, bude je na základě požadavků měnit a bude v jednotlivých etapách výpočtu určovat událost s minimálním časem plánu. Takovou řídicí informační strukturu nazýváme simulační kalendář nebo kalendář událostí.

Page 5: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Sdružování událostí do procesu

Při přípravě simulačního programu nejprve provedeme dekompozici dějů v modelovaném systému na jednotlivé události. Mnohé události jsou takového charakteru, že je lze logicky mezi sebou vázat. Tímto pak můžeme zjednodušit zápis simulačního programu tím, že budeme popisovat samostatnými syntaktickými konstrukcemi celé skupiny událostí (nikoli jednotlivé typy událostí), které jsou mezi sebou logicky vázány. Takovou skupinu budeme nazývat simulační proces.

Proces se pak od události liší tím, že není celý prováděn v jednom okamžiku simulačního času. Akce procesu sestávají ze skupin akcí, které jsou odděleny tzv. příkazy potlačení procesu.

Procesy jsou plánovány kalendářem událostí.

Plány simulačního kalendáře se odvolávají na jednotlivé exempláře procesů. Podle vztahu k simulačnímu kalendáři se každý exemplář procesu (momentálně existuje v programu) nachází v jednom z následujících stavů

aktivní stav ukončený stav

suspendovaný stav pasivní stav

Page 6: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Ke konstrukci kalendáře událostí jsou použity prostředky ke konstrukci spojových seznamů (třída SIMSET). Na blokové úrovni operační části třídy SIMULATION je deklarována hlava spojového seznamu

ref (head) SQS;

(SeQuencing Set), který je v operační části třídy SIMULATION inicializován a obsahuje položky zaznamenávající čas plánu a identifikující plánovaný proces.

čas časčas

SQS

odkaz na exemplář procesu

Page 7: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Třída EVENTNOTICE

Je uživateli nepřístupná. Je prototypem exemplářů, které jsou zařazeny ve spojovém seznamu SQS a které tvoří položky simulačního kalendáře.

Deklarace lokální třídy EVENTNOTICE :

link class EVENTNOTICE(EVTIME, PROC); real EVTIME;ref(process)PROC;

begin

ref(EVENTNOTICE) procedure suc;

suc :- if SUC in EVENTNOTICE then SUC else none;

ref(EVENTNOTICE) procedure pred;

pred :- PRED;

procedure RANK(BEFORE); Boolean BEFORE;

begin

ref(EVENTNOTICE) P;

P :- SQS.last;

Page 8: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

for P :- P while P.EVTIME gt EVTIME do

P :- P.pred;

if BEFORE then

begin

for P :- P while P.EVTIME eq EVTIME do

P :- P.pred;

end;

follow(P)

end;

end;

Parametr PROC exempláře třídy EVENTNOTICE odkazuje na exemplář třídy process, kterého se daná položka kalendáře událostí týká. Parametr EVTIME obsahuje hodnotu časového plánu. Exempláře třídy EVENTNOTICE jsou zařazeny v seznamu SQS vzestupně uspořádány podle hodnot atributů EVTIME. Procedura RANK slouží k tomuto uspořádání.

Page 9: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Deklarace procedury FIRSTEV

ref(EVENTNOTICE) procedure FIRSTEV;

FIRSTEV :- SQS.first;

Procedura FIRSTEV vydává první plán v kalendáři, tj.plán procesu, který je právě v aktivním stavu

Deklarace procedury current

ref(process) procedure current ;

current :- FIRSTEV.PROC;

Procedura current vydává odkaz na právě aktivní exemplář simulačního procesu.

Deklarace procedury time

real procedure time;

time :- FIRSTEV.EVTIME;

Simulární čas není ve třídě SIMULATION realizována samostatnou reálnou proměnnou. Za hodnotu sim.času se považuje hodnota parametru EVTIME prvého plánu v sim. kalendáři SQS.

Page 10: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Třída process

Třída process, která definuje vlastnosti a slouží k realizaci simulačních procesů. Exempláře třídy process představují exempláře simulačních procesů.

V prototypu třídy process jsou shrnuty pouze základní vlastnosti simulačních procesů. Specifické vlastnosti konkrétních simulačních procesů definuje uživatel v deklaraci specifické podtřídy třídy process.

Pomocí exemplářů třídy process jsou modelovány různé požadavky řazené v simulovaných systémech do front a zásobníků. Třída process je prefixována třídou link, tak je toto možné realizovat.

Page 11: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Deklarace třídy process:

link class process;

begin

ref(EVENTNOTICE) EVENT;

Boolean TERMINATED;

Boolean procedure idle;

idle := EVENT == none;

Boolean procedure terminated;

terminated := TERMINATED;

real procedure evtime;

if idle then ERROR

else

evtime := EVENT.EVTIME;

ref(process) procedure nextev;

Page 12: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

nextev :-

if idle then none

else

if EVENT.suc == none then none

else EVENT.suc.PROC;

datach;

inner;

TERMINATED := true;

passivate;

ERROR

end;

Atribut EVENT odkazuje na exemplář třídy EVENTNOTICE, kterým je daný exemplář třídy process plánován v simulačním kalendáři.

Page 13: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Atribut TERMINATED, nabývá hodnoty true, když je ukončena uživatelská operační část daného exempláře třídy process.

Procedura evtime vydá hodnotu času plánu jeho aktivace, v případě, že exemplář třídy process je ve stavu aktivním nebo suspendovaném. V případě , když je exemplář třídy process ve stavu pasivním nebo ukončeném, vede volání jeho procedury evtime k chybě při výpočtu.

Procedura nextev vydá odkaz na exemplář třídy process, jehož provedení je naplánováno právě pro provedení daného exempláře, pro exemplář třídy ve stavu aktivním nebo suspendovaném. Je-li ve stavu pasivním nebo ukončeném nebo je-li plán jeho provedení poslední položkou kalendáře událostí, vydá jeho procedura nextev referenční konstantu none.

Page 14: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Prostředky pro potlačení procesu

Standartní prostředky jsou následující čtyři procedury:

Procedure hold – je-li procedura volána s kladným parametrem, způsobí provedení posunu (přeplánování) právě aktivního procesu v kalendáři událostí o hodnotu parametru. Je-li volaná s nekladným parametrem, způsobí takové volání přesun plánu provedení dosud aktivního procesu za všechny plány zařazené v kalendáři událostí se stejným časem.

plán dosud aktivního procesu

akce hold(t)

time time+t

plán nově aktivního procesu

časová osa

Page 15: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Procedura passivate – změní stav dosud aktivního exempláře třídy process na pasivní tj. vyřadí z kanceláře událostí jeho plán aktivace, který byl dosud na prvním místě seznamu SQS.

time plán nově aktivního procesu

plán dosud aktivního procesu

akce passivate

časová osa

Page 16: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Procedura wait – rozšiřuje činnost procedury passivate. Před vlastním provedením procedury passivate se dosud aktivní exemplář třídy process zařadí na konec cyklického spojového seznamu, jehož identifikace je dána skutečným parametrem procedury wait.

Procedura cancel – ruší plán libovolného procesu. Je-li procedura cancel použita se skutečným parametrem, který odkazuje na právě aktivní exemplář třídy process, je její volání totožné s voláním procedury passivate. Jinak odstraní volání procedury cancel z kalendáře plán aktivace exempláře třídy process, který je dán jejím skutečným parametrem.

Page 17: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Prostředky pro aktivaci procesu

Procedura ACTIVATE – provádí vlastní tvorbu exemplářů třídy EVENNOTICE a jejich zařazování do kalendáře událostí SQS. K jejímu volání slouží několik speciálních příkazů.

Obecný syntaktický tvar těchto příkazů:

AP nebo APD

kde A – aktivátor, P – je jednoduchý referenční výraz označující exemplář třídy process, kterého se aktivace týká a D – je určení doby aktivace, které může chybět

Aktivátory: activate x reaktivate

Časové určení doby aktivace:

at T delay T

at T prior delay T prior

Událostní určení doby:

after F before F

T – jednoduchý aritmetický výraz, F – jednoduchý referenční výraz

Page 18: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Schematická činnost aktivačních příkazů

time time+ba R

P

1 2 3 4 5 6 7

1 – activate P 5 – activate P dealy b

2 – activate P at a prior 6 – activate P before R

3 – activate P at a 7 – activate P after R

4 – activate P delay b prior

dosud pasivní proces P

suspendovaný proces R

časová osa

Page 19: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Schematická činnost reaktivačních příkazů

1 – reactivate P 5 – reactivate P dealy b

2 – reactivate P at a prior 6 – reactivate P before R

3 – reactivate P at a 7 – reactivate P after R

4 – reactivate P delay b prior

suspendovaný proces R

časová osa

time time+ba RP

321 4 5 76

suspendovaný proces P

Page 20: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Třída MAINPROGRAM

Pro účely plánování v kalendáři událostí je ve třídě SIMULATION reprezentován hlavní prefixovaný blok pomocí exempláře speciální podtřídy třídy process, jehož operační část probíhá v nekonečném cyklu, ve kterém je iterován jediný příkaz - volání procedury detach předávající řízení hlavnímu prefixovanému bloku.

Deklarace třídy MAINPROGRAM

process class MAINPROGRAM;

begin

m : detach;

go to m

end;

Před vlastním zahájením uživatelského simulačního výpočtu je vytvořen jeden exemplář třídy MAINPROGRAM, který je dostupný pomocí referenční proměnné main.

Page 21: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

detach

activate main

koprogram hlavního prefixovaného bloku

reaktivační bod

koprogram procesu main

předávání řízení výpočtu

předávání řízení výpočtu

koprogram samotného procesu

Page 22: SYSTÉMOVÁ TŘÍDA   SIMULATION

SIMULACE DISKRÉTNÍCH SYSTÉMŮ

Tento exemplář může být běžně plánován pomocí prostředků pro aktivaci a potlačení procesu a vždy, když je mu řídicí strukturou simulačního kalendáře předáno řízení, provede akci procedury detach – tedy předá řízení výpočtu hlavnímu prefixovanému bloku. Koprogram hlavního bloku bude aktivní právě tehdy, když plán provádění exempláře main bude první na časové ose simulačního kalendáře.

Procedura accum

provede výpočet integrálu podle času.