1 /* BEGIN INCLUDE FILE ... mgt.incl.pl1 */
  2 
  3 /* Modified May 1975 by T. Casey to add priority scheduler parameters */
  4 /* Modified Summer '76 RE Mullen to add deadline parameters */
  5 /* Modified by T. Casey, November 1978, to add group parameters: absentee_(max min pct limit). */
  6 /* Modified July 1981 by J. Bongiovanni to add max_pct */
  7 
  8 /* At login each user process is placed in that load control group specified in either
  9    the project's SAT entry or the user's PDT entry.  This group is remembered
 10    in the user table entry for that process (ATE, DUTE, AUTE).
 11 
 12    MGT groups map each process into a set of processes called a work_class
 13    as a function of shift and whether or not the process is absentee --
 14    also per group limits on the number of group members are given.
 15 
 16    The work_class entries in the MGT specify the configuration
 17    of the hardcore scheduler on a per shift basis.  If a work_class has the
 18    realtime attribute, member processes will be given precisely specified
 19    response characteristics.  If running in deadline_not_percent mode on
 20    a given shift then members of other work_classes will be given approximate
 21    response characteristics; otherwise other work_classes will be given
 22    percentages of whatever cpu time is unused by realtime processes.
 23    REM */
 24 
 25 dcl  MGT_version_3 fixed bin int static init (3);           /* versions >= 2 contain work class definitions */
 26                                                             /* versions >= 3 contain deadline info */
 27 
 28 /* the mgt is based on mgtp, which is declared as either static or automatic, in each procedure that uses it */
 29 
 30 dcl 1 mgt based (mgtp) aligned,                             /* the Master Group Table defines load control groups
 31                                                                and work classes */
 32 
 33 %include author;
 34 /* the author structure occupies 29 words */
 35     2 max_size fixed bin,                                   /* maximum size of table */
 36     2 current_size fixed bin,                               /* current number of entries */
 37     2 total_units fixed bin,                                /* total units allocated */
 38     2 version_indicator char (8),                           /* = "VERSION " for version 2 and later
 39                                                                (the first version of the mgt had no version number) */
 40     2 version fixed bin,                                    /* version of the mgt (if version_indicator = "VERSION ") */
 41     2 switches aligned,
 42       3 wc_initialized bit (1) unaligned,                   /* = "1"b if work classes >1 have been defined */
 43       3 prio_sked_enabled bit (1) unaligned,                /* if this switch is turned off, the priority scheduler will not
 44                                                                be used by the answering service (all processes will be
 45                                                                put in work class 1 regardless of what the mgt says) */
 46       3 prio_sked_on_tape bit (1) unaligned,                /* "1"b if a.s. initialization finds the priority scheduler
 47                                                                on the system tape */
 48       3 deadline_mode (0:7) bit (1) unal,                   /* 0 => %, 1 => deadlines (per shift) */
 49       3 mgt_pad1 bit (25) unaligned,                        /* rest of the word */
 50     2 user_wc_defined (16) bit (1) unaligned,               /* current set of defined work classes */
 51     2 shift_defined (0:7) bit (1) unaligned,                /* which shifts are used at this site */
 52     2 mgt_pad2 bit (12) unaligned,                          /* rest of the word */
 53     2 user_wc_min_pct (16) fixed bin,                       /* current percents for the defined work classes */
 54                                                             /* the above variables occupy a total of 24 words */
 55     2 mgt_pad3 (11) fixed bin,                              /* pad the mgt header to 64 words (29 + 24 + 11) */
 56 
 57     2 entry (100),                                          /* array of entries */
 58       3 fill (32) fixed bin;                                /* 32 words each */
 59                                                             /* the first 16 are work classes; the rest, load control groups */
 60 
 61 dcl  mgtep ptr;                                             /* both types of mgt entries are based on this pointer */
 62 
 63 dcl 1 group based (mgtep) aligned,                          /* a single entry in the mgt */
 64     2 group_id char (8),                                    /* group name */
 65     2 max_prim fixed bin,                                   /* maximum number of primary units (-1 is special) */
 66     2 n_prim fixed bin,                                     /* current number of primary units */
 67     2 n_sec fixed bin,                                      /* current number of secondary units */
 68     2 n_eo fixed bin,                                       /* current number of edit-only users */
 69     2 absolute_max fixed bin,                               /* Absolute maximum number of units (prime and sec) */
 70     2 minu fixed bin,                                       /* Constant number of units in maxprim */
 71     2 num fixed bin,                                        /* Numerator of fraction of maxunits given to maxprim */
 72     2 denom fixed bin,                                      /* Denominator. Usually = normal maxunits */
 73     2 minamax fixed bin,                                    /* Constant part of abs max */
 74     2 num1 fixed bin,                                       /* Numerator of abs max fraction */
 75     2 denom1 fixed bin,                                     /* Denominator of abs max fraction */
 76     2 int_wc (0:7) fixed bin (17) unaligned,                /* interactive work classes, per shift */
 77     2 abs_wc (0:7) fixed bin (17) unaligned,                /* absentee work classes, per shift */
 78                                                             /* used halfwords to avoid using up all the pad -
 79                                                                we might need it later */
 80     2 absentee aligned,                                     /* switches controlling absentee processes in this group */
 81       3 allowed bit (1) unaligned,                          /* if off, absentee users must be moved to another group */
 82       3 default_group bit (1) unaligned,                    /* if on, this is one of the groups they can be moved to */
 83       3 default_queue (4) bit (1) unaligned,                /* if on, this is the default group for this queue */
 84                                                             /* ed_mgt and up_mgt_ enforce one default group per queue */
 85       3 mgt_pad4 bit (30) unaligned,                        /* rest of the word */
 86     2 absentee_max fixed bin (17) unal,                     /* max absentees allowed from this group */
 87     2 absentee_min fixed bin (17) unal,                     /* min absentees allowed from this group */
 88     2 absentee_pct fixed bin (17) unal,                     /* this % of abs_maxu allowed to be occupied by this group */
 89     2 absentee_limit fixed bin (17) unal,                   /* result of applying above 3 parameters to current abs_maxu */
 90     2 n_abs fixed bin (17) unal,                            /* current number of background absentee users */
 91     2 mgt_pad5a fixed bin (17) unal,                        /* rest of the word */
 92     2 mgt_pad5 (7) fixed bin;                               /* pad mgt entry to 32 words */
 93 
 94 dcl 1 work_class based (mgtep) aligned,
 95     2 wc_name char (8),                                     /* overlays group.group_id, but can only be
 96                                                                one of the strings "1" through "16" */
 97     2 switches aligned,
 98       3 defined (0:7) bit (1) unaligned,                    /* which shifts this work class is defined on */
 99       3 absentee_allowed (0:7) bit (1) unaligned,           /* "1"b if absentee jobs allowed in this work class and shift */
100                                                             /* ed_mgt and up_mgt_ enforce consistency between these
101                                                                and the group.absentee switches */
102       3 realtime (0:7) bit (1) unaligned,                   /* "1"b if this work class has realtime deadlines */
103       3 mgt_pad6 bit (12) unaligned,                        /* rest of word */
104     2 min_pct (0:7) fixed bin,                              /* percent, on each shift */
105     2 int_response (0:7) fixed bin (17) unal,               /* response to interaction(.01sec) */
106     2 int_quantum (0:7) fixed bin (17) unal,                /* first time slice after interaction(.01sec) */
107     2 response (0:7) fixed bin (17) unal,                   /* time between time slices(.01sec) */
108     2 quantum (0:7) fixed bin (17) unal,                    /* second and following time slices(.01sec) */
109     2 max_pct (0:7) fixed bin (17) unal,                    /* governed percent on each shift (0=>not governed */
110     2 mgt_pad7 (1) fixed bin;                               /* pad mgt entry to 32 words */
111 
112 /* END INCLUDE FILE ... mgt.incl.pl1 */