A GPSS programozási nyelv

Blokkok, alkotóelemek

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

Blokkok és utasítások

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 modell alkotóelemei

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.