1 / 22

SYSTÉMOVÁ TŘÍDA SIMULATION

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

zizi
Download Presentation

SYSTÉMOVÁ TŘÍDA SIMULATION

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 : SimsetclassSimulation; begin linkclassprocess; …; ref(process)procedurecurrent; …; ref(head) SQS; link class EVENTNOTICE; …; ref(EVENTNOTICE) procedureFIRSTEV; …; realproceduretime; …;

  2. SIMULACE DISKRÉTNÍCH SYSTÉMŮ procedurehold …; procedurepassivate; …; procedurewait …; procedurecancel …; procedure ACTIVATE …; procedureaccum …; process class MAINPROGRAM; …; ref(MAINPROGRAM) main; SQS :- new head; main :-newMAINPROGRAM; main.EVENT :- new EVENTNOTICE(0,main) main.EVENT.into(SQS) end Simulation

  3. SIMULACE DISKRÉTNÍCH SYSTÉMŮ • Operační část třídySIMULATION • 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ěnnoumain • 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 nebojejí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.

  4. 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í.

  5. 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í stavukončený stav suspendovaný stavpasivní stav

  6. 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. odkaz na exemplář procesu

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

  8. 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í.

  9. 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.

  10. 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.

  11. SIMULACE DISKRÉTNÍCH SYSTÉMŮ Deklarace třídy process: link class process; begin ref(EVENTNOTICE)EVENT; Boolean TERMINATED; Booleanprocedureidle; idle := EVENT == none; Booleanprocedure terminated; terminated := TERMINATED; real procedure evtime; ifidlethen ERROR else evtime := EVENT.EVTIME; ref(process) procedurenextev;

  12. SIMULACE DISKRÉTNÍCH SYSTÉMŮ nextev :- ifidlethennone 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.

  13. 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 evtimevydá 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 nextevvydá 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.

  14. 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. akce hold(t) plán dosud aktivního procesu časová osa plán nově aktivního procesu

  15. 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. plán dosud aktivního procesu akce passivate časová osa plán nově aktivního procesu

  16. 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.

  17. 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: atT delayT 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

  18. SIMULACE DISKRÉTNÍCH SYSTÉMŮ Schematická činnost aktivačních příkazů dosud pasivní proces P časová osa suspendovaný proces R 1 – activateP 5 – activatePdealy b 2 – activatePat a prior 6 – activate P before R 3 – activatePat a 7 – activatePafter R 4 – activatePdelay b prior

  19. SIMULACE DISKRÉTNÍCH SYSTÉMŮ Schematická činnost reaktivačních příkazů časová osa suspendovaný proces P suspendovaný proces R 1 – reactivateP 5 – reactivatePdealy b 2 – reactivatePat a prior 6 – reactivate P before R 3 – reactivatePat a 7 – reactivatePafter R 4 – reactivatePdelay b prior

  20. 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.

  21. SIMULACE DISKRÉTNÍCH SYSTÉMŮ koprogram procesu main koprogram hlavního prefixovaného bloku reaktivační bod předávání řízení výpočtu předávání řízení výpočtu koprogram samotného procesu

  22. 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.

More Related