top - download
⟦99c88a772⟧ Wang Wps File
Length: 67259 (0x106bb)
Types: Wang Wps File
Notes: CPS/SDS/029
Names: »1833A «
Derivation
└─⟦bf0247e75⟧ Bits:30006089 8" Wang WCS floppy, CR 0141A
└─ ⟦this⟧ »1833A «
WangText
S…00……00……00……00…B…02……00……00…B
B…07…A…0b…A…01…A…07…@…0b…@…0e…@
@…07…?…0b…?…0f…?
? ?…05…>…09…>…0d…>…01…>…06…=…09…=…0c…=…01…=…02…=…07…<…0a…<…0e…<…01…< <…07…;…0a…;…0c…;…0f…;
; ;…07…:…0b…:…00…:…02…:…05…9…09…9…0c…9…0e…9…86…1 …02… …02… …02…
…02…CPS/SDS/029
…02…820514…02……02…
SYSTEM STATUS AND CONTROL
DETAILED DESIGN SPECIFICATION…02……02…CAMPS
4.2.9.4.6 C̲R̲E̲A̲T̲E̲ ̲P̲R̲O̲C̲E̲S̲S̲E̲S̲
4.2.9.4.6.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The CREATE ̲PROCESSES module functions include:
- request of load of memory segments
- DAMOS create of a process
- User on of a child process to the TMS
- Setting of subprocess attributes
- Update of the PROCESS ̲TABLE, SUB P ̲TABLE
- Trace action
a) R̲e̲q̲u̲e̲s̲t̲ ̲o̲f̲ ̲l̲o̲a̲d̲ ̲o̲f̲ ̲m̲e̲m̲o̲r̲y̲ ̲s̲e̲g̲m̲e̲n̲t̲s̲
CREATE ̲PROCESSES requests the LOAD ̲SEGMENT module
to:
- load the TMP ̲SHARED and the CSF ̲SHARED segments
(created by ROOT)
- load the
- program segment (PS)
- data segment (DS)
- PPS segment (PPS)
for all COPSY child processes (the segments
are created in the CREATE ̲ENVIRONMENT module)
Each segment is loaded from a file, which is specified
in the PROCESS ̲CONF table per process type.
b) D̲A̲M̲O̲S̲ ̲c̲r̲e̲a̲t̲e̲ ̲o̲f̲ ̲a̲ ̲p̲r̲o̲c̲e̲s̲s̲
The CREATE ̲PROCESS requires as input:
- a process control block
- a resource specification
The resource specification is taken from the PROCESS
̲CONF table. It is further described in section
4.2.9.l.5.
The process control block is shown overleaf.
The
- CPU-pool
- priority
- real time
- time limit
- level
- profile
- init ̲procs
fields are taken from the PROCESS ̲CONF table
The BOUNDS and environment are taken from the PARAMETER
̲STACK, where they are saved during system generation.
The loading of BOUNDS and environment is executed
by the LOAD ̲SEGMENT module.
The PS, DS, PPS segment object indexes are taken
from the PROCESS ̲TABLE.
The PSE is inserted in "synch".
process ̲creation ̲block =
record
PS, "
program
segment
DS,…02……02…" data segment
PPS: obj ̲index;…02…"process
parameter
segment
synch: obj ̲index; "parent
synchronization
element
CPU-pool: obj ̲index; "processor
pool
priority: logical-priority;
real ̲time: boolean; "should
the
process
have
"a
private
set
of
"translation
tables
?
time ̲limit: ticks;…02…"maximum
processing
time
"milliseconds
level: integer; "logical
level
profile: security
̲profile;
UGI, "own
UGI
low ̲UGI, "lower
bound
high ̲ UGI: user ̲group
̲id "upper
bound
for
children
BOUNDS: BOUNDS; "comming
BOUND
register
"map
environment: integer; "pointer
to
env
̲template
"relative
to
start
of
PPS
init ̲procs: word; "on
which
levels
should
"an
init
procedure
be
"invoked
?
program ̲start: integer; "the
logical
page
number
"of
the
first
page
of
the
"program
segment
of
the
…02… "new process.
"
"nil"
means
immediately
"after
GPS.
entry ̲point: integer; "initial
value
of
PRPC
registers: registers; "initial
register
contents
end;
Process creation block
Fig. 4.2.9.4.6.l-1
The COPSY child processes are given distinct UGIs:
the process number.
As COPSY child does not create processes, then -LOW
̲UGI = HIGH ̲UGI = 0
The bound register are defined in SSC ̲common data.
The environment field, which contains a pointer (relative
to PPS start) of the base for the object descriptor
table in the child PPS, is defined.
The program is started on the page immediately after
GPS.
The entry point is taken from the PS load file.
The register setting is defined in the SWICD (section
6.5.)
c) U̲s̲e̲r̲-̲o̲n̲ ̲o̲f̲ ̲c̲h̲i̲l̲d̲ ̲p̲r̲o̲c̲e̲s̲s̲ ̲t̲o̲ ̲T̲M̲S̲/̲F̲M̲S̲…88…s̲
The child processes to use TMS
- CMI
- all TEP, THP line processes
are used on to TMS as ordinary users. Their internal
TMS resources are specified (drawn from the COPSY
resources) in the user-on-call and are taken from
the PROCESS ̲CONF table.
FMS users are specified according to the
FMS ̲USER ̲ON ̲DATA.
d) S̲e̲t̲t̲i̲n̲g̲ ̲o̲f̲ ̲s̲u̲b̲p̲r̲o̲c̲e̲s̲s̲ ̲a̲t̲t̲r̲i̲b̲u̲t̲e̲s̲
Each subprocess to be handled by CSF is identified.
The following parameters are given:
- the process no. containing the subprocess
- the privileged functions excentable by the child
- the initial access profile e.g. classification
- the process type
- the queue element claim
e) U̲p̲d̲a̲t̲e̲ ̲o̲f̲ ̲o̲w̲n̲ ̲t̲a̲b̲l̲e̲s̲
The PROCESS ̲TABLE entry fields
- object (object index)
- process-id (DAMOS universal process no.)
- status
- TYPE ̲OF ̲PROCESS (here in relation to error-handling
= vital, retirable, dummy)
- MAX ̲COUNT (no. of errors threshold)
- SUBP ̲TYPE (process type)
…02……02…are updated
The
- object
- process-id
are the return parameters from CREATE ̲PROCESS
Remaining entries are taken from the PROCESS ̲CONF
table.
The SUBP ̲TABLE entry field
- CHILD ̲TMS ̲ACCESS ̲RIGHTS
is set according to the PROCESS ̲CONF table entry.
f) T̲r̲a̲c̲e̲ ̲a̲c̲t̲i̲o̲n̲
In trace mode (refer section 4.2.9.1.1.6) CREATE
̲PROCESSES useres-on the child processes not hitherto
usered-on to FMS. Hereby all child processes will
be able to use the FMS for generation of trace
logs.
4.2.9.4.6.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) CREATE ̲PROCESSES (START ̲UP ̲DIR : FDCB ̲INDEX,
SSC ̲DIR : FDCB ̲INDEX)
b) CREATE ̲PROCESSES (R0, R1, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
RO START ̲UP ̲DIR
R1 SSC ̲DIR
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
RO-R7 destr.
4.2.9.4.6.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The CREATE ̲PROCESSES module contains / references the
procedures / modules specified in figure 4.2.9.4.6.3.-1
and 4.2.9.4.6.3.-2
a) C̲R̲E̲A̲T̲E̲ ̲P̲R̲O̲C̲E̲S̲S̲E̲S̲
The PATCH ̲TABLE is requested set according to the
patch files contents.
The CREATE ̲ENVIRONMENT module is invoked to create:
- syncronization elements
- segments
for all COPSY and COPSY child processes. Also,
the CONFIG segment is loaded.
Hereafter all segments are loaded and child processes
in
- COMPLETE ̲COPSY ̲CREATION and
- CREATE ̲COPSY ̲CHILD ̲PROCESS
In TRACE ̲MODE then TRACE ̲ACTIONS are executed.
b) C̲O̲M̲P̲L̲E̲T̲E̲ ̲C̲O̲P̲S̲Y̲ ̲C̲R̲E̲A̲T̲I̲O̲N̲
The shared (between processes using TMP and CSF)
segments:
- TMP ̲SHARED
- CSF-SHARED
are loaded according to the PROCESS ̲CONFIG specification
for the COPSY subprocess type. The PROCESS ̲TABLE
is updated.
The CONFIG file is loaded into the USER program
segment, which is mapped into copy data space.
The entry point for the USER program is fetched
via the TMP program segment.
c) L̲O̲A̲D̲ ̲S̲E̲G̲M̲
Sets up input parameters (in LOAD ̲IN) used when
calling LOAD ̲SEGMENT
d) U̲P̲D̲A̲T̲E̲ ̲P̲R̲O̲C̲E̲S̲S̲ ̲T̲A̲B̲L̲E̲
Updates the PROCESS ̲TABLE.…86…1 …02… …02… …02… …02…
e) C̲R̲E̲A̲T̲E̲ ̲C̲O̲P̲S̲Y̲ ̲C̲H̲I̲L̲D̲ ̲P̲R̲O̲C̲E̲S̲S̲
The procedure loads a
- program segment
- data segment
- PPS segment
for each COPSY child process.
For a process, which exists in more than one incavuation
(e.g. ROP.S), the program segment is shared, while
a data segment and a PPS segment is loaded per
process.
The process types
- PTR
- PTP
- NICS ̲TARE
- SCARS ̲CCIS
- TRC ̲PTOP
share the same program segment.
For each process the
- SUBP ̲TABLE
- PROCESS ̲TABLE
are initialized.
The process control block to be given during DAMOS
create of a process is defined, the process is
created and for line processes the process is usered
on to TMS.
Also, for each subprocess within a process the
attributes (CSF) are set.
Having created all non-line processes the mirrored
disks are requested initialized.
The parameters used during
- process
- disk
creation are taken from the CONFIG segment. The
USER program segment is used as CONFIG segment
during process and disk creation. Having loaded
all processes the CONFIG segment containing the
PROCESS ̲CONFIG data is restored (the USER program
is loaded).
The procedure contains two loops:
- outer loop
Scans through all COPSY child subprocess types
- inner loop
Scans through all processes within a given
subprocess type
f) D̲E̲T̲E̲R̲M̲I̲N̲E̲ ̲S̲U̲B̲P̲ ̲N̲O̲S̲ ̲I̲N̲ ̲P̲R̲O̲C̲E̲S̲S̲
The procedure determines subprocess numbers within
a process.
Some user-s processes contains also
- MSO and/or
- MDCO
subprocesses.
g) S̲e̲t̲ ̲P̲C̲B̲ ̲c̲o̲n̲t̲e̲n̲t̲s̲
The procedure defines the process creation block
to be given during create of a process
The registers forming the start up basis for a
process is set.
R0-R4 contains start-up information for a child
(refer overleaf).
R7 contains information for the PRE ̲INITIALIZATION
procedure in all processes.
The environment pointer, which points at objects
to be inherited by the child process is defined.
The program entry for the new process is set as
specified in the load segment.
PROCESS R0 R1 R2 R3 R4
TYPE
SUPV ̲S START ̲UP ̲ PROCESS ̲ FIRST ̲NO 1 0
ACTIVE ̲ TYPE
TYPE ̲D
USER ̲S - - USER ̲NO MSO
̲NO MDCO
̲NO
ROP ̲S - - FIRST ̲NO NO 0
OCR ̲S - - - - -
PTR ̲S - - - - -
PTP ̲S - - - - -
NICS ̲
TARE ̲S - - - - -
SCARS ̲
CCIS ̲S - - - - -
TRC ̲
PTOP ̲S - - - - -
OTHER - - nil nil nil
FIRST ̲NO: first subprocess no. within process
NO : no. of subprocesses within process
USER ̲NO : subprocess no. of a user subprocess
MSO ̲NO : subprocess no. of a MSO subprocess
MDCO ̲NO : subprocess no. of a MDCO subprocess
The MSO subprocesses are placed in USER ̲S processes:
FIRST ̲USER ̲P ̲NO .. FIRST ̲USER ̲P ̲NO + NO ̲OF ̲MSOS-1
The MDCO subprocesses are placed in USER ̲S processes:
FIRST ̲USER ̲P ̲NO .. FIRST ̲USER ̲P ̲NO + NO ̲OF ̲MDCOS-1
h) C̲R̲E̲A̲T̲E̲ ̲P̲R̲O̲C̲
Creates a process DAMOS vice.
i) T̲M̲S̲ ̲U̲S̲E̲R̲ ̲O̲N̲
Line processes
- CMI
- SUPV till TRC ̲PTOP
are set as users of the TMS.
DAMOS UGI (user group identifiers) are set identical
to the process number
j) S̲E̲T̲ ̲S̲U̲B̲P̲ ̲A̲T̲T̲R̲
Sets CSF subprocess attributes for the subprocesses
within a process.
k) T̲R̲A̲C̲E̲ ̲A̲C̲T̲I̲O̲N̲
The COPSY child processes, which not already are
set as a FMS user are usered on to FMS
l) F̲M̲S̲ ̲U̲S̲E̲R̲ ̲O̲N̲
Processes which use FMS ̲FIXED or FMS ̲MOVING are
used on based on the FMS ̲USER ̲ON ̲CONFIG ̲DATA.
Fig. 4.2.9.4.6.3-1 to -2
4.2.9.4.6.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
FDCB ̲INDEX:…02… DAMOS.I0S
USER ̲ON ̲PARAMS:…02… DAMOS.I0S
LPN:…02……02… DAMOS.PMD
PPP:…02……02… DAMOS.PMD
COPSY ̲S, MSO ̲S, MDCO ̲S, SUPV ̲S, TRC ̲PTOP ̲S, USER
̲S, CMI ̲S,
…02… SUBPROCESS ̲TYPE: DBD
LOAD ̲PATCH ̲HEADER,
CREATED ̲FMS ̲ON:…02… SSC.COMMON
POINTER:…02… DBD
SEG: CFH.VARIOUS
PROCESS ̲CONF ̲TYPE,
TMP ̲SHARED ̲SEG,
CSF ̲SHARED ̲SEG,
LOAD ̲IN ̲TYPE:…02… CFH.CONFIG
a2) C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
TRACE ̲MODE,
NO ̲OF ̲MSOS,
NO ̲OF ̲MDCOS,
NO ̲OF ̲PROCESSES,
COPSY ̲P ̲NO: DBD
TMS ̲ID,
MIR ̲MOVING,
FMS ̲MOVING:…02… DBD
TMP ̲SHARED ̲SEGM,
CSF ̲SHARED ̲SEGM,
TMP ̲SHARED ̲SEGM ̲SIZE,
CSF ̲SHARED ̲SEGM ̲SIZE:…02… DBD
a3) D̲A̲T̲A̲ ̲R̲E̲F̲E̲R̲E̲N̲C̲E̲S̲
LOAD ̲SW ̲TYPE: CFH.VARIOUS
TRACE ̲FMS ̲RESOURCES: CFH.VARIOUS
PSE:…02……02… SSC.COMMON
START ̲UP ̲TYPE ̲D:…02… CFH.VARIOUS
a4) T̲a̲b̲l̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
FMS ̲USER ̲ON ̲CONFIG ̲DATA,
PROCESS ̲CONFIG : CFH.CONFIG
PROCESS ̲TABLE (m),
SUBP ̲TABLE (m):…02… SSC.COMMON
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
The following PROCESS ̲CONFIG table entry fields
are read
- PS ̲FILE, DS ̲FILE, PPS ̲FILE
- PS ̲PARAMS, DS ̲PARAMS, PPS ̲PARAMS
- TMP ̲SHARED, TMP ̲PARAMS
- CSF ̲SHARED, CSF ̲PARAMS
- TMS ̲RESOURCE ̲SPEC
- ATTRIBUTES
The following SUBP ̲TABLE entry fields are updated:
- CHILD ̲TMS ̲ACCESS ̲RIGHTS
The following SUBP ̲TABLE entry fields are read
- NO ̲OF ̲SUBP ̲PR ̲SUBP ̲TYPE
- NO ̲OF ̲SUBP ̲PR ̲PROCESS
The following PROCESS ̲TABLE entry fields are updated:
- OBJECT
- PROCESS ̲ID
- STATUS
- TYPE ̲OF ̲PROCESS
- MAX ̲COUNT
- SUBP ̲TYPE
The following PROCESS ̲TABLE entry fields are read:
- PS ̲OBJ
- DS ̲OBJ
- PPS ̲OBJ
- STATUS
- PROC ̲ID
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR LOAD ̲IN: LOAD ̲IN ̲TYPE
Interface data to the LOAD ̲SEGMENT module
VAR PC: PROCESS ̲CONF ̲TYPE
Used for storing a copy of a single PROCESS ̲CONF
table entry
VAR ROOT ̲DIR : FDCB ̲INDEX
VAR INF : RECORD
CC : INTEGER
FILE : FILE ̲NAME
END
VAR
PC : PROCESS ̲CONF ̲TYPE
Contains a copy of the process configuration parameters
for the current subprocess type
G ̲PROC : COPSY ̲P ̲NO.. NO ̲OF ̲PROCESSES
global process no
G ̲SUBP : 1 .. NO ̲OF ̲SUBPROCESSES
global subprocess no
SUBP ̲TYPE : SUBPROCESS ̲TYPE
subprocess type
PROC ̲ID : INTEGER
Universal DAMOS identification of a process.
VAR ENTRY ̲POINT : POINTER
Contains for program segments the program entry
point taken from the LINKER load file.
NO ̲OF ̲PROC ̲IN ̲T : INTEGER
number of processes within a subprocess type
P : 1.. NO ̲OF ̲PROC ̲IN ̲T
current process no within subprocess type
S : 1.. NO ̲OF ̲SUBP ̲IN ̲P
current subprocess no within process
VAR
NO ̲IN ̲P : INTEGER
Number of subprocesses in a process
NO ̲IN ̲T : INTEGER
Number of subprocess of a given subprocess type
FIRST, NO, MDCO ̲S ̲NO : INTEGER
Refer section 4.2.9.4.9.6 h.
Contains subprocess number for the subprocesses
within a specific process. For non USER ̲S processes
FIRST contains the first subprocess no and NO contains
the number of subprocesses; MDCO ̲S ̲NO is nil.
For USER ̲S subprocesses:
FIRST contains the user subprocess no
NO contains the MSO subprocess no
MDCO ̲S contains the MDCO subprocess no
PROC ̲OBJ : OBJ ̲INDEX
Object index for a process
PARAMS
TMS ̲PAR : USER ̲ON ̲PARAMS (DAMOS.IOS)
VAR CONFIG ̲SEGM: SUBPROCESS ̲TYPE
VAR CONFIG ̲G ̲PROC: NO ̲OF ̲PROCESSES,
VAR CONFIG ̲OBJ
contains
- process type
- CAMPS global process no
- object index
program for the segment, which during process creation
is used by COPY to contain the CONFIG data.
VAR SAVED ̲ENTRY POINT: POINTER
contains the entrypoint of the program segment, which
is used to contain CONFIG data during COPSY process
creation.
4.2.9.4.6.5 D̲e̲s̲i̲g̲n̲
The CREATE ̲PROCESSES procedures are specified via the
flowgram presented overleaf.
PROCEDURE
CREATE ̲PROCESSES (START ̲UP ̲DIR, SSC ̲DIR : FDCB ̲INDEX)
VAR INF : RECORD
CC : INTEGER
FILE : FILE ̲NAME
END
BEGIN
LOAD ̲IN.START ̲UP ̲DIR = START ̲UP ̲DIR
LOAD ̲IN.SSL ̲DIR = SSC ̲DIR
GET ̲ROOT ̲MOV (MIR ̲MOVING) (ROOT ̲DIR)
SET ̲SW ̲VERSIONS (ROOT ̲DIR, PATCH ̲FILE)
(INF.CC, INF. FILE)
" enables load of patch files
INF. CC NE O?
INF.FILE = FILE
PU ̲DOWN (LOAD ̲PATCH ̲HEADER, INF)
CREATE ̲ENVIRONMENT (LOAD ̲IN) (CONFIG ̲OBJ)
COMPLETE ̲COPSY ̲CREATION
CREATE ̲COPSY ̲CHILD ̲PROCESS
TRACE ̲MODE EQ TRUE ?
TRACE ̲ACTION
END
Figure 4.2.9.4.6.5-1
PROCEDURE
COMPLETE ̲COPSY ̲CREATION
BEGIN
G ̲PROC = COPSY ̲P ̲NO
LOAD ̲SEGM (TMP ̲SHARED) (NIL)
LOAD ̲SEGM (CSF ̲SHARED) (NIL)
"load CONFIG data into USER ̲S program segment
CONFIG ̲SUBP = USER ̲S
CONFIG ̲G ̲PROC = FIRST ̲USER ̲P ̲NO
CONFIG ̲OBJ = PROCESS ̲TABLE(CONFIG ̲SUBP).PS ̲OBJ
LOAD ̲IN. SUBP ̲TYPE = CONFIG ̲SUBP
LOAD ̲IN. FILE = SEGM ̲CONFIG.CONFIG ̲FILE
LOAD ̲IN. G ̲PROC = CONFIG ̲G ̲PROC
LOAD ̲IN. SEG ̲SIZE = SEGM ̲CONFIG.CONFIG ̲PARAMS.SIZE
LOAD ̲IN.SEG ̲TYPE = CONFIG ̲SEG
LOAD ̲IN. SEGM = CONFIG ̲OBJ
LOAD ̲SEGMENT(LOAD ̲IN)(NIL)
"get USER program entry point via TMP program segment
LOAD ̲IN. G ̲PROC = TMP ̲P ̲NO
LOAD ̲IN. SUBP ̲TYPE = TMP ̲S
LOAD ̲IN. FILE = PROCESS ̲CONFIG(CONFIG ̲SUBP)-PS
̲FILE
LOAD ̲IN. SEG ̲SIZE = PROCESS ̲CONFIG(TMP ̲S).PS ̲PARAMS
̲SIZE
LOAD ̲IN. SEG ̲TYPE = GET ̲ENTRYPOINT ̲SEG
LOAD ̲IN. SEGM = PROCESS ̲TABLE(TMP ̲S)
LOAD ̲SEGMENT(LOAD ̲IN)(SAVED ̲ENTRYPOINT)
PROC ̲ID=NIL
SUBP ̲TYPE = COPSY ̲S
PROC ̲OBJ = NIL
UPDATE ̲PROCESS ̲TABLE
END
Fig. 4.2.9.4.6.5-2
PROCEDURE LOAD ̲SEGM (SEG ̲TYPE: SEG)
(ENTRY ̲POINT: POINTER)
BEGIN
LOAD ̲IN.SEG ̲TYPE = SEG ̲TYPE
LOAD ̲IN.SUBP ̲TYPE = SUBP ̲TYPE
LOAD ̲IN.G ̲PROC = G ̲PROC
CASE SEG ̲TYPE OF
RESTORE ̲SEG
PROGRAM ̲SEG? LOAD ̲IN.FILE = PC. PS ̲FILE
LOAD ̲IN.SEG ̲SIZE = PC.PS ̲PARAMS.SIZE
LOAD ̲IN.SEGM = PROCESS ̲TABLE
(G ̲PROC).PS ̲OBJ
DATA ̲SEG? LOAD ̲IN.FILE = PC.DS ̲FILE
LOAD ̲IN.SEG ̲SIZE = PC.DS ̲PARAMS.SIZE
LOAD ̲IN.SEGM: = PROCESS ̲TABLE
(G ̲PROC).DS ̲OBJ
PPS ̲SEG? LOAD ̲IN.FILE = PC.PPS ̲FILE
LOAD ̲IN.SEG ̲SIZE = PC.PPS ̲PARAMS.SIZE
LOAD ̲IN.SEGM = PROCESS ̲TABLE
(G ̲PROC).PPS ̲OBJ
LOAD ̲IN.NO ̲OF ̲CHILD ̲OBJ= PC.OBJECT
̲DESCRIPTOR
̲
TABLE ̲MAX ̲ENTRIES
TMP ̲SHARED ̲SEG?
LOAD ̲IN.FILE = SEGM ̲CONFIG.
TMP ̲SHARED ̲FILE
LOAD ̲IN.SEG ̲SIZE = TMP ̲SHARED
̲SEGM ̲SIZE
LOAD ̲IN.SEGM = TMP ̲SHARED ̲SEGM
CSF-SHARED ̲SEG?
LOAD ̲IN.FILE = SEGM ̲CONFIG.
CSF ̲SHARED ̲FILE
LOAD ̲IN.SEG ̲SIZE = CSF ̲SHARED
̲SEGM ̲SIZE
LOAD ̲IN.SEGM = CSF ̲SHARED ̲SEGM
END CASE
LOAD ̲SEGMENT(LOAD ̲IN) (ENTRY ̲POINT)
END ̲LOAD ̲SEGM
Figure 4.2.9.4.6.5-3
PROCEDURE
UPDATE ̲PROCESS ̲TABLE
BEGIN
PROCESS ̲TABLE (G ̲PROC).OBJECT =
PROC ̲OBJ
PROCESS ̲TABLE (G ̲PROC).PROCESS ̲ID =
PROC ̲ID
PROCESS ̲TABLE (G ̲PROC).STATUS =
CREATED
PROCESS ̲TABLE (G ̲PROC).TYPE ̲OF ̲PROCESS =
PC.E ̲TYPE
PROCESS ̲TABLE (G ̲PROC).MAX ̲COUNT =
PC.MAX ̲COUNT
PROCESS ̲TABLE (G ̲PROC).SUBP ̲TYPE =
SUBP ̲TYPE
END ̲UPDATE ̲PROCESS ̲TABLE
Figure 4.2.9.4.6.5-4
PROCEDURE
CREATE ̲COPSY ̲CHILD ̲PROCESSES
VAR PTR ̲LOADED: BOOLEAN
BEGIN
SUBP ̲TYPE = COPSY ̲S
G ̲PROC = COPSY ̲P ̲NO
PTR ̲LOADED = FALSE
LOOP -SUBP ̲TYPE
SUBP ̲TYPE = SUBP ̲TYPE + 1
(SUBP ̲TYPE EQ MSO ̲S OR)
(SUBP ̲TYPE EQ MDCO ̲S) ?
PC = PROCESS ̲CONFIG (SUBP ̲TYPE)
NO ̲OF ̲PROC ̲IN ̲T = ((SUBP ̲TABLE (SUBP ̲TYPE).NO
̲OF ̲
SUBP ̲PR ̲SUBP ̲TYPE ̲1)
SUBP ̲TABLE (SUBP ̲TYPE).NO
̲OF ̲
SUBP ̲PR ̲PROCESS) + 1
NO ̲OF ̲PROC ̲IN ̲T LE 0?
SUBP ̲TYPE EQ CONFIG ̲SUBP?
ENTRY ̲PRINT = SAVED ̲ENTRY ̲POINT
SUBP ̲TYPE GE PTR ̲S AND
PTR ̲LOADED = TRUE ?
LOAD ̲SEGM(PROGRAM ̲SEG)(ENTRY ̲POINT)
SUBP ̲TYPE GE PTR ̲S? PTR ̲LOADED
= TRUE
(continued)
P = O
LOOP P
P = P + 1
G ̲PROC = G ̲PROC + 1
LOAD ̲SEGM (DATA ̲SEGM) (NIL)
LOAD ̲SEGM (PPS ̲SEGM) (NIL)
DETERMINE ̲SUBP ̲NOS ̲IN ̲PROCESS
SET ̲PCB ̲CONTENTS
CREATE ̲PROC
TMS ̲USER ̲ON
FMS ̲USER ̲ON
SET ̲SUBP ̲ATTR
UPDATE ̲PROCESS ̲TABLE
P EQ NO ̲OF ̲PROC ̲IN ̲T? EXIT
END ̲LOOP ̲P
SUBP ̲TYPE EQ TRC ̲PTOP ̲S? EXIT
END ̲LOOP ̲SUBP ̲TYPE
INITIALIZE.MIRRORED ̲DISUS ̲QUEUES
"restore user program segment)
G ̲PROC = CONFIG ̲G ̲PROC
PC = PROCESS ̲CONFIG ̲(CONFIG ̲SUBP)
LOAD ̲SEGM (RESTORE ̲SEG) (NIL)
END ̲CREATE ̲COPSY ̲CHILD ̲PROCESSES
Figure 4.2.9.4.6.5-5 (continued)…86…1 …02… …02… …02… …02… …02… …02… …02…
TMS ̲USER ̲ON
FMS ̲USER ̲NO
SET ̲SUBP ̲ATTR
UPDATE ̲PROCESS ̲TABLE
P EQ NO ̲OF ̲PROC ̲IN ̲T ? EXIT
END ̲LOOP ̲P
SUBP ̲TYPE EQ TRC ̲PTOP ̲S ? EXIT
END ̲LOOP ̲SUBP ̲TYPE
INITIALIZE ̲MIRRORED ̲DISKS ̲QUEUES
"restore user program segment
G ̲PROC = CONFIG ̲G ̲PROC
SUBP ̲TYPE = CONFIG ̲SUBP
PC = PROCESS ̲CONFIG(CONFIG ̲SUBP)
LOAD ̲SEGM(RESTORE ̲SEG) (NIL)
END ̲CREATE ̲COPSY ̲CHILD ̲PROCESS
Figure 4.2.9.4.6.5-5
PROCEDURE
DETERMINE ̲SUBP ̲NOS ̲IN ̲PROCESS
VAR NO ̲IN ̲P, NO ̲IN ̲T : INTEGER
BEGIN
FIRST = SUBP ̲TABLE (SUBP ̲TYPE).FIRST ̲SUBP ̲NO
NO ̲IN ̲P = SUBP ̲TABLE (SUBP ̲TYPE).NO ̲OF ̲SUBP ̲IN
̲PROCESS
NO ̲IN ̲T = SUBP ̲TABLE (SUBP ̲TYPE).NO ̲OF ̲SUBP ̲PR
̲SUBP ̲TYPE
SUBP ̲TYPE EQ USER ̲S ?
FIRST=FIRST ̲VDU ̲NO+P-1
NO ̲OF ̲MSOS GT P ? NO = O
NO = FIRST ̲MSO ̲NO+P-1
NO ̲OF ̲MDCOS GT P ? ̲MDCO ̲S ̲NO = O
MDCO ̲S ̲NO = FIRST ̲MDCO ̲NO + P - 1
FIRST = FIRST + (P-1) * NO ̲IN ̲P
P * NO ̲IN ̲P LE NO ̲IN ̲T ? NO = NO ̲IN ̲P
NO = NO ̲IN ̲T - MODULD NO ̲IN ̲P
MDCO ̲S ̲NO = O
END ̲DETERMINE ̲SUBP ̲NOS ̲IN ̲PROCESS
Figure 4.2.9.4.6.5-6
PROCEDURE
SET ̲PCB ̲CONTENTS
BEGIN
PC.P ̲C ̲B. REGISTERS (O) = START ̲UP ̲ACTIVE ̲TYPE
̲D
PC.P ̲C ̲B. REGISTERS (1) = SUBP ̲TYPE
PC.P ̲C ̲B. REGISTERS (2) = FIRST
PC.P ̲C ̲B. REGISTERS (3) = NO
PC.P ̲C ̲B. REGISTERS (4) = MDCO-S-NO
PC.P ̲C ̲B. REGISTERS (7) = G-PROC
PC.P ̲C ̲B. PS = PROCESS ̲TABLE (G ̲PROC). PS ̲OBJ
PC.P ̲C ̲B. DS = PROCESS ̲TABLE (G ̲PROC). DS ̲OBJ
PC.P ̲C ̲B. PPS= PROCESS ̲TABLE (G ̲PROC). PPS ̲OBJ
PC.P ̲C ̲B. SYNCH = PSE
PC.P ̲C ̲B. ENTRY ̲POINT = ENTRY ̲POINT
PC.UGI = G ̲PROC
PC.LOW ̲UGI = 0
PC.HIGH ̲UGI = 0
PC.PROGRAM ̲START = NIL
END ̲SET ̲PCB ̲CONTENTS
Figure 4.2.9.4.6.5-7…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
CREATE ̲PROC
BEGIN
CASE CREATE ̲PROCESS (PC.P ̲C ̲B, PC.RESOURCES)
(PROC ̲OBJ, PROC ̲ID, CC) OF
ERROR? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
END ̲CREATE ̲PROC
Figure 4.2.9.4.6.5-8…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
TMS ̲USER ̲ON
VAR TMS ̲PAR : USER ̲ON ̲PARAMS
BEGIN
(SUBP ̲TYPE EQ CMI ̲S OR) ?
(SUBP ̲TYPE GE SUPV ̲S )
TMS ̲PAR.USER.USER ̲GROUP = G.PROC
TMS ̲PAR.USER.SEQ ̲NBR = PROC ̲ID
TMS ̲PAR.USER ̲KIND = USER ̲ORDINARY
TMS ̲PAR.RESOURCES = PC.TMS ̲RESOURCE ̲SPEC
TMS ̲PAR.NAME = 'TMS ̲USER ̲XYZ'
XYZ = G ̲PROC Converted to three ASCII
characters
CASE USER ̲ON (TMS ̲ID, TMS ̲PAR) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC,O)
END ̲CASE
END ̲TMS ̲USER ̲ON
FIGURE 4.2.9.4.6.5-9…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
SET ̲SUBP ̲ATTR
BEGIN
PC.ATTRIBUTE.PROCESS = PROC ̲ID
SUBP ̲TYPE EQ USERS ?
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (FIRST, PC.
ATTRIBUTES)(CC) OF
ERROR ? ANALYZE ̲ERROR (CC,O)
END ̲CASE
NO ̲OF ̲MSOS GT P ?
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (NO, PROCESS
̲CONF (MSO ̲S).ATTRIBUTES) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC,0)
END ̲CASE
NO ̲OF ̲MDCOS GT P ?
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (NO, PROCESS
̲CONF (MDCO ̲S) ATTRIBUTES) (CC) OF
ERROR ? ANALYZE ERROR (CC, O)
END CASE
I = -1
LOOP
…02… I = I + 1
CASE CHANGE ̲SUBPROCESS ̲ATTRIBUTES (FIRST +I,
PC.
ATTRIBUTES) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC)
END ̲CASE
Figure 4.2.9.4.6.5-10 (continued)…86…1 …02… …02… …02… …02… …02… …02… …02…
I EQ NO-1 ? EXIT
END ̲LOOP
END ̲SET ̲SUBP ̲ATTRIBUTES
Figure 4.2.9.4.6.5-10…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
TRACE ̲ACTION
VAR G ̲PROC : 1..NO ̲OF ̲PROCESSES
VAR PARAMS : USER ̲ON ̲PARAMS
BEGIN
G ̲PROC = COPSY ̲P ̲NO-1
LOOP
G ̲PROC = G ̲PROC + 1
PROCESS ̲TABLE (G ̲PROC).STATUS EQ CREATED ̲FMS
̲ON ?
PARAMS.USER.USER ̲GROUP = G ̲PROC
PARAMS.USER.SEQ ̲NBR = PROCESS ̲TABLE (G ̲PROC).PROC
̲ID
PARAMS.USER ̲KIND = USER ̲ORDINARY
PARAMS.RESOURCES = TRACE ̲FMS ̲RESOURCES
PARAMS.NAME = TRACE "G ̲PROC"
CASE USER ̲ON (FMS ̲MOVING, PARAMS) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC, 0)
END CASE
PROCESS ̲TABLE (G ̲PROC). STATUS=CREATED ̲FMS
̲ON
PROC EQ NO ̲OF ̲PROCESSES ? EXIT
END ̲LOOP
END ̲TRACE ̲ACTION
Figure 4.2.9.4.6.5-l1…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
FMS ̲USER ̲ON
VAR FMS ̲PAR: USER ̲ON ̲PARAMS
BEGIN
PC.FIXED ̲USED EQ FALSE?
FMS ̲PAR.USER.USER ̲GROUP = G ̲PROC
FMS ̲PAR.USER.SEQ ̲NBR = PROC ̲ID
FMS ̲PAR.USER.USER ̲KIND = USER ̲ORDINARY
FMS ̲PAR.RESOURCES = PC.FMS ̲FIXED ̲RESOURCES
FMS ̲PAR.NAME = ' FMS ̲USER ̲XYZ'
"XYZ is G ̲PROC converted to ASCII
CASE USER ̲ON (FMS ̲FIXED, FMS ̲PAR) OF
ERROR? ANALYZE ̲ERROR (CC,0)
END CASE
PC.MOVING ̲USED EQ FALSE?
FMS ̲PAR.USER.USER ̲GROUP = G ̲PROC
FMS ̲PAR.USER.SEQ ̲NBR = PROC ̲ID
FMS ̲PAR.USER.USER ̲KIND = USER ̲ORDINARY
FMS ̲PAR.RESOURCES = PC.FMS ̲MOVING ̲RESOURCES
FMS ̲PAR.NAME = 'FMS ̲USER ̲XYZ'
CASE USER ̲ON (FMS ̲MOVING, FMS ̲PAR) OF
ERROR? ANALYZE ̲ERROR (CC,0)
END ̲CASE
PROCESS ̲TABLE (G ̲PROC).STATUS = CREATED
̲FMS ̲ON
END ̲FMS ̲USER ̲ON
4.2.9.4.7 C̲R̲E̲A̲T̲E̲ ̲E̲N̲V̲I̲R̲O̲N̲M̲E̲N̲T̲
4.2.9.4.7.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The functional specification is divided into
the areas:
- creation of COPSY specific sync.els and segments
- handle inherit of objects
- initialization of the TMP and CSF specific
environment
- initialization of the TMP and CSF load tables
- initialization of own tables.
a) C̲r̲e̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲C̲O̲P̲S̲Y̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲ ̲s̲y̲n̲c̲.̲e̲l̲s̲
The following COPSY sync. elements and segments
are created
- parent synchronization element (PSE) to
be specified in CREATE ̲PROCESS (DAMOS.PMD
command) is created. The PSE is used to
send clean-up and retire reports for for
a COPSY child process.
- device status synchronization element (DSSE)
to be specified in TMS and FMS ASSIGN and
CREATE ̲SUBDEVICE calls. The DSSE is used
to receive asynchroneous reports for a
"device"
b) H̲a̲n̲d̲l̲e̲ ̲i̲n̲h̲e̲r̲i̲t̲ ̲o̲f̲ ̲o̲b̲j̲e̲c̲t̲s̲
The CREATE ̲ENVIRONMENT module creates the objects
to be inherited to COPSY child process
An inherit list contains a number of objects
and associated functional capabilities to be
given to a child
The inherit list is copied into the PPS at the base
for the childs object descriptor table by the LOAD
SEGMENT module
The inherit list contains
- synchronization elements
- memory segments
- CPU pools
COPSY and a COPSY childs inherits the objects specified
in figure 4.2.9.4.7.1-1
TMP and CSF inherits in addition to these:
- all MMON ̲RSE (CSF)
- all TMP-RSE (TMP)
- all child data segments (TMP)
FMS ̲MOVING sync.el (s)
FMS ̲FIXED sync.el (s)
TMS sync.el (s)
CESE
CPU ̲POOL ̲1 sync.els(s)
.
.
From TMON ̲SE
ROOT
CSF ̲REPORT ̲SE
CSF ̲SAVE ̲SE
CSF ̲RTC ̲SE
TMP ̲SEARCH ̲SE
TMP ̲UPDATE ̲SE
STP ̲RESERVATION ̲SE
SYSE
Created MMON ̲RSE
by QMON ̲RSE
CFH…02… TMP ̲RSE
COMON ̲SEGM
From
ROOT TMP ̲SHARED ̲SEGM
CSF ̲SHARED ̲SEGM
Figure 4.2.9.4.7.1-1
Common Environment for COPSY
and
COPSY child processes…86…1 …02… …02…
…02… …02… …02… …02… …02…
The CREATE ̲ENVIRONMENT Module creates per child
process the reply synchronization elements:
- MMON ̲RSE
- QMON ̲RSE
- TMP ̲RSE
and
…02……02……02…- a program segment (PS)
- a data segment (DS)
- a protected parameter segment (PPS)
The corresponding objects are saved in the PROCESS
̲TABLE.
The remaining inherit list objects are created
by ROOT and inherited to COPSY, which again inherits
them to its child processes.
The QMON ̲RSEs are cataloged under the name:
- QMON "PROC ̲NO", where "PROC ̲NO" is the CAMPS
process no converted to ASCII characters.
c) I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲t̲h̲e̲ ̲T̲M̲P̲ ̲a̲n̲d̲ ̲C̲S̲F̲ ̲s̲p̲e̲c̲i̲f̲i̲c̲ ̲e̲n̲v̲i̲r̲o̲n̲m̲e̲n̲t̲
TMP inherits the
- TMP ̲RSEs
- DS s
and CSF inherits the
- MMON ̲RSE s.
for COPSY and all COPSY child processes.
The inherit tables are defined in section 4.2.9.5
(CFH ̲INHERIT data)
d) I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲T̲M̲P̲ ̲a̲n̲d̲ ̲C̲S̲F̲ ̲l̲o̲a̲d̲ ̲t̲a̲b̲l̲e̲s̲
The CREATE ̲ENVIRONMENT module updates two-load
tables (in the CONFIG segment):
- TMP ̲LOAD TABLE, which
per subprocess No defines the entries in the future
TMP
object descriptor table for the corresponding
TMP ̲RSE and
DS.
- CSF ̲LOAD ̲TABLE, which
per subprocess No defines the entry in the future
CSF
object description table for the corresponding
MMON ̲RSE
e) I̲n̲i̲t̲i̲a̲l̲i̲z̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲o̲w̲n̲ ̲t̲a̲b̲l̲e̲s̲
The SUBP ̲PROCESS table, which describes a subprocess
No to process No relation is initialized.
The MMON ̲RSE table, which defines a subprocess
No to MMON ̲RSE relation is initialized
4.2.9.4.7.2 M̲o̲d̲u̲l̲e̲ ̲In̲t̲e̲r̲f̲a̲c̲e̲ ̲De̲f̲i̲n̲i̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) CREATE ̲ENVIRONMENT (LOAD ̲IN: LOAD ̲IN ̲TYPE)
(CONFIG ̲OBJ: FDCB ̲INDEX)
b) CREATE ̲ENVIRONMENT (RO, R5, R7)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
RO Pointer LOAD ̲IN
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲r̲e̲g̲i̲s̲t̲e̲r̲s̲
R7 CONFIG ̲OBJ
RO R6 (destr)…86…1 …02… …02… …02… …02… …02… …02…
…02…
4.2.9.4.7.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The Create ̲environment module contains/references
the procedures/modules specified in figure
4.2.9.4.7.3-1
a) C̲R̲E̲A̲T̲E̲ ̲E̲N̲V̲I̲R̲O̲N̲M̲E̲N̲T̲
The procedure requests creation of
- CONFIG segment
- DEVICE SE
- PSE
The procedure contains 3 loops:
- outer loop
scans through all COPSY child subprocess
types
- middle loop
Scans through all processes within a given
subprocess
type.
- inner loop
Scans through all subprocesses within a given
process
within a given subprocess type
The procedure call various procedures as will
be defined overleaf
The procedure updates the
- SUBP ̲PROCESS table
b) C̲R̲E̲A̲T̲E̲ ̲D̲E̲V̲I̲C̲E̲ ̲S̲E̲ ̲P̲S̲E̲
Creates the
- DEVICE SE and
- PSE
synchronization elements
Figure 4.2.9.4.7.3-1
c) C̲R̲E̲A̲T̲E̲ ̲S̲E̲G̲M̲E̲N̲T̲
Creates a Memory segment
d) C̲R̲E̲A̲T̲E̲ ̲S̲Y̲N̲C̲ ̲E̲L̲
Creates a synchronization element.
e) C̲A̲T̲A̲L̲O̲G̲ ̲Q̲M̲O̲N̲ ̲R̲S̲E̲
Enters a name for a QMON reply synchronization
element into an object directory.
The name entered is
- QMON SEQ ̲NO
where SEQ ̲NO is the process number for the
process using the sync el.
The sync.el. is protected by setting the public
capabilities to
- protected access capabilities
f) C̲R̲E̲A̲T̲E̲ ̲S̲A̲V̲E̲ ̲O̲B̲J̲E̲C̲T̲S̲
The procedure is invoked per COPSY child process
to create:
- MMON ̲RSE
- QMON ̲RSE
- TMP ̲RSE
- a program segment
- a data segment
- a PPS segment
The PTR, PTP, NICS ̲TARE, SCARS ̲CCIS, TRC ̲PTOP
processes share the same program segment.
The object indexes received are saved in the
- PROCESS ̲TABLE
g) D̲E̲T̲E̲R̲M̲I̲N̲E̲ ̲I̲N̲H̲ ̲N̲O̲S̲
Determines entries in the
- CSF ̲ENVIRONMENT
-TMP ̲ENVIRONMENT
tables, where the above created
- data segment
- TMP ̲RSE
- MMON ̲RSE
are to be placed.
h) S̲E̲T̲ ̲I̲N̲H̲ ̲L̲I̲S̲T̲S̲
Inserts the
- data segment
- TMP ̲RSE
- MMON ̲RSE
object indexes into the
CSF/TMP environment tables
Also the capacities for CSF/TMP to the object
are set
i) U̲S̲E̲R̲ ̲H̲A̲N̲D̲L̲E̲
MSO and MDCO subprocess are handled explicitly
as
- USER
- MSO
- MDCO
subprocesses are running in one process.
j) S̲E̲T̲ ̲L̲O̲A̲D̲ ̲T̲A̲B̲L̲E̲S̲
The TMP ̲LOAD ̲TABLE is updated. It contains
a subprocess no to corresponding
- TMP ̲RSE inherit no
- data segment inherit no
relation
The CSF ̲LOAD ̲TABLE is updated. It contains
a subprocess no to corresponding
- MMON ̲RSE inherit no
relation
The MMON ̲RSE ̲TABLE is updated. It contains
a subprocess no to corresponding
- MMON ̲RSE object index
relation…86…1 …02… …02… …02… …02… …02… …02…
…02…
4.2.9.4.7.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
LOAD ̲IN ̲TYPE : CFH.VARIOUS
SUBPROCESS ̲TYPE,
MSO-S, MDCO ̲S, USER ̲S, TRC ̲PTOP ̲S, COPSY ̲S:
DBD
PROTECTED ̲INFO, PROTECTED ̲SEMA
SEGMENT ̲ATTR ̲TYPE
OBJ ̲INDEX,
CREATE ̲SYNS ̲PARAMS,
PUBLIC,
PROTECTED ̲ACCESS ̲CAP,
FDCB ̲INDEX,
LPN : DAMOS
a2) C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
COPSY ̲P ̲NO,
COPSY ̲NO
NO ̲OF ̲MSOS, FIRST ̲MSO ̲NO,
NO ̲OF ̲MDCOS, FIRST ̲MDCO ̲NO : DBD
GLOBAL ̲INH ̲SIZE
PROCESS ̲INH ̲SIZE,
DS ̲CV,
SYNC ̲EL ̲CV : CFH.VARIOUS
a3) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
DEVICE ̲SE,
PSE : SSC.COMMON
a4) T̲a̲b̲l̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PROCESS ̲TABLE (M)
SUBP ̲PROCESS ̲TABLE (M) : SSC.COMMON
TMP ̲ENVIRONMENT (M)
CSF ̲ENVIRONMENT (M) :CFH.INHERIT
TMP ̲LOAD ̲TABLE (M),
CSF ̲LOAD ̲TABLE (M) :DBD
MMON-RSE ̲TABLE (M), : SSC.COMMON
SEGM ̲CONFIG : CFH.VARIOUS
b) E̲x̲t̲e̲r̲n̲a̲l̲
All entries in the tables references are updated.
For the PROCESS ̲TABLE the entries updated are
specified via the
INH ̲OBJS type.
The SEGM ̲CONFIG table is only read.
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR G ̲PROC: COPSY ̲P ̲NO ̲NO ̲OF ̲PROCESSES
A CAMPS global process number
VAR SUBP ̲TYPE: SUBPROCESS ̲TYPE
VAR G ̲SUBP: 1..NO ̲OF ̲SUBPROCESSES
A CAMPS global subprocess number
Var NO ̲OF ̲PROC ̲IN ̲T : INTEGER
Specifies the number of processes within a
given subprocess type
VAR P: 1..NO ̲OF ̲PROCS ̲IN ̲IT
Specifies a process within a subprocess type
VAR NO ̲OF ̲SUBP ̲IN ̲P : INTEGER
Specifies the number of subprocesses of a given
type in a given process
VAR S : 1..NO ̲OF ̲SUBP ̲IN ̲P
Specifies a subprocess within a process
VAR CC: INTEGER
VAR SYNC ̲PARAMS: CREATE ̲SYNC ̲PARAMS
VAR RESET ̲CV, SET ̲CV, NEW ̲CV : INTEGER
Contains capability sectors.
VAR MMON ̲OBJ, QMON ̲OBJ, TMP ̲OBJ, PS ̲OBJ, DS
̲OBJ, PPS ̲OBJ: OBJECT ̲INDEX
Contains an object index for the
- MMON RSE
- QMON RSE
- TMP RSE
- Program segment
- Data segment
- PPS segment
respectively…86…1 …02… …02… …02… …02… …02… …02…
…02…
VAR DS ̲INH ̲NO, TMP ̲INH ̲NO, MMON ̲INH ̲NO: INTEGER
specifies entries in the TMP/CSF inheritance
tables
4.2.9.4.7.5 D̲e̲s̲i̲g̲n̲
The CREATE ̲ENVIRONMENT procedures are specified
by means of the flowgrams given overleaf.
PROCEDURE CREATE ̲ENVIRONMENT (LOAD ̲IN:LOAD ̲IN ̲TYPE)
(CONFIG ̲OBJ: FDCB ̲INDEX)
BEGIN
CREATE ̲CONFIG ̲SEGM ̲DEVICE ̲SE ̲PSE
G ̲PROC = COPSY ̲P ̲NO
SUBP ̲PROCESS ̲TABLE (COPSY NO) = COPSY ̲P ̲NO
G ̲SUBP = 1
SUBP ̲TYPE = COPSY ̲S
LOOP ̲SUBP ̲TYPE
SUBP ̲TYPE = SUBP ̲TYPE + 1
SUBP ̲TYPE EQ MSO ̲S OR
SUBP ̲TYPE EQM DCO ̲S ?
G ̲SUBP=G ̲SUBP+NO ̲OF ̲MSOS + NO ̲OF
̲MDCOS
NO ̲OF ̲PROCS ̲IN ̲T = ((SUBP ̲TABLE (SUBP ̲TYPE).
NO ̲OF ̲SUBP ̲PR ̲SUBP ̲TYPE-1)
/
SUBP ̲TABLE (SUBP ̲TYPE).NO
̲
OF ̲SUBP ̲PR ̲PROCESS)
+ 1
P = O
LOOP ̲P
P = P+1, G ̲PROC = G ̲PROC +1
NO ̲OF ̲SUBP ̲IN ̲P = SUBP ̲TABLE (SUBP ̲TYPE).
NO ̲OF ̲SUBP ̲PR ̲PROCESS
CREATE ̲SAVE ̲OBJECTS
DETERMINE ̲INH ̲NOS
SET ̲INH ̲LISTS
Figure 4.2.9.4.7.5-1 (continued)
S = O
LOOP ̲S
S=S+1, G ̲SUBP = G ̲SUBP+1
SUBP ̲PROCESS ̲TABLE (G ̲SUBP) = G ̲PROC
SUBP ̲TYPE EQ USER ̲S ? USER ̲HANDLE
SET ̲LOAD ̲TABLES (G ̲SUBP, SUBP ̲TYPE)
S EQ NO ̲OF ̲SUBP ̲IN ̲P ? EXIT
END ̲LOOP ̲S
P EQ NO ̲OF ̲PROC ̲IN ̲T ? EXIT
END ̲LOOP ̲P
SUBP ̲TYPE EQ TRC ̲PROP ̲S ? EXIT
END ̲LOOP ̲SUBP ̲TYPE
END
Figure 4.2.9.4.7.5-1
PROCEDURE
CREATE ̲DEVICE ̲SE ̲PSE
BEGIN
CREATE ̲SYNC ̲EL (PROTECTED ̲INFO) (DEVICE ̲SE)
CREATE ̲SYNC ̲EL (PROTECTED ̲INFO) (PSE)
END
Figure 4.2.9.4.7.5-2
PROCEDURE
CREATE ̲SEGMENT (PARAMS: SEGMENT ̲ATTR ̲TYPE) (OBJ:OBJ
̲INDEX)
VAR CC : INTEGER
BEGIN
CASE CREATE ̲SEGMENT (PARAMS) (OBJ, CC) OF
ERROR ? ANALYZE ERROR (CC, 0)
END ̲CASE
END
Figure 4.2.9.4.7.5-3…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
CREATE ̲SYNC ̲EL (SYNC ̲USE: PROTECTED ̲INFO..PROTECTED
SEMA)
(SYNC ̲EL : OBJ ̲INDEX)
VAR SYNC ̲PARAMS : CREATE ̲SYNC ̲PARAMS
BEGIN
SYNC ̲PARAMS.PROFILE = O " security profile
SYNC ̲PARAMS.SUBTYPE = SYNC ̲USE
SYNC ̲PARAMS.LEVEL = 8 " object level
SYNC ̲PARAMS.IVAL = O " initial semaphore value
CASE CREATE ̲SYNC ̲EL (SYNC ̲PARAMS) (SYNC ̲EL, CC)
ERROR ? ANALYZE ̲ERROR (CC,0)
END ̲CASE
END ̲CREATE ̲SYNC ̲EL
Figure 4.2.9.4.7.5-4…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
CATALOG ̲QMON ̲SE (SYNC ̲EL : OBJ ̲INDEX, SEQ ̲NO: 1..255)
VAR RESET ̲CV, SET ̲CV, NEW ̲CV, CC: INTEGER
BEGIN
CASE CATALOG (SYNC ̲EL, "QMON SEQ ̲NO ") (CC)
OF
ERROR ? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
RESET ̲CV = FFFF
SET ̲CV = PROTECTED ̲ACCESS ̲CAP
CASE UPDATE ̲CAPABILITIES (SYNC ̲EL, PUBLIC, RESET
̲CV,
SET ̲CV) (NEW ̲CV, CC)
OF
ERROR? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
END ̲CATALOG ̲QMON ̲SE
Figure 4.2.9.4.7.5-5
PROCEDURE
CREATE ̲SAVE ̲OBJECTS
VAR MMON ̲OBJ, QMON ̲OBJ, TMP ̲OBJ, PS ̲OBJ, DS ̲OBJ, PPS
̲OBJ : OBJ ̲INDEX
BEGIN
CREATE ̲SYNC ̲EL (PROTECTED ̲INFO) (MMON ̲OBJ)
CREATE ̲SYNC ̲EL (PROTECTED ̲SEMA) (QMON ̲OBJ)
CATALOG ̲QMON ̲SE (QMON ̲OBJ, G ̲PROC)
CREATE ̲SYNC ̲EL (PROTECTED ̲INFO) (TMP ̲OBJ)
SUBP ̲TYPE GT PTR ̲S ?
CREATE ̲SEGMENT(PROCESS ̲CONF(SUBP ̲TYPE).PS ̲PARAMS)
(PS ̲OBJ)
CREATE ̲SEGMENT(PROCESS ̲CONF(SUBP ̲TYPE).DS ̲PARAMS)
(DS ̲OBJ)
CREATE ̲SEGMENT(PROCESS ̲CONF(SUBP ̲TYPE).PPS ̲PARAMS)
(PPS ̲OBJ)
"save objects in process table
PROCESS ̲TABLE (G ̲PROC). MMON ̲RSE = MMON ̲OBJ
PROCESS ̲TABLE (G ̲PROC). QMON ̲RSE = QMON ̲OBJ
…02… PROCESS ̲TABLE (G ̲PROC). TMP ̲RSE = TMP ̲OBJ
PROCESS ̲TABLE (G ̲PROC). PS ̲OBJ = PS ̲OBJ
PROCESS ̲TABLE (G ̲PROC). DS ̲OBJ = DS ̲OBJ
PROCESS ̲TABLE (G ̲PROC). PPS ̲OBJ = PPS ̲OBJ
END ̲CREATE ̲SAVE ̲OBJECTS
Figure 4.2.9.4.7.5-6
PROCEDURE
DETERMINE ̲INH ̲NOS
VAR DS ̲INH ̲NO, TMP ̲INH ̲NO, MMON ̲INH ̲NO: INTEGER
BEGIN
DS ̲INH ̲NO = GLOBAL ̲INH ̲SIZE + G ̲PROC
TMP ̲INH ̲NO =DS ̲NO + PROCESS ̲INH ̲SIZE
MMON ̲INH ̲NO = DS ̲NO
END
Figure 4.2.9.4.7.5-7…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
SET ̲INH ̲LISTS
BEGIN
TMP ̲ENVIRONMENT.ELEMS (DS ̲INH ̲NO).INDEX = DS ̲OBJ
TMP ̲ENVIRONMENT.ELEMS (DS ̲INH ̲NO).CV = DS-CV
TMP ̲ENVIRONMENT.ELEMS (TMP ̲INH ̲NO).INDEX = TMP
̲OBJ
TMP ̲ENVIRONMENT.ELEMS (TMP ̲INH ̲NO).CU = SYNC
̲EL ̲CV
CSF ̲ENVIRONMENT.ELEMS (MMON ̲INH ̲NO)INDEX = MMON
̲OBJ
CSF ̲ENVIRONMENT.ELEMS (MMON ̲INH ̲NO).CV = SYNC
̲EL ̲CV
END ̲SET ̲INH ̲LISTS
Figure 4.2.9.4.7.5-8…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
USER ̲HANDLE
BEGIN
NO ̲OF ̲MSOS LE P ?
SET ̲LOAD ̲TABLES (FIRST ̲MSO ̲NO+P-1, MSO ̲S)
SUBP ̲PROCESS ̲TABLE (FIRST ̲MSO ̲NO+P-1) = G
̲PROC
NO ̲OF ̲MDCOS LE P ?
SET ̲LOAD ̲TABLES (FIRST ̲MDCO ̲NO+P-1, MDCO ̲S
SUBP ̲PROCESS ̲TABLE (FIRST ̲MDCO ̲NO +P-1) = G
̲PROC
END
Figure 4.2.9.4.7.5-9…86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
SET ̲LOAD ̲TABLES (G ̲SUBP: 1..NO ̲OF ̲SUBPROCESSES, SUBP
̲TYPE:
SUBPROCESS ̲TYPE)
BEGIN
TMP ̲LOAD ̲TABLE (G ̲SUBP).TMP ̲RSE ̲INH ̲NO = TMP ̲INH
̲NO
TMP ̲LOAD ̲TABLE (G ̲SUBP).DS ̲INH ̲NO = DS ̲INH
̲NO
TMP ̲LOAD ̲TABLE (G ̲SUBP).DS ̲SIZE = DS ̲SIZE
TMP ̲LOAD TABLE (G ̲SUBP).SUBP ̲TYPE = SUBP ̲TYPE
MMON ̲RSE ̲TABLE (G ̲SUBP) = MMON ̲OBJ
CSE ̲LOAD ̲TABLE (G ̲SUBP) = MMON ̲INH ̲NO
END ̲SET ̲LOAD ̲TABLES
Figure 4.2.9.4.7.5-10…86…1 …02… …02… …02… …02… …02… …02… …02…
4.2.9.4.8 I̲N̲I̲T̲I̲A̲L̲I̲Z̲E̲ ̲M̲I̲R̲R̲O̲R̲E̲D̲ ̲D̲I̲S̲K̲S̲
4.2.9.4.8.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The module functions are divided into
- creation of files on the mirrored disks
- load of files
a) C̲r̲e̲a̲t̲i̲o̲n̲ ̲o̲f̲ ̲f̲i̲l̲e̲s̲ ̲o̲n̲ ̲t̲h̲e̲ ̲m̲i̲r̲r̲o̲r̲e̲d̲ ̲d̲i̲s̲k̲s̲
For the active PU start-up types:
- dead 1
- dead 2
CFH creates all
- directories and
- files
on the
- MIR ̲MOVING volume and on the
-MIR ̲FIXED volume
CFH names files if specified and enters these
into a specified directory. Named files are
protected i.e. the processes, which can use
the file and the access rights for the processes
are specified.
The creation of files is based upon the
- MIRRORED DISK CONF
configuration data in the CONFIG segment
Files are either created directly in the ROOT
directory (refer figure 4.2.9.4.8.1-1) or in
a user directory in the ROOT directory.
b) L̲o̲a̲d̲ ̲o̲f̲ ̲f̲i̲l̲e̲s̲
The loadfiles used for system start-up are
(in dead 1/2 start-up) copied to the corresponding
files on the mirrored disks.
Also the format files are copied.
Figure 4.2.9.4.8.1-1
4.2.9.4.8.2 I̲n̲t̲e̲r̲f̲a̲c̲e̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) INITIALIZE ̲MIRRORED ̲DISKS (PTR:LPN)
b) INITIALIZE ̲MIRRORED ̲DISKS (RO, R6)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
RO PTR of logical page no type (0..63)
R6 link
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R0-R7 (destr)
4.2.9.4.8.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The Initialize-mirrored-disks module contains/references
the procedure specified in figure 4.2.9.4.8.3-1
a) I̲N̲I̲T̲I̲A̲L̲I̲Z̲E̲ ̲M̲I̲R̲R̲O̲R̲E̲D̲ ̲D̲I̲S̲K̲S̲
The procedure dispatches to procedures handling
- initialization of the mirrored disks fixed
head part
- initialization of the mirrored disks moving
head part
- copying of start up software
The procedures are given a pointer to configuration
parameters in a data area in the CONFIG segment.
The disks are only initialized, if the start-up
type is dead 1 or dead 2.
Figure 4.2.9.4.8.3-1
b) I̲N̲I̲T̲I̲A̲L̲I̲Z̲E̲ ̲M̲I̲R̲R̲O̲R̲E̲D̲ ̲V̲O̲L̲U̲M̲E̲
The procedure scans the MIRRORED ̲DISKS ̲CONF
configuration data for a single volume and
invoke the CREATE ̲ENTER ̲PROJECT procedure for
each file recognized.
The data describes:
- the files to be created and inserted directly
in the
ROOT directory. For each file is specified
a name and
a protect list defining
- users of the file
- access rights of the users
- a number of directories to be created and
inserted in
the ROOT directory
For each directory is specified a number
of files
to be created and entered into the directory.
Also,
a protect list per file is specified
The procedure dismantles the created files
after insertion in a directory (thereby the
file is permanent)
c) C̲R̲E̲A̲T̲E̲ ̲E̲N̲T̲E̲R̲ ̲P̲R̲O̲J̲E̲C̲T̲
The procedure creates a single file, enters
it into a directory and protects the file (specifies
user processes/access rights)
d) C̲O̲P̲S̲Y̲ ̲S̲T̲A̲R̲T̲ ̲U̲P̲ ̲S̲W̲
Copies the start-up software i.e.
- the bootfile
- the application load files
- the patchfiles
from the offline disk to the mirrored disk.
The directory/file structure for the above
files is identical on the office disk and
on the mirrored disks.
Also, the format files are copied.
4.2.9.4.8.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
ACCESS ̲DESCRIPTION,
FDCB ̲INDEX,
FILE ̲SYSTEM ̲NAME DAMOS
DEAD 1, DEAD 2 DBD
VOLUME ̲DESCR,
DIRECTORY ̲LIST,
CREATE ̲LIST,
CREATE ̲SINGLE;
PROTECT ̲LIST: CFH.CONFIG
a2) C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
FMS ̲FIXED,
FMS ̲MOVING,
SYS ̲GEN,
MIR ̲MOVING,
MIR ̲FIXED
SSC ̲DIR ̲MODIFIED,
SSC ̲DIR ̲INITIAL : DBD
SSC.COMMON
MAX ̲LOAD ̲FILES ...CFH.LOAD
MAX ̲PATCH ̲FILES: SSC.COMMON
MAX ̲FORMAT ̲FILES CFH.LOAD
a3) D̲a̲t̲a̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
START ̲UP ̲TYPE ̲D,
LOAD ̲SW ̲TYPE: CFH.VARIOUS
a4) T̲a̲b̲l̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
INIT ̲Q ̲DATA
MIRRORED ̲DISKS ̲CONF: CFH.CONFIG
LOAD ̲FILE ̲LIST,
PATCH ̲FILE ̲LIST
FORMAT ̲NAME ̲LIST: CFH.LOAD
SUBP ̲PROCESS ̲TABLE,
PROCESS ̲TABLE (M) : SSC.COMMON
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
The entries in the tables references are read.
For the process table only the status field
is updated.
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR MIR ̲FIXED ̲ROOT ̲DIR, MIR ̲MOVING ̲ROOT ̲DIA:
FDCB ̲INDEX
VAR FILE, OWN ̲DIR: FDCB ̲INDEX
VAR START ̲UP ̲ROOT ̲DIR, FM ̲DIR, TO ̲DIR: FDCB
̲INDEX
VAR Q ̲NO, COUNT, FIRST: INTEGER
4.2.9.4.8.5 D̲e̲s̲i̲g̲n̲
PROCEDURE
INITIALIZE ̲MIRRORED ̲DISKS
VAR MIR ̲FIXED ̲ROOT ̲DIR, MIR ̲MOVING ̲ROOT ̲DIR: FDCB ̲INDEX
BEGIN
(START ̲UP ̲TYPE ̲D NE DEAD 1 and ) ?
(START ̲UP ̲TYPE ̲D NE DEAD 2 ) ?
"initialize the fixed head volume
GET ̲ROOT ̲FIX (MIR ̲FIXED)(MIR ̲FIXED ̲ROOT ̲DIR)
INITIALIZE ̲MIRRORED ̲VOLUME (FMS ̲FIXED, MIR ̲FIXED
̲ROOT ̲DIR, MIRRORED ̲DISKS ̲CONF.FIXED ̲VOL ̲CONF)
"initialize the moving head volume
GET ̲ROOT ̲MOV (MIR ̲MOVING) (MIR ̲MOVING ̲ROOT ̲DIR)
INITIALIZE ̲MIRRORED ̲VOLUME (FMS ̲MOVING, MIR ̲MOVING
̲ROOT ̲DIR, MIRRORED ̲DISKS ̲CONF.MIR ̲VOL ̲CONF)
COPY ̲START ̲UP ̲SOFTWARE
END ̲INITIALIZE ̲MIRRORED ̲DISKS
Figure 4.2.9.4.8.5-1 …86…1 …02… …02… …02… …02… …02… …02… …02…
PROCEDURE
INITIALIZE ̲MIRRORED ̲VOLUME (FMS: FILE ̲SYSTEM ̲NAME,
MIR ̲ROOT ̲DIR: FDCB ̲INDEX, VOL ̲CONF: VOLUME ̲DESCR)
VAR FILE, OWN ̲DIR: FDCB ̲INDEX
BEGIN
FILE ̲NO = 0
LOOP "create files directly in the ROOT directory
FILE ̲NO = FILE ̲NO + 1
FILE ̲NO GT VOL ̲CONF.FILES ̲IN ̲ROOT.MAX ̲TD ̲CREATE
?
EXIT
CREATE ̲ENTER ̲PROTECT (FMS, MIR ̲ROOT ̲DIR,
VOL ̲CONF.FILES ̲IN ̲ROOT.C ̲SINGLE (FILE ̲NO))
(FILE)
DISMANTLE (FILE)
END ̲LOOP
DIR ̲NO = O
…02……02…LOOP "create a directory in the ROOT directory
DIR ̲NO = DIR ̲NO + 1
CREATE ̲ENTER ̲PROTECT (FMS, MIR ̲ROOT ̲DIR, VOL
̲CONF.
D ̲LIST (DIR:NO). CREATE ̲DIRECTORY) (OWN ̲DIR)
FILE ̲NO = O
LOOP "create files in the above created directory
FILE ̲NO = FILE ̲NO + 1
CREATE ̲ENTER ̲PROTECT (FMS, OWN ̲DIR, VOL-CONF.D
̲LIST (DIR ̲NO).CREATE ̲FILES.C ̲SINGLE (FILE
̲NO) (FILE))
DISMANTLE (FILE)
Figure 4.2.9.4.8.5-2 (continued) …86…1 …02… …02… …02… …02… …02… …02… …02…
FILE ̲NO EQ VOL ̲CONF.D ̲LIST (DIR ̲NO).CREATE
̲FILES. MAX ̲TO ̲CREATE ? EXIT
END ̲LOOP
DISMANTLE (OWN ̲DIR)
DIR ̲NO EQ VOL ̲CONF.MAX ̲OWN ̲DIRECTORIES ?
EXIT
END ̲LOOP
END ̲INITIALIZE ̲MIRRORED ̲DISKS
Figure 4.2.9.4.8.5-2
PROCEDURE
CREATE ̲ENTER ̲PROTECT (FMS: FILE ̲SYSTEM ̲NAME, DIR: FDCB
̲INDEX, C ̲SINGLE: CREATE ̲SINGLE) (FILE: FDCB ̲INDEX)
BEGIN
CASE CREATE (FMS, C ̲SINGLE ̲ATTR) (FILE, CC) OF
ERROR ? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
CASE ENTER (DIR, FILE, C ̲SINGLE.NAME) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC, 0)
END ̲CASE
PROTECT ̲NO = O
LOOP
PROTECT ̲NO = PROTECT ̲NO + 1
PROTECT ̲NO GT C ̲SINGLE.PROT.MAX ̲TD ̲PROTECT
?
EXIT
CASE PROTECT (FILE, C ̲SINGLE.PROT.ACC (PROTECT
̲NO)(CC) OF
ERROR ? ANALYZE ̲ERROR (CC,0)
END ̲CASE
END ̲LOOP
CASE CHANGE ̲PROFILE(FILE,[)(CC) OF
ERROR? ANALYZE ̲ERROR(CC,[)
END CASE
END ̲CREATE ̲ENTER ̲PROTECT
Figure 4.2.9.4.8.5-3
PROCEDURE
COPY ̲START ̲UP ̲SW
VAR COPY ̲INF: COPY ̲INF ̲TYPE
VAR MIR ̲MOVING ̲ROOT ̲DIR, START ̲UP ̲ROOT ̲DIR: FDCB ̲INDEX
VAR FM ̲DIR, TO ̲DIR: FDCB ̲INDEX
BEGIN
GET ̲ROOT ̲MOV (MIR ̲MOVING)(MIR ̲MOVING ̲ROOT ̲DIR)
GET ̲ROOT ̲MOV (SYS ̲GEN) (START ̲UP ̲ROOT ̲DIR)
CASE LOAD ̲SW ̲TYPE OF
INITIAL SW? LOOKUP (MIR ̲MOVING ̲ROOT ̲DIR, SSC
̲DIR ̲INITIAL (TO ̲DIR) LOOKUP (START
̲UP ̲ROOT ̲DIR, SSC ̲DIR ̲INITIAL (FM
̲DIR)
MODIFIED SW? LOOKUP (MIR ̲MOVING
̲ROOT ̲DIR, SSC
̲DIR ̲MODIFIED)
(TO ̲DIR) LOOK
̲UP (START ̲UP ̲ROOT
̲DIR, SSC ̲DIR ̲MODIFIED)(FM
̲DIR)
END ̲CASE
COPY ̲FILES (LOAD ̲FILE ̲LIST, MAX ̲LOAD ̲FILES, FM
̲DIR, TO ̲DIR) (COPY ̲INF)
COPY ̲INF.CC NE ̲0 ? PU ̲DOWN (COPY ̲FAILED, COPY ̲INF)
LOOKUP (MIR ̲MOVING ̲ROOT ̲DIR, SSC ̲DIR) (TO ̲DIR)
LOOKUP (START ̲UP ̲ROOT ̲DIR; SSC ̲DIR) (FM ̲DIR)
COPY ̲FILES (PATCH ̲FILE ̲LIST, MAX ̲PATCH ̲FILES, FM
̲DIR, TO ̲DIR) (COPY ̲INF)
COPY ̲INF. CC NE 0 ? PU ̲DOWN (COPY ̲FAILED, COPY
̲INF)
LOOKUP (MIR ̲ROOT ̲DIR, FORMATS) (TO ̲DIR)
LOOKUP (START ̲UP ̲ROOT ̲DIR, FORMATS) (FM ̲DIR)
Figure 4.2.9.4.8.5-4 (continued)…86…1 …02… …02… …02… …02… …02… …02… …02…
COPY ̲FILES (FORMAT ̲NAME ̲LIST, MAX ̲FORMAT ̲FILES,
FM ̲DIR, TO ̲DIR) (COPY ̲INF)
COPY ̲INF.CC NE 0 ? PU ̲DOWN (COPY ̲FAILED, COPY
̲INF)
END ̲COPY ̲START ̲UP ̲SW
Figure 4.2.9.4.8.5-4
4.2.9.4.9 L̲O̲A̲D̲ ̲S̲E̲G̲M̲E̲N̲T̲
4.2.9.4.9.1 F̲u̲n̲c̲t̲i̲o̲n̲a̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
The module loads a memory segment, which is
specified in the input parameters (LOAD ̲IN)
The following types of memory segments are
loaded:
- child process PROGRAM
- child process DATA
- child process PPS
- CONFIG
- TMP ̲SHARED
- CSF ̲SHARED
The LOAD ̲SEGMENT functions are divided into
the following areas:
- map in /out of segment in question
- load of segment
- load of patches
- setting of environment
- setting of load tables
- error fixup
a) M̲a̲p̲-̲i̲n̲/̲o̲u̲t̲ ̲o̲f̲ ̲s̲e̲g̲m̲e̲n̲t̲
LOAD ̲SEGMENT maps-in the segment to be loaded;
hereby the segment becomes a part of the COPSY
data space
Having loaded a child process segment, the
segment is mapped out.
b) L̲o̲a̲d̲ ̲o̲f̲ ̲s̲e̲g̲m̲e̲n̲t̲
A segment is loaded from a file on disk.
A load file only contains one segment.
Prior to the load of the segment the load file
is sumchecked.
c) L̲o̲a̲d̲ ̲o̲f̲ ̲p̲a̲t̲c̲h̲e̲s̲
Contiguous pieces of a segment (say l00 words)
may be overwritten (patches)
The patches resides in disk file; one file
per patch. In the start-up command the operator
specifies which patch files are to be used
during segment load. A Header in the patch
file specifies the
- child process type to be loaded
- the segment type
- the start address within the segment
- the length of the patch
- a checksum for the patch
The loaded patch is sumchecked
A patch can be checksum in any segment type.
More than one patch is possible within one
segment.
d) S̲e̲t̲t̲i̲n̲g̲ ̲o̲f̲ ̲e̲n̲v̲i̲r̲o̲n̲m̲e̲n̲t̲
In the PPS (process parameter segment) segment
the environment (inherit lists: refer to the
CREATE ̲ENVIRONMENT module) for the child is
defined.
For any child process a COMMON ̲ENVIRONMENT
table is created at the base of the object
description table for the future child PPS.
The synchronization objects, which CFH (CREATE
̲ENVIRONMENT) creates per child process
- MMON ̲RSE, QMON ̲RSE, TMP ̲RSE
are inserted in the COMMON ̲ENVIRONMENT (taken
from the PROCESS ̲TABLE)
For CSF and TMP specific environments (CSF-ENVIRONMENT
and TMP-ENVIRONMENT) are copied from the CONFIG
segment and the COMMON ̲ENVIRONMENT is copied
into the specific environments.
e) S̲e̲t̲t̲i̲n̲g̲ ̲o̲f̲ ̲l̲o̲a̲d̲ ̲t̲a̲b̲l̲e̲s̲
For CSF and TMP child process data segments
the
- CSF ̲LOAD ̲TABLES and the
- TMP ̲LOAD ̲TABLE respectively
are loaded into CSF and TMP data space. Refer
to section 4.2.9.5 for a description of the
tables.
f) E̲r̲r̲o̲r̲ ̲f̲i̲x̲-̲u̲p̲
If an error occurs during load from a file
then
- an error report is generated, which contains
- CC (completion code)
- file name
- error type (load error)
- the PU is shut down and the above information
is
given.
4.2.9.4.9.2 M̲o̲d̲u̲l̲e̲ ̲I̲n̲t̲e̲r̲f̲a̲c̲e̲ ̲d̲e̲f̲i̲n̲i̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲S̲p̲e̲c̲i̲f̲i̲c̲a̲t̲i̲o̲n̲
a) LOAD ̲SEGMENT (LOAD ̲IN: LOAD ̲IN ̲TYPE) (LOAD
OUT:
INTEGER)
b) LOAD ̲SEGMENT (R0, R6, R7)
R̲e̲g̲i̲s̲t̲e̲r̲ ̲C̲o̲n̲v̲e̲n̲t̲i̲o̲n̲
C̲a̲l̲l̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
RO pointer LOAD ̲IN
R6 LINK
R̲e̲t̲u̲r̲n̲ ̲R̲e̲g̲i̲s̲t̲e̲r̲s̲
R7 LOAD ̲OUT
either CONFIG segment start page or program
entry point
RO R6 (destr)
4.2.9.4.9.3 M̲o̲d̲u̲l̲e̲ ̲C̲o̲m̲p̲o̲n̲e̲n̲t̲s̲
The load ̲segment module contains/references
the procedures specified in figure 4.2.9.4.9.3-1
a) L̲O̲A̲D̲ ̲S̲E̲G̲M̲E̲N̲T̲
The procedure "Maps in" the segment specified
in the LOAD ̲IN data. Hereby the segment is
included in the COPSY data space. The shared
segments
- TMP ̲SHARED
- CSF ̲SHARED
are mapped in at predefined locations.
The procedures
- Fill-segment
- Execute-patch are invoked
If the segment in question is a PPS, then the
objects to be inherited (child environment)
by the new child are loaded.
b) F̲I̲L̲L̲ ̲S̲E̲G̲M̲E̲N̲T̲
The load file is looked-up in the start up
directory and the load file header is read.
The complete load file is requested sumchecked,
the segment healer is read and validity checked.
Hereafter the complete object code segment
is loaded into memory.
If the segment handled is a
- TMP data segment
- CSF data segment
the
- TMP ̲LOAD ̲TABLE and
- CSF ̲LOAD ̲TABLE respectively are
loaded into the data segment.…86…1 …02… …02… …02… …02…
…02… …02… …02…
Figure 4.2.9.4.9.3-1
c) C̲H̲E̲C̲K̲ ̲L̲O̲A̲D̲ ̲F̲I̲L̲E̲
The complete load file is sumchecked. The sum
has to be 0.
If an invalid checksum is detected, then
- an errormessage is issued and
- the PU is shut down
d) C̲H̲E̲C̲K̲ ̲S̲E̲G̲M̲E̲N̲T̲ ̲H̲E̲A̲D̲E̲R̲
It is checked, if
- Memory segment specification in (LOAD ̲IN.SEGSIZE)
- is equal to the
- Disk segment specification in (SEG ̲HEAD.SIZE)
Also the type of the disk segment
- program
- data
is checked versus the LOAD ̲IN. SEGTYPE specification.
e) C̲H̲E̲C̲K̲S̲U̲M̲ ̲M̲E̲M̲
The specified memory area is checksummed by
arithmetic addition of memory words. Overflow
(carry) is ignored.
f) E̲X̲E̲C̲U̲T̲E̲ ̲P̲A̲T̲C̲H̲
A patch is defined as the overwriting of a
contiguous "small" part of an object code.
A patch is executed if a patchfile exists,
which describes
- a process type and
- segment type
as the segment in question.
Via a patchmaster, which is set during start-up,
the patchfiles to be considered are specified.
The patch loaded into memory are sumchecked
according to a checksum specified in the patchfile
header.
g) P̲R̲E̲P̲A̲R̲E̲ ̲E̲N̲V̲I̲R̲O̲N̲M̲E̲N̲T̲
An environment refers to the COPSY objects,
which are to be inherited by a child process.
The procedure copies a pregenerated environment
into the
PPS data area.
The PPS environment start address is the base
of the ODT "object descriptor table".
The variable part of the environment
- MMON ̲RSE
- QMON ̲RSE
- TMP ̲RSE
is loaded by the object indexes created in
the CREATE ̲ENVIRONMENT module and saved in
the PROCESS ̲TABLE.
For the CSF and TMP processes specific environment
tables (pregenerated and defined in the CREATE
̲ENVIRONMENT module) are loaded into TMP/CSF
data segments.
h) L̲O̲A̲D̲ ̲E̲R̲R̲O̲R̲
Prints an error message at the WDP ̲ROP and
executes an emergency close down.
4.2.9.4.9.4 D̲a̲t̲a̲ ̲D̲e̲s̲c̲r̲i̲p̲t̲i̲o̲n̲
a1) T̲y̲p̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
SEG, PROGRAM ̲SEG, DATA ̲SEG, GET ̲ENTRY POINT
̲SEG,
RESTORE ̲SEG, TMP ̲SHARED ̲SEG, CSF ̲SHARED ̲SEG,
LOAD ̲IN ̲TYPE CFH.VARIOUS
TMP ̲LOAD ̲TYPE,
CSF ̲LOAD ̲TYPE,
LOAD ̲FILE ̲HEADER,
SEGMENT ̲HEADER,
BOUND ̲ENV,
PATCH ̲FILE ̲HEADER CFH.LOAD
COMMON ̲ENVIRONMENT ̲TYPE,
CSF ̲ENVIRONMENT ̲TYPE
TMP ̲ENVIRONMENT ̲TYPE: CFH.INHERIT
LPN,
PPP,
FDCB ̲INDEX,
FILE ̲NAME: DAMOS
a2) C̲o̲n̲s̲t̲a̲n̲t̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
TMP ̲P ̲NO,
CSF ̲P ̲NO: DBD
CHECKSUM ̲ERROR,
LOAD ̲FILE ̲ERROR,
LOAD ̲FAILED: SSC.COMMON
TMP ̲LOAD ̲ADDRESS,
CSF ̲LOAD ̲ADDRESS: DBD
MAX ̲PATCHFILES: SSC.COMMON
TMP ̲SHARED ̲START ̲PAGE,
CSF ̲SHARED ̲START ̲PAGE: DBD
GLOBAL ̲INH ̲SIZE,
CSF ̲ELEMS,
TMP ̲ELEMS
: CFH.INHERIT
WRITE ̲ACCESS: DAMOS
a3) D̲a̲t̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
PATCH ̲MASK: CFH.LOAD
a4) T̲a̲b̲l̲e̲ ̲R̲e̲f̲e̲r̲e̲n̲c̲e̲s̲
TMP ̲ENVIRONMENT (M),
CSF ̲ENVIRONMENT (M),
COMMON ̲ENVIRONMENT (M): CFH.INHERIT
TMP ̲LOAD ̲TABLE,
CSF ̲LOAD ̲TABLE: DBD
PROCESS ̲TABLE: SSC.COMMON
PATCH ̲FILE ̲NAME ̲LIST,
PATCH ̲TABLE: CFH.LOAD
b) E̲x̲t̲e̲r̲n̲a̲l̲ ̲D̲a̲t̲a̲
For the PROCESS ̲TABLE only
- QMON ̲RSE
- TMP ̲RSE
- MMON ̲RSE
entries are read. For remaining tables all
table elements are read.
The environment tables are updated.
c) L̲o̲c̲a̲l̲ ̲D̲a̲t̲a̲
VAR PAGE, SEGM ̲SIZE: LPN
VAR I, CC: INTEGER
VAR FILE ̲OBJ: FDCB ̲INDEX
VAR LOADER ̲SUM, OWN ̲SUM, ADDR ̲SIZE, RECEIVED-SUM:
INTEGER
VAR NOT ̲READ ̲SIZE, XFER ̲SIZE, F ̲ADDR, PART
̲SUM, SUM :
INTEGER
VAR PPS ̲PTR, PPP ̲PTR, ENV ̲POINTER: POINTER
VAR INF: RECORD
CC: INTEGER
FILE: FILE ̲NAME
END
VAR SAVE ̲PAGE: LPN
contains the startpage for the segment, which
is used to store the CONFIG data.
4.2.9.4.9.5 D̲e̲s̲i̲g̲n̲
The LOAD ̲SEGMENT procedures are specified by
means of the flowgrams given overleaf.…86…1 …02…
…02… …02… …02… …02… …02… …02…
PROCEDURE
LOAD ̲SEGMENT (LOAD ̲IN: LOAD ̲IN ̲TYPE) (LOAD ̲OUT: INTEGER)
VAR PAGE, SAVE ̲PAGE: LPN
VAR SEGM ̲SIZE: LPN
BEGIN
PAGE = NIL
LOAD ̲IN.SEGTYPE EQ TMP ̲SHARED ̲SEG ?
PAGE= TMP ̲SHARED ̲START ̲PAGE
LOAD ̲IN. SEGTYPE EQ CSF ̲SHARED ̲SEG ?
PAGE = CSF ̲SHARED ̲START ̲PAGE
LOAD ̲IN.SEG ̲TYPE EQ RESTORE ̲SEG ?
CASE MAP ̲IN ̲SEGMENT (LOAD ̲IN.SEGM, PAGE, WRITE
̲ACCESS)
(PAGE, SEGM ̲SIZE, CC) OF
PAGE
= SAVE ̲PAGE
ERROR
?
ANALYZE
̲ERROR
(CC,
0)
END CASE
LOAD ̲IN.SEG ̲TYPE EQ CONFIG ̲SEG ? SAVE ̲PAGE = PAGE
FILL ̲SEGMENT (PAGE)
LOAD ̲IN.SEG ̲TYPE EQ GET ̲ENTRYPOINT ̲SEG ?
EXECUTE ̲PATCH (PAGE)
LOAD ̲IN.SEG ̲TYPE EQ PPS ̲SEG ? PREPARE ̲ENVIRONMENT
(PAGE)
(LOAD ̲IN.SEGTYPE EQ CONFIG ̲SEG OR)
(LOAD ̲IN.SEGTYPE EQ TMP ̲SHARED ̲SEG OR) ?
(LOAD ̲IN.SEGTYPE EQ CSF ̲SHARED ̲SEG )
CASE MAP ̲OUT ̲SEGMENT (LOAD ̲IN. SEGM) (PAGE, CC)
OF
ERROR ? ANALYZE ̲ERROR (CC, 0)
END CASE
END ̲LOAD ̲SEGMENT.
Figure 4.2.9.4.9.5-1
PROCEDURE FILL ̲SEGMENT (PAGE: LPN)
VAR FILE ̲OBJ: FDCB ̲INDEX
VAR LOADER ̲SUM, OWN ̲SUM: INTEGER
VAR ADDR, SIZE: INTEGER
VAR CC: INTEGER
BEGIN
LOOKUP (LOAD ̲IN.START ̲UP ̲DIR, LOAD ̲IN.FILE) (FILE
̲OBJ)
READ ̲FM ̲FILE (PAGE * 1024, 0, 2* SIZE (LOAD ̲FILE
̲HEADER), FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CC, LOAD ̲IN.FILE)
EQUIVALENCE (PAGE * 1024, LOAD ̲HEAD: LOAD ̲FILE
̲HEADER)
LOAD ̲IN.SEG ̲TYPE EQ GET ̲ENTRYPOINT ̲SEG?
CHECK ̲LOAD ̲FILE
LOAD ̲IN.SEGTYPE EQ GET ̲ENTRYPOINT ̲SEG OR
LOAD ̲IN.SEGTYPE EQ PROGRAM ̲SEG ? LOAD ̲OUT = LOAD
̲HEAD. ENTRY ̲POINT
LOAD ̲IN.SEGTYPE EQ GET ̲ENTRYPOINT ̲SEG ?
ADDR = LOAD ̲HEAD.FIRST ̲SEGMENT "bytes
READ ̲FM ̲FILE (PAGE x 1024, ADDR, 2 x SIZE (SEGMENT
̲HEADER), FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CC, LOAD ̲IN ̲FILE)
EQUIVALENCE (PAGE x 1024, SEGM ̲HEAD: SEGMENT ̲HEADER)
SIZE = SEGM ̲HEAD. SIZE "words
CHECK ̲SEGM ̲HEADER
CC NE 0 ? LOAD ̲ERROR (CC, LOAD ̲IN.FILE)
READ ̲FM ̲FILE (PAGE x 1024, SEGM ̲HEAD. START ̲ADDRESS
2 x SIZE, FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CO), LOAD ̲IN. FILE)
…01…Figure 4.2.9.4.9.5-2 (continued)
(LOAD ̲IN.G ̲PROC EQ TMP ̲P ̲NO AND) ?
(LOAD ̲IN.SEGTYPE EQ DATA ̲SEG) ?
EQUIVALENCE (TMP ̲LOAD ̲ADDRESS, TMP
̲DATA: TMP ̲LOAD ̲TYPE)
TMP ̲DATA = TMP ̲LOAD ̲TABLE
(LOAD ̲IN.G ̲PROC EQ CSF ̲P ̲NO AND)
(LOAD ̲IN.SEGTYPE EQ DATA ̲SEG) ?
EQUIVALENCE (CSF ̲LOAD ̲ADDRESS, CSF
̲DATA. CSF ̲LOAD ̲TYPE)
CSF ̲DATA = CSF ̲LOAD ̲TABLE
CASE DISMANTLE (FILE ̲OBJ) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC, O)
END CASE
END ̲LOAD ̲SEGMENT.
Figure 4.2.9.4.9.5-2
PROCEDURE
CHECK ̲LOAD ̲FILE (FILE ̲OBJ : FDCB ̲INDEX)
VAR NOT ̲READ ̲SIZE, XFER ̲SIZE, F ̲ADDR: INTEGER "in
bytes
PART ̲SUM, SUM: INTEGER
BEGIN
F ̲ADDR = O
NOT ̲READ ̲SIZE = LOAD ̲HEAD.FILE ̲SIZE * 5l2
SUM = O
LOOP
NOT ̲READ ̲SIZE = NOT ̲READ ̲SIZE - LOAD ̲IN.SEG
̲SIZE * 1024
NOT ̲READ ̲SIZE GE 0? XFER ̲SIZE = LOAD ̲IN.SEG
̲SIZE * 1024
XFER ̲SIZE = - NOT ̲READ ̲SIZE
READ ̲FM ̲FILE (PAGE * 1024, F ̲ADDR, XFER ̲SIZE,
FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CC, LOAD ̲IN ̲FILE)
F ̲ADDR = F:ADDR + XFER ̲SIZE
CHECKSUM ̲MEM (PAGE * 1024, XFER ̲SIZE/2) (PART
̲SUM)
SUM = SUM + PART ̲SUM
XFER ̲SIZE LE 0 ? EXIT
END ̲LOOP
SUM NE 0 ?
CC = LOAD ̲FILE ̲ERROR
LOAD ̲ERROR (CC, LOAD ̲IN ̲FILE)
END ̲CHECK ̲LOAD ̲FILE…01…Figure 4.2.9.4.9.5-3
PROCEDURE
CHECK ̲SEGM ̲HEADER
BEGIN
" memory space less than disk space ?
SEG ̲HEADER.SIZE GE LOAD ̲IN.SEG ̲SIZE ?
" segment type (data or program) check
CASE LOAD ̲IN. SEGTYPE OF
" program segment
PROGRAM ? SEGM ̲HEADER.TYPE NE 1 ?
OTHER ? SEG; ̲HEADER.TYPE NE 2 ?…02…
" data segment
CC=ILLEGAL ̲LOAD
̲SEGM
LOAD ̲ERROR (CC,
LOAD ̲IN ̲FILE)
END ̲CASE
END ̲CHECK ̲SEGM ̲HEADER
Figure 4.2.9.4.9.5-4
PROCEDURE
CHECKSUM ̲MEM (FIRST ̲ADDR: INTEGER, LENGTH: INTEGER)
(SUM: INTEGER)
VAR I: INTEGER
BEGIN
SUM = O
I = O
LOOP
I = I + 1
EQUIVALENCE (FIRST ̲ADDR + I - 1, WORD: INTEGER)
SUM = SUM + WORD
I EQ LENGTH ? EXIT
END ̲LOOP
END
Figure 4.2.9.4.9.5-5
PROCEDURE
EXECUTE ̲PATCH (PAGE: LPN)
VAR I: INTEGER
VAR FILE ̲OBJ: OBJ ̲INDEX
VAR RECEIVED ̲SUM, OWN ̲SUM: INTEGER
BEGIN
I = O
LOOP
I = I + 1
(PATCH ̲MASK LOGAND BIT (I) EQ 0 OR
) ?
(PATCH ̲TABLE (I).PROC ̲TYPE NE LOAD ̲IN.SEGTYPE
) ?
(PATCH ̲TABLE (I).SEG ̲TYPE NE LOAD ̲IN.SEGTYPE
) ?
EQUIVALENCE (PATCH ̲FILE ̲NAME ̲LIST (I), P ̲NAME
: FILE ̲NAME)
LOOKUP (LOAD ̲IN.SSC ̲DIR, P ̲NAME ) (FILE
̲OBJ)
EQUIVALENCE (WORK 1, P ̲HEAD: PATCH ̲FILE ̲HEADER)
READ ̲FM ̲FILE (P ̲HEAD, O, SIZE (PATCH ̲FILE ̲HEADER;
FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CC, P ̲NAME)
RECEIVED ̲SUM = P ̲HEAD.CHECKSUM
READ ̲FM ̲FILE (PAGE *1024 + P ̲HEAD. MEM ̲OFFSET,
SIZE (PATCH ̲FILE ̲HEADER) *2, P
̲HEAD.SIZE, FILE ̲OBJ) (CC)
CC NE 0 ? LOAD ̲ERROR (CC, P ̲NAME)
Figure 4.2.9.4.9.5-6 (1/2)
CHECKSUM ̲MEM (PAGE *1024 + P ̲HEAD.MEM ̲OFFSET,
P ̲HEAD.SIZE) (OWN ̲SUM)
RECEIVED ̲SUM NE OWN ̲SUM ?
CC = CHECK ̲SUM ̲ERROR
LOAD ̲ERROR (CC, P ̲NAME)
CASE DISMANTLE (FILE ̲OBJ) (CC) OF
ERROR ? ANALYZE ̲ERROR (CC, O)
END ̲CASE
I EQ MAX ̲PATCHFILES ? EXIT
END ̲LOOP
END ̲EXECUTE ̲PATCH
Figure 4.2.9.4.9.5-6 (2/2)
PROCEDURE
PREPARE ̲ENVIRONMENT (PAGE: LPN)
VAR PPS ̲PTR, PPP ̲PTR, ENV ̲POINTER : POINTER
BEGIN
COMMON ̲ENVIRONMENT.HEAD.MAX ̲ENTRIES =
LOAD ̲IN.NO ̲OF ̲CHILD ̲OBJ
COMMON ̲ENVIRONMENT.ELEMS (MMON ̲RSE) =
PROCESS ̲TABLE (G ̲PROC).MMON ̲RSE
COMMON ̲ENVIRONMENT ̲ELEMS (QMON ̲RSE) =
PROCESS ̲TABLE (G ̲PROC).QMON ̲RSE
COMMON ̲ENVIRONMENT.ELEMS (TMP ̲RSE) =
PROCESS ̲TABLE (G ̲PROC). TMP ̲RSE
PPS ̲PTR = PAGE * 1024
PPP ̲PTR = PPS ̲PTR + LOAD ̲IN.SEG ̲SIZE * 1024 - SIZE
(PPP)
EQUIVALENCE (PPP ̲PTR, CHILD ̲PPP: PPP)
ENV ̲PTR = CHILD ̲PPP.ODT ̲DESCRIPTOR.BASE - 1024
* (64 - PAGE - LOAD ̲IN.SEG ̲SIZE)
LOAD ̲IN.G ̲PROC EQ CSF ̲P ̲NO ?
COMMON ̲ENVIRONMENT.HEAD.HERITAGE ̲SIZE = CSF
̲ELEMS
EQUIVALENCE (ENV ̲PTR, ENV: CSF ̲ENVIRONMENT
̲TYPE)
ENV (GLOBAL ̲INH ̲SIZE + 1..CSF ̲ELEMS)=
CSF ̲ENVIRONMENT (GLOBAL ̲INH ̲SIZE + 1 CSF
̲ELEMS
LOAD ̲IN.G ̲PROC EQ TMP ̲P ̲NO ?
COMMON ̲ENVIRONMENT.HEAD.HERITAGE ̲SIZE = TMP
̲ELEM
EQUIVALENCE (ENV ̲PTR, ENV: TMP ̲ENVIRONMENT
̲TYPE
Figure 4.2.9.4.9.5-7 (continued)…86…1 …02… …02… …02… …02… …02… …02… …02…
ENV (GLOBAL ̲INH ̲SIZE + 1..TMP ̲ELEMS) =
TMP ̲ENVIRONMENT (GLOBAL ̲INH ̲SIZE + 1..TMP ̲ELEMS)
EQUIVALENCE(ENV ̲PTR, ENV: COMMON ̲ENVIRONMENT
̲TYPE)
ENV = COMMON ̲ENVIRONMENT
EQUIVALENCE (CHILD ̲PPP.PST ̲DESCRIPTOR.MIN ̲PTR,
P ̲STACK: BOUND ̲ENV)
PC. P ̲C ̲B.BOUNDS = P ̲STACK.BOUNDS
PC. P ̲C ̲B.ENVIRONMENT = P ̲STACK.ENVIRONMENT
END ̲PREPARE ENVIRONMENT
Figure 4.2.9.4.9.5-7
PROCEDURE LOAD ̲ERROR (CC: INTEGER, FILE: FILENAME)
VAR INF: RECORD
CC : INTEGER
FILE : FILE ̲NAME
END
BEGIN
INF.CC = CC
INF.FILE = FILE
PU ̲DOWN (LOAD ̲FAILED, INF)
END
Figure 4.2.9.4.9.5-8