Trailing-Edge
-
PDP-10 Archives
-
decuslib20-03
-
decus/20-0078/doc/gpsswe.man
There are no other files named gpsswe.man in the archive.
GGG PPPP SSS SSS SSS
G G P P S S S S S S
G P P S S S
G PPPP SSS SSS SSS
G GGG P S S S
G G P S S S S S S
GGGG P SSS SSS SSS
Inledning Page 2
1. Inledning
GPSSS {r en simulaklass f`r fl`den av objekt mellan k`er,
lager och behandlingsstationer. Klassen, som har prefixet
SIMULATION, ger SIMULA n}gra av de anv{ndbara procedurerna i
Gordons GPSS. Det inkluderar deklarationer av f`ljande
klasser :
1. TRANSACTION, som definierar objekten
2. FACILITY , - " - stationer
3. STORAGE , - " - lagerutrymmen
4. QUEUE , - " - k`er
Procedurerna m`jligg`r f`r objekten att g} in i och l{mna
resurserna. Statistik p} resurs-utnyttjandet samlas
automatiskt och skrivs ut i slutet av simuleringen
De avancerade satserna i GPSS har ersatts av de mer
flexibla SIMULA satserna som HOLD( - - ), ACTIVATE och
REACTIVATE. Men det finns en procedur WAIT_UNTIL som till}ter
villkorliga inplaneringar av h{ndelser f`r objekten. Objekten
kan tilldelas prioritet f`r att }stadkomma f`rst-in-f`rst-ut,
sist-in-f`rst-ut och andra ordningar.
Med andra procedurer kan man fr}ga efter det tillf{lliga
utnyttjandet av en resurs. Man kan ocks} fr}ga efter utskrift
av statistik under en simulering, och modellen kan }terst{llas
s} att en ny simulering med andra indata kan g`ras i samma
k`rning. #ven helt olika simulerings-modeller kan simuleras
under en k`rning.
Med GPSSS kan simuleringsprogram skrivas p} samma enkla
och korta s{tt som med GPSS. Anv{ndningen av SIMULA som
basspr}k bibeh}ller den h`ga standarden p} programstrukturen,
s}som blockstrukturen, procedurer, aritmetik, str{nghantering
och in och utmatning.
2. Resurserna
K`er
K`erna kan utnyttjas av objekten n{r som helst. Det
finns ingen begr{nsning p} storleken av dem. Statistiken
inneh}ller :
Resurserna Page 3
1. hur m}nga objekt som totalt befunnit sig i k`n
2. st`rsta antal objekt i k`n
3. aktuella inneh}llet i k`n
4. genomsnittliga inneh}llet i k`n
5. genomsnittliga tiden objekten befunnit sig i k`n.
Behandlingsstationer
Stationerna kan bara utnyttjas av ett objekt i taget. De
objekt som vill g} in i en upptagen behandlingsstation
placeras i en ink` knuten till stationen ifr}ga. D{rifr}n tas
sedan objekten i prioritetsordning in i stationen d} den {r
ledig. Den statistik som ges {r :
1. genomsnittliga utnyttjandet av stationen
2. antal objekt som anv{nt stationen
3. den genomsnittliga tid objekten till-
bringat i stationen.
4. aktuella inneh}llet i stationen
Lager
Ett lager kan ha ett visst maximalt utrymme
f`r-definierat. Det ges med satsen SET_STORAGE( N,
<max_utrymme>); Ett objekt, som inte f}r plats i ett lager,
placeras i v{ntan p} plats i en k`. Ordningen ut ur k`n d}
den inneh}ller flera objekt {r {ven h{r efter prioritet. Det
utrymme ett objekt tar anges som andra parameter i utrycket
enter_storage( N, <erfoderligt_utrymme>); Objektet kan d} den
l{mnar lagerutrymmet frig`ra utrymme som skiljer sig fr}n det
utrrymme som kr{vdes d} den kom dit. Det anges med :
leave_storage( N, <frigjort_utrymme>) Statistiken inneh}ller :
1. maximala lagerutrymmet
2. genomsnittliga inneh}llet
3. genomsnittliga utnyttjandet
4. totala antalet objekt i lagerutrymmet
5. tiden i lagerutrymmet per enhet som
utnyttjat lagerutrymmet
6. st`rsta antalet objekt i lagerutrymmet
7. aktuella antalet objekt i lagerutrymmet
Programstrukturen Page 4
3. Programstrukturen
GPSSS kan anv{ndas som prefix till ett block eller som
prefix till en klass. Den ska anv{ndas precis som standard
system klasserna SIMSET och SIMULATION.
Anv{ndarprogrammet kan ses som uppdelat i tv} delar.
1. definition av objektens attribut och aktiviteter.
2. huvudprogrammet som initierar och kontrollerar
simuleringen. Huvudprogrammet m}ste speciellt
skapa det f`rsta objektet.
F`ljande triviala exempel visar en modell d{r kunder
anl{nder slumpm{ssigt i tiden till ett system och l{mnar
densamma efter 10 minuter.
OPTIONS(/search "libsim[106,306])
BEGIN
EXTERNAL CLASS gpsss ;
gpsss(1,1,1) BEGIN
transaction CLASS kund ;
BEGIN
ACTIVATE NEW kund
DELAY Uniform(0,15,u);
hold( 10 ) ;
END ;
COMMENT * HUVUDPROGRAMMET * ;
ACTIVATE NEW kund DELAY 0 ;
hold( 100 ) ;
END GPSSS exempel ;
END program
Huvudprogrammet startar simuleringen med att aktivera den
f`rsta kunden och v{ntar sedan 100 tidsenheter, som {r tiden
f`r simuleringen.
Objekten i anv{ndarprogrammet {r definierade som klasser
med prefixet TRANSACTION. Klassen TRANSACTION definierad i
GPSSS har prefixet PROCESS s} h{ndelser f`r objekten
inplaneras med dom vanliga SIMULA satserna. I programmet
genererar varje kund sin efterf`ljare och l{mnar systemet
efter 10 minuter.
Programstrukturen Page 5
H{r f`ljer en lista av de procedurer som beh`vs f`r att
anv{nda resurserna tillsammans med n}gra andra procedurer :
A) Procedurer f`r objekten
-----------------------
- enter_station ( n )
- leave_station ( n )
- enter_storage ( n )
- leave_storage ( n )
- enter_queue ( n )
- leave_queue ( n )
B) Procedurer i huvudprogrammet
----------------------------
- set_storage ( n , max_contents )
- restart
C) Objektens attribut
------------------
- priority
- time_mark
- id
D) Anv{ndar-procedurer
-------------------
- gpsss_time
- wait_until ( Boolskt uttryck )
- standard_report
- contents_station ( n )
- contents_storage ( n )
- contents_queue ( n )
- waiting_station ( n )
- waiting_storage ( n )
- waiting_queue ( n )
E) Global variabel
---------------
- U
Programstrukturen Page 6
F) Procedurer i version GPSSST
---------------------------
- trace_objects
- station_name (n,new_name)
- storage_name (n,new_name)
- queue_name (n,new_name)
- trans_name ( new_name )
- hold_until_ready
- outtime ( time )
- begin_time ( time )
4. Transaktionerna
Varje objekt har tre attribut f`r-definierade :
integer ID ;
real TIME_MARK, PRIORITY ;
N{r ett objekt skapas s} s{tts PRIORITY till noll och
TIME_MARK till aktuella tiden. ID ges det v{rde som motsvarar
objektets ordning i simuleringen.
PRIORITY anv{nds av systemprocedurerna n{r ett objekt ska
placeras i en ink` eller n{r ett objekt g`r en WAIT_UNTIL.
Ink`erna {r de k`er objekten placeras i innan de ska anv{nda
en station eller ett lager. Objekt vars PRIORITY {r minst g}r
ur k`n f`rst. N{r PRIORITY {r lika f`r flera objekt {r
ordningen f`rst-in-f`rst-ut om PRIORITY {r st`rre eller lika
med noll och sist-in-f`rst-ut om PRIORITY {r mindre {n noll.
Anv{ndaren kan allts} definiera olika ordningar genom att
{ndra p} PRIORITY under simuleringen. Simulasatserna HOLD,
ACTIVATE och REACTIVATE anv{nder inte PRIORITY.
TIME_MARK anv{nds inte av GPSSS men anv{ndaren kan
utnyttja TIME_MARK f`r att f} ut tiden som ett objekt har
tillbringat i en resurs.
Procedurerna som definierar h{ndelser f`r objekten och
deras motsvarighet i GPSS visas nedan.
Transaktionerna Page 7
GPSSS GPSS
----- ----
ENTER_STATION (N) SEIZE N
LEAVE_STATION (N) RELEASE N
ENTER_STORAGE (N, SIZE) ENTER N, SIZE
LEAVE_STORAGE (N, SIZE) LEAVE N, SIZE
ENTER_QUEUE (N) QUEUE N
LEAVE_QUEUE (N) DEPART N
Parametern N {r ett heltal som identifierar en resurs.
Hur m}nga behandlingsstationer, lager och k`er anv{ndaren
t{nker utnyttja anges som parametrar till GPSSS, enligt
f`ljande :
GPSSS( max_queues, max_stations, max_storages)
[ k`er ] [ behandlings-] [ lager ]
[ stationer ]
Numreringen av resurserna beh`ver inte vara konsekutiv,
bara N h}ller sig fr}n 1 till max_queues, max_stations och
max_storages respektive.
5. Huvudprogrammet
Huvudprogrammet initierar simuleringen, anropar
proceduren STANDARD_REPORT om statistik ska skrivas ut och
avslutar simuleringen. Den kan dessutom anv{nda vissa
procedurer som beskrivs senare. H{r n{mns de tv} procedurer
som {r speciella f`r huvudprogrammet. De {r :
- RESTART och
- SET_STORAGE( N, <maximalt utrymme> )
RESTART "nollst{ller" GPSSS s} att en ny simulering kan
g`ras. Den nya simuleringen kan vara samma modell med andra
indata, eller en helt ny modell. Proceduren anropar
STANDARD_REPORT, tar bort alla objekt och resurser, s{tter
GPSSS_TIME till noll och den globala variabeln U f`r
slumpdragningar till 987654321.
SET_STORAGE skapar ett lager med dess maximala utrymme.
Om lager anv{nds innan de har skapats p} detta s{tt kommer
dess utrymme s{ttas till 1 000 000.
Globala procedurer Page 8
6. Globala procedurer
Anv{ndarprocedurerna, se sid. 5, ber`r simuleringstiden
och hur resurserna har utnyttjas.
REAL PROCEDURE GPSSS_TIME; <- - - -> ; ger tiden f`r
simuleringen sedan simuleringen startade eller sedan
proceduren RESTART anv{ndes sista g}ngen. Proceduren ers{tter
SIMULA proceduren TIME som inte ska utnyttjas.
De sex sista procedurerna, se anv{ndarprocedurer sid. 5
ger ett heltal som motsvarar :
antalet objekt som v{ntar p} att f} utnyttja en resurs (
WAITING_ ) eller
det aktuella inneh}llet i en resurs ( CONTENTS_ ).
STANDARD_REPORT skriver ut statistik p} utnyttjandet av
resurserna. Tidsintervallet f`r vilken statistiken g{ller, {r
tiden mellan tv} konsekutiva anrop av proceduren, eller d} den
anropas f`r f`rsta g}ngen tiden fram till dess. Som f`rebild
till utformningen av statistiken har dess motsvarighet i GPSS
anv{nts. Proceduren anropas automatiskt av GPSSS d} hela
simuleringen {r klar.
WAIT_UNTIL( <boolskt uttryck> ) {r en kraftfull procedur.
Den kan anv{ndas av ett objekt eller av huvudprogrammet. Den
passiverar f`rst, och aktiverar igen n{r uttrycket blivit
TRUE. Uttrycket testas efter varje h{ndelse i simuleringen.
Objekten passiverade av WAIT_UNTIL placeras i en v{ntk` i
prioritetsordning. Huvudprogrammet som inte har PRIORITY
attributet testas alltid sist av proceduren.
7. Version GPSSST
I version GPSSST har anv{ndaren m`jligheter att f}
utskrifter av varje objekts v{g genom systemet. #ven
tidpunkterna f`r h{ndelserna skrivs ut.
Det finns tv} typer av utskrifter. Den f`rsta ordnar
proceduren TRACE(n) och den andra TRACE_OBJECTS.
TRACE(n) ger utskrift efter hand ett objekt g}r in i
eller l{mnar en resurs. TRACE(n) anropas automatiskt i GPSSST
om TRACE_ON s{tts TRUE i b`rjan av anv{ndarprogrammet.
utskriftsexempel :
..
Version GPSSST Page 9
..
..
object 5 entering station 2 at time 12:03
object 4 leaving storage 1 at time 12:39
..
..
..
TRACE_OBJECTS kan anropas n{r en (del-) simulation {r
klar. F`rst skrivs de objekt som l{mnat simuleringen ut.
Sedan kommer de objekt som v{ntar p} plats i en
behandlingsstation, eller ett lagerutrymme, och sist de objekt
som fortfarande {r passiverade av WAIT_UNTIL. Objekten {r
ordnade efter deras attribut ID.
Varje objekt f`ljs av dess h{ndelser och sedan objektets
tid i respektive resurs. Om anv{ndaren endast `nskar utskrift
p} objektens tid i resurserna s{tts TIME_SPENT_ONLY := TRUE.
utskriftsexempel :
object 4
----------
Entered storage 1 at time 10:51
Entered queue 1 at time 10:51
Leaved queue 1 at time 11:41
Entered station 1 at time 11:41
Leaved station 1 at time 12:39
Entered queue 3 at time 12:39
Leaved queue 3 at time 12:54
Entered station 4 at time 12:54
Leaved station 4 at time 13:53
Leaved storage 1 at time 13:53
Time spent in storage 1 : 03:02
Time spent in queue 1 : 00:49
Time spent in station 1 : 00:58
Time spent in queue 3 : 00:16
Time spent in station 4 : 00:59
Statistik f`r proceduren TRACE_OBJECTS samlas endast om
OBJECT_TRACE_ON s{tts TRUE. Detta m}ste allts} g`ras innan
simuleringen s{tter ig}ng.
Version GPSSST Page 10
F`r att f} en mer l{ttl{st text i de utskrifter
trace-procedurerna ger kan man tilldela objekten och
resurserna andra namn med procedurerna :
TRANS_NAME ( <namn> ), QUEUE_NAME ( N, <namn>)
STATION_NAME( N, <namn>) och STORAGE_NAME( N, <namn>)
I denna version anges tidsenheten simuleringen ska
utnyttja med en fj{rde parameter till GPSSST. #ven antalet
decimaler p} sekunderna ska anges ( femte parametern ).
GPSSST( , , , <tidsenheten> , secdec) BEGIN/CLASS
De tidsenheter som kan anv{ndas {r :
's' f`r sekunder
'm' f`r minuter
'h' f`r timmar
och 'd' f`r dagar
Om anv{ndaren inte vill ha sekunder utmatade s{tts secdec
till -1.
8. Programexempel
Program-exempel 1, sid. 14, visar en simulering av en
dator. Job inkommer slumpm{ssigt i tiden och placeras i en
in-k`. N{r minnesutrymme {r tillg{ngligt h{mtas jobet, och
g}r alternerande mellan CPU-tid och I/O-tid. Efter 10 s}dana
looper l{mnar jobet systemet.
Storage 1 representerar minnet, station 1 CPU'n och queue
1 och 4 ger statistik p} tider genom systemet respektive
v{ntetider p} CPU'n.
Huvudprogrammet anv{nder RESTART f`r att simulera tv}
pass med olika minnesstorlekar.
Sid. 15 visar en l{karmottagning som ska simuleras. D{r
finns tv} provtagningsrum och tv} l{kare. Patienterna som
anl{nder slumpm{ssigt i tiden ska f`rst till ett
provtagningsrum och sedan till en l{kare. Fr}n v{ntrummen g}r
patienterna till det rum som f`rst blir ledigt.
Programexempel Page 11
V{ntrummen f}r representera k`er, QUEUE 1 och QUEUE 2,
och provtagningsrummen behandlingsstationer, STATION 1 och
STATION 2. L{karna f}r ocks} bli behandlingsstationer,
STATION 3 och STATION 4. F`r att f} statistik p} utnyttjandet
av hela l{karstationen f}r den representera ett lager, STORAGE
1, med ett maximal utrymme av exempelvis 25 patienter.
Page 12
GPSSS @VERSIKT
---------------
Simulation CLASS gpsss( max_queues,
max_stations, max_storages ) ;
BEGIN
CLASS queue; < - - - - - - - - >;
CLASS facility; < - - - - - - - - >;
CLASS storage; < - - - - - - - - >;
Process CLASS transaction ;
BEGIN
PROCEDURE enter_queue(n); < - - >;
PROCEDURE leave_queue(n); < - - >;
PROCEDURE enter_station(n); < - >;
PROCEDURE leave_station(n); < - >;
PROCEDURE enter_storage(n); < - >;
PROCEDURE leave_storage(n); < - >;
PROCEDURE priority_into(queue); <>;
< - - - - - - - - - - - - - - - - >;
END of class transaction ;
PROCEDURE wait_until ; < - - - - >;
PROCEDURE waiting- -queue ; < >;
contents- -station ; < >;
-storage ; < >;
PROCEDURE standard_report ; < - - >;
PROCEDURE restart ; < - - - - - - >;
< - - - - - - - - - - - - - - - - - >;
END
Page 13
KLASSEN TRANSACTION
--------------------
process CLASS transaction ;
BEGIN
REAL time_mark, priority;
INTEGER id ;
REF(head) occurrences;
PROCEDURE trace(n);
PROCEDURE enter_station (n);
PROCEDURE leave_station (n) ;
PROCEDURE enter_storage (n, units_required) ;
PROCEDURE leave_storage (n,units_released);
PROCEDURE enter_queue (n);
PROCEDURE leave_queue (n) ;
time_mark := gpsss_time ;
transid := transid + 1 ; id := transid ;
IF object_trace_on THEN occurrences:-NEW head;
INNER;
IF object_trace_on THEN
final_wait (finished_objects);
IF nextev==NONE THEN ACTIVATE Main DELAY 0;
END CLASS TRANSACTION ;
Page 14
PROGRAM-EXEMPEL 1
-----------------
OPTIONS(/search:"libsim[106,346]");
BEGIN EXTERNAL CLASS gpsss;
gpsss(4,1,1) BEGIN
transaction CLASS job;
BEGIN INTEGER i,size,u1;
ACTIVATE NEW job DELAY Negexp(1/20,u);
size := Randint(1,10,u);u1 := u;
enter_queue(1);enter_storage (1,size);
FOR i := 1 STEP 1 UNTIL 10 DO BEGIN
enter_queue (4);enter_station (1);
leave_queue(4);hold(Negexp(1,u1));
leave_station(1);hold(Uniform(0,5,u1));
END;
leave_storage(1,size);leave_queue(1);
END;
set_storage(1,10);
ACTIVATE NEW job;
hold(300); standard_report;
hold(300); restart;
set_storage(1,15);ACTIVATE NEW job;
hold(300);
END
END
Page 15
L#KARMOTTAGNINGEN
-----------------
L#KARHUSET
=============== IN ===============
! !
! !
! V#NTRUM till PROVTAGNINGAR !
! !
! !
!====== IN ============ IN =====
! ! !
! ! !
! PROVT RUM 1 ! PROVT RUM 2 !
! ! !
! ! !
!===== UT ============= UT =====
! !
! !
! V#NTRUM till L#KARNA !
! !
! !
!===== IN ============= IN =====
! ! !
! ! !
! L#KARE 1 ! L#KARE 2 !
! ! !
! ! !
====== UT ============= UT =====
Page 16
PROGRAM-EXEMPEL 2
-----------------
BEGIN COMMENT l{karmot. med provt.;
EXTERNAL CLASS gpssst,gpssso;
gpssso(3,4,1,'m',-1) BEGIN
transaction CLASS patient(t1,t2);
REAL t1,t2;
BEGIN PROCEDURE till_station(n);
INTEGER n;
BEGIN enter_queue(n);wait_until(
contents_station(n)=0 OR
contents_station(n+1)=0);
leave_queue(n);
IF contents_station(n)=0 THEN
enter_station(n) ELSE
enter_station(n+1);
hold(IF n=1 THEN t1 ELSE t2 );
IF station(n).occupier==THIS
transaction THEN leave_station(n)
ELSE leave_station(n+1);
END of till_station ;
IF id<10 THEN ACTIVATE NEW patient(
Normal(60,20,u1),Uniform(20,120,u2))
DELAY Negexp(2/60,u);
enter_storage(1,1);FOR i:=1,3 DO
till_station(i);leave_storage(1,1);
END patient ;
INTEGER i,u1,u2;u1:=123987;
u2:=789123; outfit;
ACTIVATE NEW patient(Normal(60,20,u1),
Uniform(20,120,u2)) ;
hold_until_ready;trace_objects;
END;
END
Page 17
DEFINITIONER
------------
OPTIONS(/e/search:"libsim[106,346]");
EXTERNAL CLASS gpssst ;
gpssst CLASS gpssso ;
BEGIN
PROCEDURE outfit ;
BEGIN
object_trace_on := TRUE ;
time_spent_only := TRUE ;
trans_name("Patient");
queue_name( 1,"provt. k`n" ) ;
queue_name( 3,"""l{kark`n""" ) ;
storage_name( 1 ,"L#KARHUSET" ) ;
station_name( 1 ,"provrum 1 " ) ;
station_name( 2 ,"provrum 2 " ) ;
station_name( 3,"""l{kare 1""") ;
station_name( 4,"""l{kare 2""") ;
begin_time(9.00);
END;
END OF GPSSSO
Page 18
*************************** -VERSION 4.1-
*** MONTREAL GPSSS ***
*** SIMULATION REPORT ***
***************************
PASSE = 1
START TIME= 09:00
END TIME= 17:14
* STATIONS *
************
AVERAGE AVERAGE
STATION UTILISATION ENTRIES TRANSIT TIME STATUS
1 0.73 6 01:00 FREE
2 0.57 4 01:11 FREE
3 0.68 5 01:07 FREE
4 0.49 5 00:48 FREE
* STORAGES *
************
AVG. AVG. THRU TIME CONTENTS
STORAGE CAPACITY CONTENTS UTIL. ENTRIES / UNIT MAX NOW
1 25 2.93 0.1170 10 02:25 6 0
* QUEUES *
**********
MAX. CURRENT AVG. AVG.
QUEUE ENTRIES CONTENTS CONTENTS CONTENTS TIME/TRANS
1 10 2 0 0.39 00:19
3 10 1 0 0.07 00:03