SIMULATION je základní systémová třída jazyka Simula a má následující tři základní vlastnosti: - SIMULATION je podtřídou třídy SIMSET, takže automaticky nabízí všechny její možnosti pro práci se seznamy.
- Za druhé, když výpočet vstoupí do bloku prefixovaného B touto třídou nebo její podtřídou, vznikne simulovaná časová osa, tedy jakýsi modelovaný tok času, jehož okamžité hodnoty lze získat jako výsledky funkce time (angl. čas). Při vstupu do B dává time hodnotu nulovou a ta se postupně může zvětšovat, ale nemůže se zmenšovat. Když výpočet opustí B, funkce time přestane mít smysl.
- A za třetí, v bloku je k dispozici třída nazvaná process, která reprezentuje prvky, jejichž životní pravidla se mohou přerušovat a později navazovat, obecně v závislosti právě na stavu té simulované časové osy. Přerušení provádějí zejména dvě následující procedury:
hold(a) , kde a je aritmetický výraz. Nechť jeho hodnota je v. Pak takový příkaz znamená, že jestliže životní pravidla začala provádět tento příkaz, když time dalo hodnotu t, přeruší se provádění této procedury (a tedy i životních pravidel) až do okamžiku, když dá time hodnotu t+v. Řečeno populárně, provádění životních pravidel se přeruší, dokud simulovaná časová osa nedosáhne hodnoty t+v, a jestě populárněji řečeno, životní pravidla se přeruší na dobu v měřenou ne v reálnem ale v „simulovaném čase“ – to přesně odpovída anglické interpretaci tohoto příkazu procedury – „hold d“ lze přeložit jako „zadrž na dobu d“.
passivate, což značí přerušení provádění životních pravidel na neurčitou dobu: když daná instance třídy process začne provádět tuto proceduru, přeruší ji (a tedy i svá životní pravidla), dokud nedostane pokyn od jiného prvku. Tento pokyn má obvykle tvar activate R, kde R je referenční výraz, jehož hodnota je nějaká instance P třídy process, totiž ta, která má být „probuzena“ z čekání v proceduře passivate.
Třída process je podtřídou třídy link, takže procesy, jak bývaji běžně nazývány její instance, mohou vstupovat do seznamů.
Při diskrétní simulaci existuje na spojité časové ose jen konečný počet okamžiků, v nichž nastávají změny stavových veličin (události), které chápeme jako elementární a okamžité. Nositeli udalostí jsou přirozeně objekty, přitom každá konkrétní posloupnost událostí je výsledkem složité interakce objektů. Většina událostí je takové povahy, že je lze zcela přirozeně vázat do složitějších celků, tzv. procesů (simulačních procesů). Proces (process) je tedy posloupnost logicky na sebe navazujících událostí. Strukturu procesů můžeme obecně popsat schématem uvedeným na obrázku:
Proces se tedy neprovádí celý najednou (v jediném časovém okamžiku). V jednom určitém časovém okamžiku se tedy realizuje pouze část procesu odpovídající právě jediné události. Jednotlivé části procesu (události) Ui jsou od sebe odděleny tzv. plánovacími příkazy (příkazy potlačení procesu) Pi, jež způsobí, že se daný proces přestane provádět a začne se realizovat proces jiný. Při dalším vyvolání (aktivaci) se uvažovaný proces nezačíná provádět od začátku, ale od místa, kde byl naposledy přerušen.
Kalendář událostí
nebo také simulační kalendář (SQS) (podtřída třídy head) je řídící struktura simulačního programu, která zahrnuje především programové prostředky pro plánování událostí. Základním úkolem simulačního programu je vytvářet a průběžně aktualizovat posloupnost událostí. V podstatě je to uspořádaný spojový seznam, který není přístupný uživateli. Je to nástroj, který podporuje práci s časem a vzájemnou synchronizaci procesů.Standardní třída SIMULATION je definována tak, že každý proces je po svem vytvoření ve stejném stavu, jako když vstoupí do procedury passivate. Tento stav se nazýva pasivní. V něm je tedy proces, který „neví, kdy bude probuzen, ale ví, že probuzen být může“. Proces, který došel až na konec svých životních pravidel, je v podobném stavu, ale nemůže už nic dělat, když „je probuzen“ – takový stav se nazyvá ukončený. Proces, který provádí proceduru hold, „ví, kdy se probudí“, a říkáme, že je ve stavu odpojeném. O procesu, jehož životní pravidla právě fungují ve výpočtu, říkáme, že je ve stavu aktivním.
To, zda je proces ve stavu pasivním nebo ukončeném, tj. zda „neví, kdy se probudí“, sdělí booleovská funkce idle. Na proces, který je v aktivním stavu, ukazuje referenční funkce current (anglicky „běžící“). To, zda je proces ve stavu ukončeném, sdělí booleovska funkce terminated. Když nevíme, kdy se proces P v odpojeném stavu „hodlá probudit“ můžeme to zjistit pomocí funkce P.evtime. A pro zjistění, který proces by se měl uplatnit, až přestane být aktivní proces P, lze použít referenční funkci P.nextev.
Rozeznávají se dva hlavní druhy plánovacích příkazů: imperativní čili rozkazovací příkaz (angl. imperative statement), který bychom mohli vyjádřit slovy „čekej po dobu tak a tak dlouhou“, a interrogativní čili tázací příkaz (angl. interrogative statement), který lze přiblížit slovy „čekej, až bude splněna daná podmínka“. Trvání přesunu vlaku mezi dvěma místy se evidentně vyjádří imperativním příkazem (.čekej po dobu nutnou k přesunu.), kdežto čekání na uvolnění dráhy změnou signálu vysílaného semaforem vyjádříme interrogativním příkazem (.čekej, až se změní barva na semaforu.).
Plánovací příkazy
slouží k řízení provádění jednotlivých procesů.Plánovací příkazy pro časování, řazení a synchronizaci:
- Activate X – aktivuje pasivní proces X
- Reactivate X – buď aktivuje pasivní proces nebo mění příští aktivační čas, jestliže je proces pozastaven nebo aktivní
- Hold(T) – generuje zpoždění T v životě procesu
- Passsivate – pasivuje právě aktivní proces
- Cancel(X) – zruší příští aktivaci X
- Wait(Q) – pasivuje proces a vloží jej na konec fronty Q
Hlavní program je na svém počátku v aktivním stavu, pak ale může procházet různými stavy, podle toho, jak „potkává“ při provádění svých životních pravidel procedury hold a passivate. Jakmile se dostane do ukončeného stavu, je ukončena i práce simulačního modelu a ten je i se všemi procesy (ať jsou v jakémkoliv stavu) zlikvidován.
idle, terminated, evtime a nextev jsou procedury třídy process a lze je tedy aplikovat na procesy např. pomocí tečkové notace. Naproti tomu hold a passivate (a ovsem i time a current) jsou procedury třídy SIMULATION a jsou aplikovány vždy na current, takže jejich provedení nelze vnucovat libovolnému procesu např. tečkovou notací tvaru P.hold(20).
Shrnutí
Pro účely konstrukce simulačních modelů nabízí jazyk Simula hlavní třídu SIMULATION. Je to podtřída třídy SIMSET a chová se, jako by obsahovala mimo jiné tyto deklarace:- vnořené třídy process, jež je podtřídou třídy link, „zděděné“ od třídy SIMSET,
- procedur hold a passivate, jež se vždy aplikují na proces, který je v aktivním stavu,
- funkce current, ukazující na proces, který je v aktivním stavu, a
- funkce time, která dává hodnotu simulovaného času.
hold má jeden numerický parametr, určující délku přerušení provádění životních pravidel aktivního procesu, ostatní procedury parametry nemají. Třída process dává k dispozici funkce evtime, idle, nextev, a terminated. Proces může být v jednom ze čtyř následujících stavů: aktivním, odpojeném, pasivním a ukončeném.

2012 ©