Mint már korábban szó volt róla, a szimuláció logikai modellezése első lépésben egy blokkdiagrammal történhet meg. A blokkdiagram egyes elemei jelzik a végrehajtandó tevékenységet. Ilyenfajta tevékenység ezerféle is akad, így - a számítógépesítéshez - szükség volt a tevékenységek standardizálására. Az, hogy mit, milyen szempontból, és hogyan standardizáltak, határozta meg a szimulációs nyelvek (GPSS, SIMULA, SIMSCRIPT, SIMPL, DYNAMO, CSL, SIMPAC, GASP, OPS-3, stb.) tulajdonságait és teljesítőképességét (analóg-digitális, determinisztikus-sztochasztikus, stb.). A GPSS ezek közül az általános célú, diszkrét idejű, digitális és sztochasztikus rendszereket választotta.
Így a GPSS-ben a szimulációs modell leírására 44 standardizált, jól körülhatárolt feladatokat ellátó blokk, és 53 segédfeladatokat ellátó utasítás szolgál. Ezek adják tulajdonképpen a modell struktúráját, a tranzakciók mozgásának körülményeit. A modell többi alkotóelemei (a kiszolgálóegységek, a raktárak, a sorbanállások, a felhasználói listák, stb.) ettől a struktúrától egy kissé különállóan léteznek, és közöttük és a tranzakciók között a kapcsolatot meghatározott blokkok hozzák létre. A GPSS-ben 12 különböző típusú alkotóelem létezik (a már tárgyalt tranzakciókon, és a blokkokon kívül).
A blokkok a modellben mindig aktív szerepet játszanak. A blokkok tevékenységét az indítja el, hogy az általános állapotrendezés beléptet egy tranzakciót a blokkba (kivétel: GENERATE blokk). Ennek hatására a blokk végrehajtja speciális feladatát: lefut egy sajátos, csak a blokkhoz tartozó alprogram. Eszerint tehát a blokk egy szubrutin, ami mögött mindig egy zárt gépi utasítássorozatot kell látnunk. Ez az alprogramtechnikai megoldás lehetővé teszi azt, hogy így bármely adott blokk (kivétel: GENERATE) a központi tárban ugyanannyi helyet foglal le (nevezetesen az alprogram felhívását), és csak a tárterület tartalma lesz különböző (az alprogram címe, az alprogram operandusai, stb. miatt). Ez a tárméretben mutatkozó azonosság teszi lehetővé a blokkok újradefiniálását.
A tranzakció a blokkba belépve, ott bizonyos ideig tartózkodik, majd távozik. Ezzel a blokk szabaddá válik újabb tranzakció fogadására. Vannak olyan blokkok, amelyek egyszerre több tranzakcióval is tudnak foglalkozni.
A blokkok feldolgozására mindig a feldolgozási fázisban kerül sor (kivétel a GENERATE blokk, amelyre már a beolvasási fázisban is sor kerül). A blokkok működésükbe a véletlen hatását is bevonhatják.
Minden blokknak van egy sajátos blokkdiagram jelölése, amelyet mindig a blokk szintaktikus alakjának bemutatása után közlünk. Ez használható fel, ill. használandó fel a GPSS-beli szimulációs modell folyamatábrájának elkészítésekor.
A GPSS a következő blokkokat ismeri:
GENERATE | a tranzakciók előállítása |
TERMINATE | a tranzakciók megsemmisítése |
ADVANCE | a tranzakciók futásának késleltetése |
SPLIT | sorozatok létrehozása |
ASSEMBLE GATHER |
sorozatok összegyűjtése |
MATCH | tranzakciók futásának szinkronizálása |
ASSIGN INDEX MARK COUNT SELECT |
a tranzakció-paraméterek értékének beállítása |
PRIORITY BUFFER |
a tranzakció prioritásának megváltoztatása |
TRANSFER TEST GATE LOOP |
a tranzakciók útvonalának módosítása |
QUEUE DEPART |
sorstatisztika gyűjtése |
SEIZE RELEASE PREEMPT RETURN |
kapcsolat a kiszolgálóegységekkel |
ENTER LEAVE |
kapcsolat raktárakkal |
LOGIC | kapcsolat a logikai kapcsolókkal |
JOIN REMOVE EXAMINE SCAN ALTER |
kapcsolat a csoportokkal |
LINK INLINK |
kapcsolat a felhasználói listákkal |
SAVEVALUE MSAVEVALUE |
kapcsolat az értékőrzőkkel |
TABULATE | kapcsolat a gyakoriság táblázatokkal |
CHANGE EXECUTE |
a blokkok megváltoztatása |
PRINT TRACE UNTRACE |
nyomkövetés |
WRITE HELP JOBTAPE |
a szimulációs modellen kívüli kapcsolat |
Az utasítások a modellben kisegítő szerepet játszanak, de tevékenységeik ugyancsak változatosak:
Az utasítások egy része a beolvasási fázisban kerül feldolgozásra (így be sem kerül a feldolgozási fázisba), más része bekerül ugyan a feldolgozási fázisba, de átalakítva (pl. TABLE), megint más részük aktívan részt vesz a futásban (pl. FUNCTION, VARIABLE).
STORAGE | Raktár méretének definiálása. |
INITIAL MATRIX |
Értékőrzők kezdeti értékének beállítása. |
VARIABLE FVARIABLE BVARIABLE |
Aritmetikai és logikai változók definiálása. |
FUNCTION | Függvény definiálása. |
TABLE QTABLE |
Gyakorisági táblázatok definiálása. |
RESET CLEAR |
A szimbólum futás eredményeinek törlése. |
EQU | Szimbólum-sorszám megfeleltetés. |
RMULT | Véletlenszám-generátor beállítása. |
ORG ICT SYN ABS ENDABS |
Sorszámozás vezérlése. |
REPORT TITLE INCLUDE FORMAT TEXT EJECT SPACE OUTPUT GRAPH ORIGIN X Z STATEMENT ENDGRAPH |
Kiíratás szerkesztése. |
STARTMACRO ENDMACRO MACRO |
Makrók írása és behívása. |
UPDATE CREATE DELETE ADD REPLACE ENDUPDATE |
Aktualizálás. |
START | A szimulációs futás elindítása. |
JOB | A program kezdete. |
END | A program vége. |
LIST UNLIST |
Kilistázás vezérlése. |
READ SAVE |
Kimentés vezérlése. |
SIMULATE | A szimuláció közlése. |
REALLOCATE LOAD |
Gazdálkodás a tárral. |
REWIND | Mágnesszalag pozícionálás. |
Bármely blokk- kivéve a GENERATE, ASSEMBLE, GATHER, és MATCH blokkokat - újradefiniálható a blokk újramegadásával (azonos sorszám, vagy szimbólum) vagy a CHANGE blokk segítségével, egy-egy kísérlet-futtatást megelőzően. A blokkok sorrendiségét a blokkok sorszáma, vagy szimbóluma (ha van) azonosítja. Az újradefiniálás előtti és utáni blokkok tetszőlegesek lehetnek, kikötés nincs rájuk nézve, csak az, hogy ezek GENERATE blokkok nem lehetnek. Ugyanígy újradefiniálhatók az ASSEMBLE, GATHER, és MATCH blokkok is, ha bennük nincs tranzakció, azaz ha a pillanatnyi blokkszámláló (Wj) értéke 0. Ellenkező esetben beolvasási hiba lép fel.
A GENERATE blokk egy másik GENERATE blokkal definiálható újra vagy a blokk újramegadásával (sorszám, szimbólum ugyanaz), vagy a CHANGE blokk segítségével. A még a GENERATE blokkban álló tranzakció megsemmisül, és a GPSS az új GENERATE blokkban már az új feltételeknek megfelelően állítja elő az új tranzakciót. A GENERATE blokk más blokkal való helyettesítése (vagy fordítva) beolvasási hiba fellépését eredményezi.
A GPSS szimulációs modellek alkotóelemei a következők:
Alapvető alkotóelemek
Berendezések
Statisztikai elemek
Listaelemek
Hivatkozási elemek
Számítási elemek
Tranzakciók
A tranzakciók a szimulációs modell valóságban is mozgó elemeit jelentik. A tranzakciók haladása, egyik blokkból a másikba lépése idézi elő a modell bármilyen értelmű változását.
Blokkok
A blokkok a szimulációs modellben többnyire azokat a pontokat jelentik, amelyek a valóságban bizonyos pillanatok alatt lezajló cselekményeknek felelnek meg (pl. egy kapcsolóelem lefoglalása vagy felszabadítása, egy kapcsoló átállítása, egy adat kigyűjtése egy statisztikába, stb.). A blokkok hozzák létre és határozzák meg a tranzakciók és a többi alkotóelem kapcsolatát, ill. a tranzakció tulajdonságait is.
Kiszolgálóegységek
A kiszolgálóegységek olyan berendezések szimulálására szolgálnak, amelyek kapacitása csak egy tranzakció. Ilyen lehet pl. a központi egység (ha nincs multiprogramozás), egy adatcsatorna, egy esztergapad, egy íróasztal, egy pénztár, egy telefonvonal, stb.
A kiszolgálóegységeket a SEIZE, RELEASE, PREEMPT, és RETURN blokkok tartják karban: foglalják le, szabadítják fel.
A kiszolgálóegységekhez négy standard numerikus attribútum, és négy standard logikai attribútum tartozik. Minden kiszolgálóegységről statisztika készül (pl. a kiszolgálóegység kihasználtsága, időbeli leterheltsége, az átlagos foglaltsági idő, stb.).
Raktárak
A raktárak olyan berendezések szimulálására szolgálnak, amelyek a valóságban többszörös kapacitással rendelkeznek, így több tranzakciót is képesek befogadni. Ilyen lehet pl. egy raktár, egy gépkocsiparkoló, egy kölcsönző, az üzenetek egy pufferje, stb.
A raktárakat az ENTER, LEAVE blokkok, és a STORAGE utasítás tartják karban: definiálják, töltik fel, vesznek ki onnan.
A raktárakhoz hét standard numerikus attribútum, és négy standard logikai attribútum tartozik. Minden raktárról statisztika készül (pl. átlagos tartalom, átlagos kihasználtság, átlagos tartózkodási idő, stb.).
Logikai kapcsolók
A logikai kapcsolók egyszerűbb fizikai, vagy logikai állapotokat szimulálnak. A logikai kapcsolóknak két állása lehet: S (Set: beállított, igaz, I) vagy R (Reset: törölt, hamis, 0).
A logikai kapcsolókat a LOGIC blokk állítja S vagy R helyzetbe.
A logikai kapcsolókhoz két standard logikai attribútum tartozik. A logikai kapcsolókról nem készül statisztika.
Sorstatisztikák
A sorstatisztikák statisztikák előállítására szolgálnak olyan helyeken, ahol késleltetési lista alakulhat ki. A késleltetési lista tranzakcióinak hatására elemek kerülnek a sorstatisztikába, ill. távoznak el onnan. A sorstatisztikák - mint nevük is mutatja - a kiszolgálóegységek, raktárak, TEST vagy GATE blokkok, stb. előtt kialakuló sorok vizsgálatára alkalmasak.
A sorstatisztikákat a QUEUE és DEPART blokkok tartják karban: elemeket vesznek fel ide, vagy távolítanak el innen.
A sorstatisztikákhoz hét standard numerikus attribútum tartozik. Minden sorstatisztika automatikusan adatokat gyűjt (pl. a sorstatisztika maximális és átlagos hossza, az átlagos várakozás idő a sorstatisztikában, stb.).
Gyakorisági táblázatok
A gyakorisági táblázatok a GPSS másik fő statisztikai alkotóelemei. Megadott osztályközökkel megadott számú osztályba gyűjtenek ki adatokat az összes lehetséges standard numerikus attribútummal kapcsolatban. A táblázatok az átlagérték és a szórás mellett az osztályok gyakoriságát, kumulált gyakoriságát, súlyozott gyakoriságát, stb. is megadják, sőt az eloszlást grafikusan is (hisztogram) ábrázolják.
A gyakorisági táblázatokat a TABULATE blokk, és a TABLE utasítás tartja karban. A gyakorisági táblázatokhoz három standard numerikus attribútum tartozik. A statisztika táblázatok az alkotóelemek kiíratásában az utolsó előtti helyen (az értékőrzők előtt) szerepelnek
Felhasználói listák
A felhasználói listák arra szolgálnak,
hogy a felhasználó ide tetszése szerint tranzakciókat
tegyen át jelenbeni eredmények listájáról,
vagy helyezze azokat vissza az esemény listára. A felhasználói
listák jelentése lehet a való életben pl. egy
sorbanállás, előjegyzés, speciális sorolás
(pl. az utolsónak érkezett legyen az első), stb. A felhasználói
listákat a LINK és UNLINK blokkok tartják karban:
a tranzakciót felveszik, vagy eltávolítják.
A felhasználói listákhoz öt standard numerikus
attribútum tartozik. Minden felhasználó listáról
statisztika készül (pl. a lista maximális vagy átlagos
hossza, átlagos várakozási idő a felhasználói
listában, stb.).
Csoportok
A csoportok a szimulációs modellben a való életnek
azt a jelenségét képviselik, hogy valamely tranzakciók
bizonyos szempontok szerint összetartoznak. A tranzakciókat
kategorizálni lehet súlyuk, színük, áraik,
gyártási idejük, készletezési idejük,
stb. szerint. Ezek a kategóriák a tranzakciók paramétereiben
vannak megadva. Egy-egy ilyen csoport bizonyos helyzetekben azonosan és
egyszerre kezelhető (pl. az azonos készletezési idejű
tranzakciók árának leszállítása).
A csoportokat a JOIN, REMOVE, EXAMINE, SCAN, és ALTER blokkok tartják
karban: a tranzakciókat felveszik, eltávolítják,
végigkeresik, és paramétereit megváltoztatják.
A csoportokhoz egy standard numerikus attribútum tartozik. Minden
csoportról statisztika készül (pl. a csoport típusa,
tagjai, stb.).
Értékőrzők és tömbösített értékőrzők
Az értékörzők 2 vagy 4 byte-os tárterületeket
jelentenek, ahol a későbbiek számára bármely
standard numerikus attribútum megőrizhető, ill. onnan
beolvasható. A megőrzendő értékek mátrix
alakban is elrendezhetők, ezek a tömbösített értékőrzők.
Az értékőrzőket a SAVEVALUE és MSAVEVALUE
blokkok, és a MATRIX és INITIAL utasítások tartják
karban: határozzák meg a tartalmukat, olvassák ki,
definiálják, és látják el kezdeti értékkel.
Az értékőrzőkkel négy standard numerikus
attribútum kapcsolatos. Minden őrzött érték,
amelynek tartalma nem 0 (a tömbösített értékőrzők
teljes egészében), a listázás végén
megjelenik.
Aritmetikai és logikai változók
Az aritmetikai és logikai változók a programozó
számára a standard numerikus attribútumok és
a standard logikai attribútumok aritmetikai, ill. logikai függvénykapcsolatának
analitikus definiálását, a velük való
műveleteket teszik lehetővé. A műveletek megközelítően
a FORTRAN szintaxis szerint alakíthatók ki.
Az aritmetikai és logikai változókat a VARIABLE, FVARIABLE,
és BVARIABLE blokkok határozzák meg.
Az aritmetikai és logikai változókkal három
standard numerikus attribútum kapcsolatos. A változókról
kiíratás nem készül.
Függvények
A függvények folytonos és diszkrét függvényszerű
kapcsolatok értéktáblázatos definiálását
teszik lehetővé egy független változó (ami
egy standard numerikus attribútum lehet) és a függvény
által meghatározott függő változó
között. Csak egyváltozós függvények
megengedettek.
A függvényeket a FUNCTION blokk definiálja.
A függvényekkel csak egy standard numerikus attribútum
kapcsolatos. A függvényekről kiíratás nem
készül.