Trailing-Edge
-
PDP-10 Archives
-
decuslib20-03
-
decus/20-0078/doc/gpsswe.rnm
There is 1 other file named gpsswe.rnm in the archive. Click here to see a list.
00100 .paper size 55,67
00200 .nofill
00300
00400 .b 20
00500 .lm 5
00600 GGG PPPP SSS SSS SSS
00700 G G P P S S S S S S
00800 G P P S S S
00900 G PPPP SSS SSS SSS
01000 G GGG P S S S
01100 G G P S S S S S S
01200 GGGG P SSS SSS SSS
01300 .page
01400 .title Inledning
01500 .lm 0
01600
01700 .test page 10
01800 1_. Inledning
01900 .b 1
02000 .lm 5
02100 .fill
02200 .p 5,1,6
02300 GPSSS {r en simulaklass f`r fl`den av objekt
02400 mellan k`er, lager och behandlingsstationer. Klassen,
02500 som har prefixet SIMULATION,
02600 ger SIMULA n}gra av de anv{ndbara procedurerna i
02700 Gordons GPSS.
02800 Det inkluderar deklarationer av f`ljande klasser :
02900 .b 1
03000 .nofill
03100 .lm 6
03200 1_. TRANSACTION, som definierar objekten
03300 2_. FACILITY , - " - stationer
03400 3_. STORAGE , - " - lagerutrymmen
03500 4_. QUEUE , - " - k`er
03600 .b 1
03700 .lm 5
03800 .fill
03900 .p 5,1,4
04000 Procedurerna m`jligg`r f`r objekten att g} in i och
04100 l{mna resurserna.
04200 Statistik p} resurs-utnyttjandet samlas automatiskt och
04300 skrivs ut i slutet av simuleringen
04400 .p 5,1,5
04500 De avancerade satserna i GPSS har ersatts av de mer
04600 flexibla SIMULA satserna som HOLD( - - ), ACTIVATE och
04700 REACTIVATE. Men det finns en procedur WAIT__UNTIL som
04800 till}ter villkorliga inplaneringar av h{ndelser f`r objekten.
04900 Objekten kan tilldelas prioritet f`r att
05000 }stadkomma f`rst-in-f`rst-ut, sist-in-f`rst-ut och andra
05100 ordningar.
05200
05300 .p 5,1,6
05400 Med andra procedurer kan man fr}ga efter det tillf{lliga
05500 utnyttjandet av en resurs. Man kan ocks} fr}ga efter
05600 utskrift av statistik under en simulering, och modellen kan }terst{llas
05700 s} att en ny simulering med andra indata kan g`ras i samma k`rning.
05800 _#ven helt olika simulerings-modeller kan simuleras under en k`rning.
05900 .p 5,1,5
06000 Med GPSSS kan simuleringsprogram skrivas
06100 p} samma enkla och korta s{tt som med GPSS.
06200 Anv{ndningen av SIMULA som basspr}k bibeh}ller den
06300 h`ga standarden p} programstrukturen, s}som blockstrukturen,
06400 procedurer, aritmetik, str{nghantering och in och utmatning.
06500
06600 .b 2
06700 .title Resurserna
06800 .lm 0
06900 .test page 10
07000 2_. Resurserna
07100 .lm 5
07200 .p -5,1,6
07300 K`er
07400 .b 1
07500 .i 5
07600 K`erna kan utnyttjas av objekten n{r som helst.
07700 Det finns ingen begr{nsning p} storleken av dem.
07800 Statistiken inneh}ller :
07900 .b 1
08000 .lm 8
08100 .test page 6
08200 .nofill
08300 1_. hur m}nga objekt som totalt befunnit sig i k`n
08400 2_. st`rsta antal objekt i k`n
08500 3_. aktuella inneh}llet i k`n
08600 4_. genomsnittliga inneh}llet i k`n
08700 5_. genomsnittliga tiden objekten befunnit sig i k`n.
08800 .b 1
08900 .lm 0
09000 .test page 8
09100 Behandlingsstationer
09200 .lm 5
09300 .fill
09400 .p 5,1,6
09500 Stationerna kan bara utnyttjas av ett objekt i taget.
09600 De objekt som vill g} in i en upptagen behandlingsstation
09700 placeras i en ink` knuten till stationen ifr}ga.
09800 D{rifr}n tas sedan objekten i prioritetsordning
09900 in i stationen d} den {r ledig.
10000 Den statistik som ges {r :
10100 .b 1
10200 .lm 10
10300 .nofill
10400 .test page 6
10500 1_. genomsnittliga utnyttjandet av stationen
10600 2_. antal objekt som anv{nt stationen
10700 3_. den genomsnittliga tid objekten till-
10800
10900 bringat i stationen.
11000 .lm 10
11100 4_. aktuella inneh}llet i stationen
11200 .b 1
11300 .lm 0
11400 .fill
11500 Lager
11600 .b 1
11700 .lm 5
11800 .p 5,1,11
11900 Ett lager kan ha ett visst maximalt utrymme f`r-definierat.
12000 Det ges med satsen SET__STORAGE( N, <max__utrymme>);
12100 Ett objekt, som inte f}r plats i ett lager, placeras i
12200 v{ntan p} plats i en k`.
12300 Ordningen ut ur k`n d} den inneh}ller flera objekt
12400 {r {ven h{r efter prioritet.
12500 Det utrymme ett objekt tar
12600 anges som andra parameter i utrycket enter__storage( N,
12700 <erfoderligt__utrymme>);
12800 Objektet kan d} den l{mnar lagerutrymmet frig`ra utrymme
12900 som skiljer sig fr}n det utrrymme som kr{vdes d} den
13000 kom dit. Det anges med : leave__storage( N, <frigjort__utrymme>)
13100 Statistiken inneh}ller :
13200 .b 1
13300 .lm 10
13400 .test page 6
13500 .nofill
13600 1_. maximala lagerutrymmet
13700 2_. genomsnittliga inneh}llet
13800 3_. genomsnittliga utnyttjandet
13900 4_. totala antalet objekt i lagerutrymmet
14000 5_. tiden i lagerutrymmet per enhet som
14100 utnyttjat lagerutrymmet
14200 6_. st`rsta antalet objekt i lagerutrymmet
14300 7_. aktuella antalet objekt i lagerutrymmet
14400 .fill
14500
14600 .b 2
14700 .title Programstrukturen
14800 .lm 0
14900 .test page 10
15000 3_. Programstrukturen
15100 .lm 5
15200 .p 5,1,4
15300 GPSSS kan anv{ndas som prefix till ett block eller
15400 som prefix till en klass. Den ska anv{ndas precis som
15500 standard system klasserna SIMSET och SIMULATION.
15600 .test page 8
15700 Anv{ndarprogrammet kan ses som uppdelat i tv} delar.
15800
15900 .nofill
16000 .b 1
16100 1. definition av objektens attribut och aktiviteter.
16200
16300 .b 1
16400 2. huvudprogrammet som initierar och kontrollerar
16500 simuleringen. Huvudprogrammet m}ste speciellt
16600 skapa det f`rsta objektet.
16700
16800 .b 1
16900 .fill
17000 .p 5,1,4
17100 F`ljande triviala exempel visar
17200 en modell d{r kunder anl{nder slumpm{ssigt i tiden till
17300 ett system och l{mnar densamma efter 10 minuter.
17400
17500 .nofill
17600 .lm 10
17700 .p 0,1,21
17800 OPTIONS(/search "libsim[106,306])
17900 BEGIN
18000 .b 1
18100 EXTERNAL CLASS gpsss ;
18200 gpsss(1,1,1) BEGIN
18300 .b 1
18400 transaction CLASS kund ;
18500 BEGIN
18600 ACTIVATE NEW kund
18700 DELAY Uniform(0,15,u);
18800 hold( 10 ) ;
18900 END ;
19000 .b 1
19100 COMMENT * HUVUDPROGRAMMET * ;
19200 ACTIVATE NEW kund DELAY 0 ;
19300 hold( 100 ) ;
19400 .b 1
19500 END GPSSS exempel ;
19600 .b 1
19700 END program
19800 .fill
19900 .lm 5
20000 .p 5,1,4
20100 Huvudprogrammet startar simuleringen med att
20200 aktivera den f`rsta kunden och v{ntar sedan 100
20300 tidsenheter, som {r tiden f`r simuleringen.
20400
20500 .p 5,1,8
20600 Objekten i anv{ndarprogrammet {r
20700 definierade som klasser med
20800 prefixet TRANSACTION. Klassen TRANSACTION definierad
20900 i GPSSS har prefixet PROCESS s} h{ndelser
21000 f`r objekten inplaneras med
21100 dom vanliga SIMULA satserna. I programmet genererar
21200 varje kund sin efterf`ljare och l{mnar systemet
21300 efter 10 minuter.
21400
21500 .p 5,1,8
21600 H{r f`ljer en lista av de procedurer som beh`vs
21700 f`r att anv{nda resurserna
21800 tillsammans med n}gra andra procedurer :
21900 .b 1
22000 .p 0,1,9
22100 .nofill
22200 .lm 10
22300 A) Procedurer f`r objekten
22400 -----------------------
22500 .b 1
22600 - enter__station ( n )
22700 - leave__station ( n )
22800 - enter__storage ( n )
22900 - leave__storage ( n )
23000 - enter__queue ( n )
23100 - leave__queue ( n )
23200 .b 1
23300 .p 0,1,5
23400 B) Procedurer i huvudprogrammet
23500 ----------------------------
23600 .b 1
23700 - set__storage ( n , max__contents )
23800 - restart
23900 .b 1
24000 .p 0,1,8
24100 C) Objektens attribut
24200 ------------------
24300 .b 1
24400 - priority
24500 - time__mark
24600 - id
24700 .b 1
24800 .p 0,1,12
24900 D) Anv{ndar-procedurer
25000 -------------------
25100 .b 1
25200
25300 - gpsss__time
25400 - wait__until ( Boolskt uttryck )
25500 - standard__report
25600 - contents__station ( n )
25700 - contents__storage ( n )
25800 - contents__queue ( n )
25900 - waiting__station ( n )
26000 - waiting__storage ( n )
26100 - waiting__queue ( n )
26200 .b 1
26300 .p 0,1,4
26400 E) Global variabel
26500 ---------------
26600 .b 1
26700 - U
26800 .b 1
26900 .p 0,1,9
27000 F) Procedurer i version GPSSST
27100 ---------------------------
27200 .b 1
27300 - trace__objects
27400 - station__name (n,new__name)
27500 - storage__name (n,new__name)
27600 - queue__name (n,new__name)
27700 - trans__name ( new__name )
27800 - hold__until__ready
27900 - outtime ( time )
28000 - begin__time ( time )
28100 .b 1
28200 .fill
28300 .title Transaktionerna
28400 .b 2
28500 .lm 0
28600 .test page 10
28700 4_. Transaktionerna
28800 .lm 5
28900 .p 5,1,5
29000 Varje objekt har tre attribut f`r-definierade :
29100 .b 1
29200 .lm 10
29300 .nofill
29400 integer ID ;
29500 real TIME__MARK, PRIORITY ;
29600 .b 1
29700 .fill
29800 .lm 5
29900 .p 5,1,5
30000 N{r ett objekt skapas s} s{tts PRIORITY till noll och
30100 TIME__MARK till aktuella tiden. ID ges det v{rde som
30200 motsvarar objektets ordning i simuleringen.
30300
30400 .p 5,1,11
30500 PRIORITY anv{nds av systemprocedurerna n{r ett
30600 objekt ska placeras i en ink` eller
30700 n{r ett objekt g`r en WAIT__UNTIL.
30800 Ink`erna {r de k`er objekten placeras i innan
30900 de ska anv{nda en station eller ett lager.
31000 Objekt vars
31100 PRIORITY {r minst g}r ur k`n f`rst. N{r PRIORITY {r
31200 lika f`r flera objekt {r ordningen f`rst-in-f`rst-ut
31300 om PRIORITY {r st`rre eller lika med noll och
31400 sist-in-f`rst-ut om PRIORITY {r mindre {n noll.
31500 Anv{ndaren kan allts} definiera olika ordningar genom
31600 att {ndra p} PRIORITY under simuleringen. Simulasatserna
31700 HOLD, ACTIVATE och REACTIVATE anv{nder inte
31800 PRIORITY.
31900
32000 .p 5,1,3
32100 TIME__MARK anv{nds inte av GPSSS men anv{ndaren
32200 kan utnyttja TIME__MARK f`r att f} ut tiden som ett
32300 objekt har tillbringat i en resurs.
32400
32500 .p 5,1,3
32600 Procedurerna som definierar h{ndelser f`r objekten
32700 och deras motsvarighet i GPSS visas nedan.
32800
32900 .b 1
33000 .nofill
33100 .test page 10
33200 .lm 8
33300 GPSSS GPSS
33400 ----- ----
33500
33600 ENTER__STATION (N) SEIZE N
33700 LEAVE__STATION (N) RELEASE N
33800 ENTER__STORAGE (N, SIZE) ENTER N, SIZE
33900 LEAVE__STORAGE (N, SIZE) LEAVE N, SIZE
34000 ENTER__QUEUE (N) QUEUE N
34100 LEAVE__QUEUE (N) DEPART N
34200 .lm 5
34300 .fill
34400
34500 .p 5,1,5
34600 Parametern N {r ett heltal som identifierar en
34700 resurs. Hur m}nga behandlingsstationer, lager och
34800 k`er anv{ndaren t{nker utnyttja anges som parametrar
34900 till GPSSS, enligt f`ljande :
35000
35100 .nofill
35200 .p 0,1,3
35300 GPSSS( max__queues, max__stations, max__storages)
35400 [ k`er ] [ behandlings-] [ lager ]
35500 [ stationer ]
35600
35700 .fill
35800 .p 5,1,4
35900 Numreringen av resurserna beh`ver inte vara
36000 konsekutiv, bara N h}ller sig fr}n 1 till max__queues,
36100 max__stations och max__storages respektive.
36200
36300 .title Huvudprogrammet
36400 .b 2
36500 .lm 0
36600 .test page 10
36700 5_. Huvudprogrammet
36800 .lm 5
36900 .p 5,1,6
37000 Huvudprogrammet initierar simuleringen, anropar
37100 proceduren STANDARD__REPORT om statistik ska skrivas
37200 ut och avslutar simuleringen. Den kan
37300 dessutom anv{nda vissa procedurer som beskrivs senare.
37400 H{r n{mns de tv} procedurer som {r speciella f`r
37500 huvudprogrammet. De {r :
37600 .b 1
37700 .lm 10
37800 .nofill
37900 - RESTART och
38000 - SET__STORAGE( N, <maximalt utrymme> )
38100 .lm 5
38200 .fill
38300 .p 5,1,6
38400 RESTART "nollst{ller" GPSSS s} att en ny simulering kan g`ras.
38500 Den nya simuleringen kan vara samma modell med andra indata,
38600 eller en helt ny modell.
38700 Proceduren anropar STANDARD__REPORT, tar bort
38800 alla objekt och resurser, s{tter GPSSS__TIME
38900 till noll och den globala variabeln U f`r
39000 slumpdragningar till 987654321.
39100 .p 5,1,4
39200 SET__STORAGE skapar ett lager med dess
39300 maximala utrymme.
39400 Om lager anv{nds innan de har skapats
39500 p} detta s{tt kommer dess utrymme s{ttas
39600 till 1 000 000.
39700
39800 .title Globala procedurer
39900 .b 2
40000 .lm 0
40100 .test page 10
40200
40300
40400 6_. Globala procedurer
40500 .lm 5
40600 .p 5,1,4
40700 Anv{ndarprocedurerna, se sid. 5, ber`r
40800 simuleringstiden och hur resurserna
40900 har utnyttjas.
41000 .p 5,1,6
41100 REAL PROCEDURE GPSSS__TIME; <- - - -> ;
41200 ger tiden f`r simuleringen sedan simuleringen startade
41300 eller sedan proceduren RESTART anv{ndes sista g}ngen.
41400 Proceduren ers{tter SIMULA proceduren TIME som inte
41500 ska utnyttjas.
41600
41700 .p 5,1,6
41800 De sex sista procedurerna, se anv{ndarprocedurer sid. 5
41900 ger ett heltal som motsvarar :
42000 .nojustify
42100 .b 1
42200 antalet objekt som v{ntar p} att f} utnyttja en resurs
42300 ( WAITING__ ) eller
42400 .b 1
42500 det aktuella inneh}llet i en resurs ( CONTENTS__ ).
42600 .b 1
42700
42800 .justify
42900 .p 5,1,9
43000 STANDARD__REPORT skriver ut statistik p} utnyttjandet
43100 av resurserna. Tidsintervallet f`r vilken statistiken g{ller,
43200 {r tiden mellan tv} konsekutiva anrop av proceduren, eller
43300 d} den anropas f`r f`rsta g}ngen tiden fram till dess.
43400 Som f`rebild till utformningen av statistiken har dess
43500 motsvarighet i GPSS anv{nts.
43600 Proceduren anropas automatiskt av GPSSS d} hela simuleringen
43700 {r klar.
43800
43900 .p 5,1,8
44000 WAIT__UNTIL( <boolskt uttryck> ) {r en kraftfull
44100 procedur. Den kan anv{ndas av ett objekt eller av
44200 huvudprogrammet. Den passiverar f`rst,
44300 och aktiverar igen n{r uttrycket blivit TRUE. Uttrycket
44400 testas efter varje h{ndelse i simuleringen. Objekten
44500 passiverade av WAIT__UNTIL placeras i en v{ntk` i
44600 prioritetsordning. Huvudprogrammet som inte har PRIORITY attributet
44700 testas alltid sist av proceduren.
44800
44900 .title Version GPSSST
45000 .b 2
45100 .lm 0
45200 .test page 10
45300 7_. Version GPSSST
45400 .lm 5
45500 .p 5,1,3
45600 I version GPSSST har anv{ndaren m`jligheter att
45700 f} utskrifter av varje objekts v{g genom systemet.
45800 _#ven tidpunkterna f`r h{ndelserna skrivs ut.
45900
46000 .p 5,1,3
46100 Det finns tv} typer av utskrifter. Den f`rsta
46200 ordnar proceduren TRACE(n) och den andra TRACE__OBJECTS.
46300
46400 .p 5,1,5
46500 TRACE(n) ger utskrift efter hand ett objekt g}r in
46600 i eller l{mnar en resurs.
46700 TRACE(n) anropas automatiskt i GPSSST
46800 om TRACE__ON s{tts TRUE i b`rjan av anv{ndarprogrammet.
46900 .b 1
47000 .nofill
47100 utskriftsexempel :
47200 .b 1
47300 ..
47400 ..
47500 ..
47600 object 5 entering station 2 at time 12:03
47700 object 4 leaving storage 1 at time 12:39
47800 ..
47900 ..
48000 ..
48100 .fill
48200 .p 5,1,7
48300 TRACE__OBJECTS kan anropas n{r en (del-) simulation
48400 {r klar. F`rst skrivs de objekt som l{mnat simuleringen
48500 ut. Sedan kommer de objekt som v{ntar p} plats
48600 i en behandlingsstation, eller ett lagerutrymme, och sist de
48700 objekt som fortfarande {r passiverade av WAIT__UNTIL. Objekten {r
48800 ordnade efter deras attribut ID.
48900
49000 .p 5,1,5
49100 Varje objekt f`ljs av dess h{ndelser och sedan
49200 objektets tid i respektive resurs. Om anv{ndaren
49300 endast `nskar utskrift p} objektens tid i resurserna
49400 s{tts TIME__SPENT__ONLY := TRUE.
49500 .b 1
49600 .nofill
49700 .test page 22
49800 utskriftsexempel :
49900 .lm 10
50000 .b 1
50100 object 4
50200 ----------
50300 .b 1
50400 .b 1
50500 Entered storage 1 at time 10:51
50600 Entered queue 1 at time 10:51
50700 Leaved queue 1 at time 11:41
50800 Entered station 1 at time 11:41
50900 Leaved station 1 at time 12:39
51000 Entered queue 3 at time 12:39
51100 Leaved queue 3 at time 12:54
51200 Entered station 4 at time 12:54
51300 Leaved station 4 at time 13:53
51400 Leaved storage 1 at time 13:53
51500 .b 2
51600
51700 Time spent in storage 1 : 03:02
51800 Time spent in queue 1 : 00:49
51900 Time spent in station 1 : 00:58
52000 Time spent in queue 3 : 00:16
52100 Time spent in station 4 : 00:59
52200 .lm 5
52300 .fill
52400 .b 1
52500 .p 5,1,4
52600 Statistik f`r proceduren TRACE__OBJECTS samlas
52700 endast om OBJECT__TRACE__ON s{tts TRUE.
52800 Detta m}ste allts} g`ras innan simuleringen s{tter
52900 ig}ng.
53000
53100 .p 5,1,7
53200 F`r att f} en mer l{ttl{st text i
53300 de utskrifter trace-procedurerna ger
53400 kan man tilldela objekten och resurserna andra namn med
53500 procedurerna :
53600 .b 1
53700 .nofill
53800 TRANS__NAME ( <namn> ), QUEUE__NAME ( N, <namn>)
53900 STATION__NAME( N, <namn>) och STORAGE__NAME( N, <namn>)
54000 .b 1
54100 .fill
54200 .p 5,1,6
54300 I denna version anges tidsenheten
54400 simuleringen ska utnyttja med
54500 en fj{rde parameter till GPSSST.
54600 _#ven antalet decimaler p} sekunderna
54700 ska anges ( femte parametern ).
54800 .b 1
54900 .nofill
55000 GPSSST( , , , <tidsenheten> , secdec) BEGIN/CLASS
55100 .b 1
55200 .p 5,1,6
55300 De tidsenheter som kan anv{ndas {r :
55400 .b 1
55500 .lm 10
55600 .nofill
55700 's' f`r sekunder
55800 'm' f`r minuter
55900 'h' f`r timmar
56000 .lm 8
56100 och 'd' f`r dagar
56200 .lm 5
56300 .fill
56400 .p 5,1,4
56500 Om anv{ndaren inte vill ha sekunder utmatade
56600 s{tts secdec till -1.
56700
56800
56900 .title Programexempel
57000 .b 2
57100 .lm 0
57200 .test page 10
57300 8_. Programexempel
57400 .lm 5
57500 .b 1
57600 .p 5,1,7
57700 Program-exempel 1, sid. 14, visar en simulering av
57800 en dator. Job inkommer slumpm{ssigt i tiden
57900 och placeras i en in-k`. N{r minnesutrymme {r tillg{ngligt
58000 h{mtas jobet, och g}r alternerande mellan CPU-tid och
58100 I/O-tid.
58200 Efter 10 s}dana looper l{mnar jobet
58300 systemet.
58400 .p 5,1,6
58500 Storage 1 representerar minnet, station 1 CPU'n
58600 och queue 1 och 4 ger statistik p} tider genom
58700 systemet respektive v{ntetider p} CPU'n.
58800 .p 5,1,4
58900 Huvudprogrammet anv{nder RESTART f`r att
59000 simulera tv} pass med olika minnesstorlekar.
59100 .p 5,1,7
59200 Sid. 15 visar en l{karmottagning som ska
59300 simuleras. D{r finns tv} provtagningsrum och tv}
59400 l{kare. Patienterna som anl{nder slumpm{ssigt i
59500 tiden ska f`rst till ett provtagningsrum och sedan
59600 till en l{kare. Fr}n v{ntrummen g}r patienterna till
59700 det rum som f`rst blir ledigt.
59800
59900 .p 5,1,10
60000 V{ntrummen f}r representera k`er, QUEUE 1 och
60100 QUEUE 2, och provtagningsrummen behandlingsstationer,
60200 STATION 1 och STATION 2. L{karna f}r
60300 ocks} bli behandlingsstationer, STATION 3 och STATION 4.
60400 F`r att f} statistik p} utnyttjandet av hela l{karstationen
60500 f}r den representera ett lager, STORAGE 1, med ett
60600 maximal utrymme av exempelvis 25 patienter.
60700 .p 5,1,6
60800 .title
60900 .page
61000 .nofill
61100 .b 2
61200 GPSSS @VERSIKT
61300 ---------------
61400 .b 10
61500 Simulation CLASS gpsss( max__queues,
61600 max__stations, max__storages ) ;
61700 BEGIN
61800 CLASS queue; < - - - - - - - - >;
61900 CLASS facility; < - - - - - - - - >;
62000 CLASS storage; < - - - - - - - - >;
62100 Process CLASS transaction ;
62200 BEGIN
62300 PROCEDURE enter__queue(n); < - - >;
62400 PROCEDURE leave__queue(n); < - - >;
62500 PROCEDURE enter__station(n); < - >;
62600 PROCEDURE leave__station(n); < - >;
62700 PROCEDURE enter__storage(n); < - >;
62800 PROCEDURE leave__storage(n); < - >;
62900 PROCEDURE priority__into(queue); <>;
63000 < - - - - - - - - - - - - - - - - >;
63100 END of class transaction ;
63200 PROCEDURE wait__until ; < - - - - >;
63300 PROCEDURE waiting- -queue ; < >;
63400 contents- -station ; < >;
63500 -storage ; < >;
63600 PROCEDURE standard__report ; < - - >;
63700 PROCEDURE restart ; < - - - - - - >;
63800 < - - - - - - - - - - - - - - - - - >;
63900 END
64000 .page
64100 .b 1
64200 KLASSEN TRANSACTION
64300 --------------------
64400 .b 10
64500 process CLASS transaction ;
64600 .b 1
64700 BEGIN
64800 REAL time__mark, priority;
64900 INTEGER id ;
65000 REF(head) occurrences;
65100 .b 1
65200 PROCEDURE trace(n);
65300 .b 1
65400 PROCEDURE enter__station (n);
65500 PROCEDURE leave__station (n) ;
65600 PROCEDURE enter__storage (n, units__required) ;
65700 PROCEDURE leave__storage (n,units__released);
65800 PROCEDURE enter__queue (n);
65900 PROCEDURE leave__queue (n) ;
66000 .b 1
66100 time__mark := gpsss__time ;
66200 transid := transid + 1 ; id := transid ;
66300 .b 1
66400 IF object__trace__on THEN occurrences:-NEW head;
66500 INNER;
66600 IF object__trace__on THEN
66700 final__wait (finished__objects);
66800 IF nextev==NONE THEN ACTIVATE Main DELAY 0;
66900 .b 1
67000 END CLASS TRANSACTION ;
67100 .page
67200 .b 1
67300 PROGRAM-EXEMPEL 1
67400 -----------------
67500 .b 1
67600 OPTIONS(/search:"libsim[106,346]");
67700 BEGIN EXTERNAL CLASS gpsss;
67800 gpsss(4,1,1) BEGIN
67900 .b 1
68000 transaction CLASS job;
68100 BEGIN INTEGER i,size,u1;
68200 ACTIVATE NEW job DELAY Negexp(1/20,u);
68300 size := Randint(1,10,u);u1 := u;
68400 enter__queue(1);enter__storage (1,size);
68500 .b 1
68600 FOR i := 1 STEP 1 UNTIL 10 DO BEGIN
68700 enter__queue (4);enter__station (1);
68800 leave__queue(4);hold(Negexp(1,u1));
68900 leave__station(1);hold(Uniform(0,5,u1));
69000 END;
69100 .b 1
69200 leave__storage(1,size);leave__queue(1);
69300 END;
69400 set__storage(1,10);
69500 ACTIVATE NEW job;
69600 hold(300); standard__report;
69700 hold(300); restart;
69800 set__storage(1,15);ACTIVATE NEW job;
69900 hold(300);
70000 END
70100 END
70200 .page
70300 .b 1
70400 L_#KARMOTTAGNINGEN
70500 -----------------
70600 .b 10
70700 L_#KARHUSET
70800 .b 2
70900 =============== IN ===============
71000 ! !
71100 ! !
71200 ! V_#NTRUM till PROVTAGNINGAR !
71300 ! !
71400 ! !
71500 !====== IN ============ IN =====
71600 ! ! !
71700 ! ! !
71800 ! PROVT RUM 1 ! PROVT RUM 2 !
71900 ! ! !
72000 ! ! !
72100 !===== UT ============= UT =====
72200 ! !
72300 ! !
72400 ! V_#NTRUM till L_#KARNA !
72500 ! !
72600 ! !
72700 !===== IN ============= IN =====
72800 ! ! !
72900 ! ! !
73000 ! L_#KARE 1 ! L_#KARE 2 !
73100 ! ! !
73200 ! ! !
73300 ====== UT ============= UT =====
73400 .page
73500 .b 1
73600 PROGRAM-EXEMPEL 2
73700 -----------------
73800 .b 10
73900 BEGIN COMMENT l{karmot. med provt.;
74000 EXTERNAL CLASS gpssst,gpssso;
74100 gpssso(3,4,1,'m',-1) BEGIN
74200 .b 1
74300 transaction CLASS patient(t1,t2);
74400 REAL t1,t2;
74500 .b 1
74600 BEGIN PROCEDURE till__station(n);
74700 INTEGER n;
74800 BEGIN enter__queue(n);wait__until(
74900 contents__station(n)=0 OR
75000 contents__station(n+1)=0);
75100 leave__queue(n);
75200 IF contents__station(n)=0 THEN
75300 enter__station(n) ELSE
75400 enter__station(n+1);
75500 hold(IF n=1 THEN t1 ELSE t2 );
75600 IF station(n).occupier==THIS
75700 transaction THEN leave__station(n)
75800 ELSE leave__station(n+1);
75900 END of till__station ;
76000 .b 1
76100 IF id<10 THEN ACTIVATE NEW patient(
76200 Normal(60,20,u1),Uniform(20,120,u2))
76300 DELAY Negexp(2/60,u);
76400 enter__storage(1,1);FOR i:=1,3 DO
76500 till__station(i);leave__storage(1,1);
76600 END patient ;
76700 .b 1
76800 INTEGER i,u1,u2;u1:=123987;
76900 u2:=789123; outfit;
77000 ACTIVATE NEW patient(Normal(60,20,u1),
77100 Uniform(20,120,u2)) ;
77200 hold__until__ready;trace__objects;
77300 END;
77400 END
77500 .page
77600 .b 1
77700 DEFINITIONER
77800 ------------
77900 .b 10
78000 OPTIONS(/e/search:"libsim[106,346]");
78100 EXTERNAL CLASS gpssst ;
78200 gpssst CLASS gpssso ;
78300 BEGIN
78400 PROCEDURE outfit ;
78500 BEGIN
78600 object__trace__on := TRUE ;
78700 time__spent__only := TRUE ;
78800 trans__name("Patient");
78900 queue__name( 1,"provt. k`n" ) ;
79000 queue__name( 3,"""l{kark`n""" ) ;
79100 storage__name( 1 ,"L_#KARHUSET" ) ;
79200 station__name( 1 ,"provrum 1 " ) ;
79300 station__name( 2 ,"provrum 2 " ) ;
79400 station__name( 3,"""l{kare 1""") ;
79500 station__name( 4,"""l{kare 2""") ;
79600 begin__time(9.00);
79700 END;
79800 END OF GPSSSO
79900 .page
80000 .lm 0
80100 .b 1
80200 .paper size 70,70
80300
80400 *************************** -VERSION 4.1-
80500 *** MONTREAL GPSSS ***
80600 *** SIMULATION REPORT ***
80700 ***************************
80800 .b 2
80900
81000 PASSE = 1
81100 .b 2
81200 START TIME= 09:00
81300 END TIME= 17:14
81400 .b 2
81500
81600 * STATIONS *
81700 ************
81800 .b 1
81900 AVERAGE AVERAGE
82000 STATION UTILISATION ENTRIES TRANSIT TIME STATUS
82100 .b 1
82200 1 0.73 6 01:00 FREE
82300 2 0.57 4 01:11 FREE
82400 3 0.68 5 01:07 FREE
82500 4 0.49 5 00:48 FREE
82600 .b 3
82700
82800
82900 * STORAGES *
83000 ************
83100 .b 1
83200 AVG. AVG. THRU TIME CONTENTS
83300 STORAGE CAPACITY CONTENTS UTIL. ENTRIES / UNIT MAX NOW
83400 .b 1
83500 1 25 2.93 0.1170 10 02:25 6 0
83600 .b 3
83700
83800
83900 * QUEUES *
84000 **********
84100 .b 1
84200 MAX. CURRENT AVG. AVG.
84300 QUEUE ENTRIES CONTENTS CONTENTS CONTENTS TIME/TRANS
84400 .b 1
84500 1 10 2 0 0.39 00:19
84600 3 10 1 0 0.07 00:03