DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Wang WCS documentation floppies

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Wang WCS documentation floppies

Excavated with: AutoArchaeologist - Free & Open Source Software.


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