COMPILATION LISTING OF SEGMENT tc Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1023.7 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 tc: proc; 14 15 /* This program includes those scheduler functions which 16* are used infrequently enough that the code is appropriately 17* written in pl1 and not permanently wired-down */ 18 19 /* Coded May 1975 by RE Mullen for priority scheduler */ 20 /* tune_work_class entry added RE Mullen for deadline scheduler */ 21 /* Modified 29 October by M. Pierret for pin_weight and io_priority */ 22 /* Modified June 1981 by J. Bongiovanni for governed work classes */ 23 /* Modified May 1982 by J. Bongiovanni for interactive_q */ 24 /* Modified November 1984 by M. Pandolf to include hc_lock. */ 25 1 1 /* BEGIN INCLUDE FILE ... tcm.incl.pl1 ... used to generate tc_data cds */ 1 2 /* NOTE -- This include file has TWO counterparts in ALM: tc_meters.incl.alm and */ 1 3 /* wcte.incl.alm. They cannot be produced with cif, and must be kept up to date manually. */ 1 4 /* Modified 830914 to replace tty_polling_time with opc_polling_time... -E. A. Ranzenbach */ 1 5 /* Modified 1984.05.21 by M. Pandolf to add tc_suspend_lock */ 1 6 /* Modified 1984.11.26 by Keith Loepere for uid_array. */ 1 7 /* Modified 1984.12.06 by Keith Loepere for page create delaying. */ 1 8 1 9 dcl tcmp ptr; 1 10 1 11 dcl 1 tcm aligned based (tcmp), 1 12 2 tc_suspend_lock like lock, /* when locked, tc is suspended */ 1 13 2 cid2 fixed bin (18), 1 14 2 cid3 fixed bin (18), 1 15 2 cid4 fixed bin (18), 1 16 2 depth_count fixed bin (18), /* depth last process run */ 1 17 2 loadings fixed bin (18), /* number of process loadings */ 1 18 1 19 2 blocks fixed bin (18), /* number of calls to block */ 1 20 2 wakeups fixed bin (18), /* number of calls to wakeup */ 1 21 2 waits fixed bin (18), /* number of calls to wait */ 1 22 2 notifies fixed bin (18), /* number of calls to notify */ 1 23 2 schedulings fixed bin (18), 1 24 2 interactions fixed bin (18), /* number of interactive schedulings */ 1 25 2 avequeue fixed bin (35, 18), /* recent time average of number in queue */ 1 26 2 te_wait fixed bin (18), /* times te called from wait */ 1 27 1 28 2 te_block fixed bin (18), /* times te updated from block */ 1 29 2 te_i_stop fixed bin (18), /* times te updated from i_stop */ 1 30 2 te_pre_empt fixed bin (18), /* times te updated from pre_empt */ 1 31 2 p_interactions fixed bin, /* times interaction bit turned off because of high priority */ 1 32 2 idle fixed bin (71), /* total idle time */ 1 33 2 mp_idle fixed bin (71), /* multi-programming idle */ 1 34 1 35 2 nmp_idle fixed bin (71), /* non-multi-programming idle time */ 1 36 2 zero_idle fixed bin (71), /* zero idle time */ 1 37 2 last_time fixed bin (71), /* last time a process was run */ 1 38 2 loop_locks fixed bin (18), /* times looped on the APT lock */ 1 39 2 loop_lock_time fixed bin (18), /* time looping on the APT lock */ 1 40 2 ave_eligible fixed bin (35, 18), /* average length of eligible queue */ 1 41 2 sort_to_elhead fixed bin (18), /* 0=> no one,1 => int've only, 2 => everybody */ 1 42 2 processor_time fixed bin (71), /* total processor time on system */ 1 43 2 response_time fixed bin (71), /* estimate of response time */ 1 44 2 eligible_time fixed bin (71), /* estimate of eligible time */ 1 45 2 response_count fixed bin, /* count of response meters */ 1 46 2 eligible_count fixed bin, /* count of eligible meters */ 1 47 2 quit_counts (0:5) fixed bin, /* array of buckets indexed by state */ 1 48 2 loading_idle fixed bin (71), /* loading_idle time */ 1 49 2 delta_vcpu fixed bin (71), /* delta virtual CPU time for the system */ 1 50 2 post_purge_switch fixed bin, /* ON if post purging is to be done */ 1 51 2 time_out_severity fixed bin, /* syserr first arg for notify time outs */ 1 52 2 notify_check fixed bin, /* obsolete */ 1 53 2 quit_priority fixed bin, /* factor for scheduler quit response */ 1 54 2 iobm_polling_time fixed bin (71), /* time to poll iobm */ 1 55 2 end_of_time fixed bin (71), /* very large time */ 1 56 2 gp_at_notify fixed bin (18), /* 0 => just do get_idle_processor */ 1 57 2 gp_at_ptlnotify fixed bin (18), /* 0 => just do get_idle_processor */ 1 58 2 int_q_enabled fixed bin (18), /* 0 => no intv q in percent mode */ 1 59 2 fnp_buffer_threshold fixed bin (18), /* if fewer free buffs then stingy alloc strategy */ 1 60 /* set this to >= half n_ttylines/fnp for safety */ 1 61 1 62 /* 100 octal */ 1 63 1 64 2 depths (8) fixed bin (18), /* histogram of run depths */ 1 65 2 tdepths (8) fixed bin (71), /* histogram of times run per depth */ 1 66 2 pfdepth (8) fixed bin (18), /* histogram of page faults per depth */ 1 67 1 68 2 ptl_not_waits fixed bin (18), /* times ptl_wait noticed ptl was unlocked */ 1 69 2 gw_gp_window_count fixed bin (18), /* times window noticed */ 1 70 2 metering_lock fixed bin (18), /* 0=locked, else unlocked */ 1 71 2 ptl_waits fixed bin (18), /* num calls to ptl_wait */ 1 72 2 gp_start_count fixed bin (18), /* to detect gw_gp window lossage */ 1 73 2 gp_done_count fixed bin (18), 1 74 2 nto_check_time fixed bin (71), /* next time at which nto code will be called */ 1 75 2 nto_delta fixed bin (35), /* microsec between nto checks */ 1 76 2 nto_count fixed bin (18), /* number of times nto detected */ 1 77 2 tcpu_scheduling fixed bin (18), /* obsolete */ 1 78 2 nto_event bit (36), /* last event which NTO'd */ 1 79 2 page_notifies fixed bin (18), 1 80 2 notify_nobody_count fixed bin (18), 1 81 2 notify_nobody_event bit (36), 1 82 2 system_type fixed bin, /* used to be tcm.inter */ 1 83 1 84 2 stat (0:15) fixed bin (18), /* num apte's in each state */ 1 85 1 86 /* 200 octal */ 1 87 1 88 2 wait (8), 1 89 3 time fixed bin (18), /* histogram of page fault waiting times versus did */ 1 90 3 count fixed bin (18), 1 91 1 92 2 ready (8), 1 93 3 time fixed bin (18), /* histogram of times in ready queue */ 1 94 3 count fixed bin (18), 1 95 1 96 2 total_pf_time fixed bin (71), /* total time spent from start to end of 1 97* all page faults */ 1 98 2 total_pf_count fixed bin (18), /* total number of page faults metered */ 1 99 2 auto_tune_ws fixed bin (18), /* 0=> dont, atherwise compensate for quantum len */ 1 100 2 ocore_delta fixed bin (18), /* number of pages reserved for int users */ 1 101 2 ws_sum fixed bin (18), /* total of eligible's ws_sizes */ 1 102 2 nonidle_force_count fixed bin (18), /* count of eligibilities forced */ 1 103 2 itt_list_lock bit (36) aligned, /* Lock on ITT free list */ 1 104 2 cpu_pf_time fixed bin (71), /* total cpu time spent handling page faults */ 1 105 2 cpu_pf_count fixed bin (18), /* total count of cpu time meterings */ 1 106 2 special_offsets unaligned, 1 107 3 apt_offset bit (18), 1 108 3 pad bit (18), 1 109 2 getwork_time fixed bin (71), /* total time spent in getwork */ 1 110 2 getwork_count fixed bin (18), /* total times through getwork */ 1 111 2 short_pf_count fixed bin (18), /* number of short page faults */ 1 112 2 interrupt_time fixed bin (71), /* total time spent in interrupt */ 1 113 2 interrupt_count fixed bin (71), /* total number of metered interrupts */ 1 114 2 ocore fixed bin (35, 18), /* fraction of core for int've users */ 1 115 2 pre_empt_flag bit (36) aligned, /* controls whether preempting at done time */ 1 116 2 cumulative_memory_usage fixed binary (71), /* total number of memory usage units */ 1 117 2 processor_time_at_define_wc fixed bin (71), /* value of processor_time when WC's last defined */ 1 118 2 boost_priority fixed bin, /* number of times priority process given high priority */ 1 119 2 lost_priority fixed bin, /* number of times priority process lost eligibility */ 1 120 2 total_clock_lag fixed bin (71), /* sum of all simulated clock delays */ 1 121 2 clock_simulations fixed bin, /* number of times alarm clock interrupt was simulated */ 1 122 2 max_clock_lag fixed bin, /* largest simulated alarm clock delay */ 1 123 1 124 /* 300 octal */ 1 125 1 126 2 pdscopyl fixed bin (18), /* amount of pds to copy for new process */ 1 127 2 max_hproc_segno fixed bin, /* largest allowed hardcore segment number */ 1 128 2 prds_length fixed bin (18), /* length of PRDS */ 1 129 2 pds_length fixed bin (18), /* length of PDS */ 1 130 2 lock fixed bin (18), /* process id generator lock */ 1 131 2 id bit (36) aligned, /* next uid to be added to uid_array */ 1 132 2 system_shutdown fixed bin (18), 1 133 2 working_set_factor fixed bin (35, 18), /* working set factor */ 1 134 1 135 2 ncpu fixed bin (18), /* number of processors currently being used */ 1 136 2 last_eligible bit (18), /* last process to gain eligibility */ 1 137 2 apt_lock fixed bin (35), /* + write; 0 hidden; -1 unlocked; -(N+1) Nreaders */ 1 138 2 apt_size fixed bin (18), /* number of APT entries */ 1 139 2 realtime_q aligned like based_sentinel, /* processes with realtime deadlines */ 1 140 2 aht_size fixed bin (18), /* APT hash table size */ 1 141 2 itt_size fixed bin (18), /* number of ITT entries */ 1 142 1 143 2 dst_size fixed bin (18), /* number of allowed DST entries */ 1 144 2 itt_free_list bit (18), /* pointer to ITT free list */ 1 145 2 used_itt fixed bin (18), /* number of used ITT entries */ 1 146 2 initializer_id bit (36) aligned, /* process id of initializer */ 1 147 2 n_eligible fixed bin (18), /* number of processes eligible */ 1 148 2 max_eligible fixed bin (30), /* maximum allowed number of eligible processes */ 1 149 2 wait_enable fixed bin (18), /* turned on when waiting mechanism works */ 1 150 2 apt_entry_size fixed bin (18), /* size of an APT entry */ 1 151 1 152 2 interactive_q aligned like based_sentinel, /* head of interactive queue */ 1 153 2 dst_ptr ptr, /* pointer to device signal table */ 1 154 2 old_user ptr, /* last process to run (apt ptr ) */ 1 155 2 initialize_time fixed bin (71), /* time of initialization */ 1 156 1 157 2 init_event fixed bin (18), /* wait event during initialization */ 1 158 2 oldt fixed bin (18), /* timer reading from previous process */ 1 159 2 newt fixed bin (18), /* timer setting for new process */ 1 160 2 tefirst fixed bin (30), /* first eligible time */ 1 161 2 telast fixed bin (30), /* last eligible time */ 1 162 2 timax fixed bin (35), /* time in queue for lowest level */ 1 163 2 empty_q bit (18), /* thread of empty APT entries */ 1 164 2 working_set_addend fixed bin (18), /* additive working set parameter */ 1 165 2 ready_q_head bit (0) aligned, /* for added segdef */ 1 166 2 eligible_q_head aligned like based_sentinel, /* head of eligible queue */ 1 167 2 ready_q_tail bit (0) aligned, /* for added segdef */ 1 168 2 eligible_q_tail aligned like based_sentinel, /* tail of eligible queue */ 1 169 2 idle_tail aligned like based_sentinel, /* tail of idle list */ 1 170 2 min_eligible fixed bin (30), 1 171 2 alarm_timer_list bit (18) aligned, /* rel pointer to apt entry for next alarm timer */ 1 172 2 guaranteed_elig_inc fixed bin (35), /* amount of guaranteed eligibility time in microsecs. */ 1 173 2 priority_sched_inc fixed bin (35), /* amount of block time before process is given priority */ 1 174 2 next_alarm_time fixed bin (71), /* clock time for next alarm timer */ 1 175 2 priority_sched_time fixed bin (71), /* time for priority process to be given priority */ 1 176 2 opc_polling_time fixed bin (71), /* time to poll console DIM */ 1 177 2 disk_polling_time fixed bin (71), /* time to poll disk DIM */ 1 178 2 tape_polling_time fixed bin (71), /* time to poll tape DIM */ 1 179 2 imp_polling_time fixed bin (71), /* time to poll imp */ 1 180 2 imp_polling_lock fixed bin (18), /* do not poll if lock set */ 1 181 2 max_channels fixed bin (18), /* num special channels per process */ 1 182 1 183 /* 400 octal */ 1 184 1 185 2 system_virtual_time fixed bin (71), /* non-idle virtual time */ 1 186 2 credit_bank fixed bin (71), /* credits not yet passed out */ 1 187 2 min_wct_index bit (18) aligned, /* offset of initializer work class table entry */ 1 188 2 max_wct_index bit (18) aligned, /* offset of highest wcte currently defined */ 1 189 2 delta_vt fixed bin (71), /* temp used by pxss.compute_virtual_clocks */ 1 190 2 gross_idle_time fixed bin (71), /* idle time_used_clock */ 1 191 2 credits_per_scatter fixed bin (35), /* total number of credits awarded at once */ 1 192 2 best_credit_value fixed bin (18), /* temp for pxss.find_next_eligible */ 1 193 2 define_wc_time fixed bin (71), /* clock time when workclasses last degined */ 1 194 2 max_batch_elig fixed bin (35), 1 195 2 num_batch_elig fixed bin (35), 1 196 2 deadline_mode fixed bin (35), /* 0=> ti sorts, else deadline sorts */ 1 197 2 credits_scattered fixed bin (35), 1 198 2 max_max_eligible fixed bin (30), /* Maximum of maxe */ 1 199 2 max_stopped_stack_0 fixed bin (35), /* Maximum stack_0's suspended by stopped procs */ 1 200 2 stopped_stack_0 fixed bin (35), /* Number stack_0's suspended by stopped procs */ 1 201 2 mos_polling_interval fixed bin (35), /* for heals */ 1 202 2 mos_polling_time fixed bin (71), /* for heals */ 1 203 2 vcpu_response_bounds (VCPU_RESPONSE_BOUNDS) fixed bin (35), 1 204 2 vcpu_response_bounds_size fixed bin (35), 1 205 2 meter_response_time_calls fixed bin (35), 1 206 2 meter_response_time_invalid fixed bin (35), 1 207 2 meter_response_time_overhead fixed bin (71), 1 208 2 init_wait_time fixed bin (71), /* used by wait/notify during initialization */ 1 209 2 init_wait_timeout fixed bin (71), /* notify-timeout interval during initialization */ 1 210 2 init_timeout_severity fixed bin, /* notify-timeout severity during initialization */ 1 211 2 init_timeout_recurse fixed bin, /* count of NTO recursion during initialization */ 1 212 2 max_timer_register fixed bin (71), /* max cpu burst = # cpus x pre_empt_sample_time */ 1 213 2 pre_empt_sample_time fixed bin (35), /* tuning parameter - max time between samples */ 1 214 2 governing_credit_bank fixed bin (35), /* used for limiting eligibility on governed work classes*/ 1 215 2 process_initial_quantum fixed bin (35), /* eligibility quantum first eligibility */ 1 216 2 default_procs_required bit (8) aligned, /* default mask of CPUs required */ 1 217 2 work_class_idle fixed bin (71), /* idle time due to work class restrictions */ 1 218 1 219 /* Tuning Parameters for Stack Truncation */ 1 220 1 221 2 stk_truncate bit (1) aligned, 1 222 2 stk_truncate_always bit (1) aligned, 1 223 2 stk_trunc_avg_f1 fixed bin (35, 18), 1 224 2 stk_trunc_avg_f2 fixed bin (35, 18), 1 225 2 lock_error_severity fixed bin, /* syserr severity */ 1 226 1 227 2 gv_integration fixed bin (35), /* Integration interval for governing */ 1 228 2 gv_integration_set bit (1) aligned, /* ON => gv_integration set by ctp */ 1 229 2 pauses fixed bin (35), /* Calls to pause (reschedule) */ 1 230 2 volmap_polling_time fixed bin (71), 1 231 2 next_ring0_timer fixed bin (71), /* next time that ring 0 timer goes off */ 1 232 2 realtime_io_priority_switch fixed bin, /* 0 => give I/O interrupt wakeups realtime priotiry */ 1 233 2 realtime_io_deadline fixed bin (35), /* Delta to clock for I/O realtime deadline */ 1 234 2 realtime_io_quantum fixed bin (35), /* Quantum for I/O realtime burst */ 1 235 2 realtime_priorities fixed bin (35), /* Count for metering */ 1 236 2 relinquishes fixed bin (35), /* Calls to relinquish_priority */ 1 237 2 abort_ips_mask bit (36) aligned, /* IPS mask for tc_util$check_abort */ 1 238 1 239 /* 500 octal */ 1 240 1 241 2 uid_array (0:15) bit (36) aligned, /* array from which a uid is chosen (randomly) */ 1 242 2 pad5 (176) fixed bin (35), /* room for expansion compatibly */ 1 243 1 244 /* 1000 octal */ 1 245 1 246 2 pad7 (64) fixed bin (35), 1 247 1 248 /* 1100 octal */ 1 249 1 250 2 pad6 (8) fixed bin (35), 1 251 2 work_class_table aligned, /* array of per workclass information */ 1 252 3 wcte (0:16) aligned like wct_entry, 1 253 1 254 /* 3000 octal */ 1 255 1 256 2 apt fixed bin; 1 257 1 258 dcl wctep ptr; 1 259 1 260 dcl 1 wct_entry aligned based (wctep), /* Work class entry */ 1 261 2 thread unaligned, /* Ready list */ 1 262 3 fp bit (18), /* Head of ready list */ 1 263 3 bp bit (18), /* Tail of ready list */ 1 264 2 flags unaligned, 1 265 3 mnbz bit (1), /* Sentinel bit must not be zero. */ 1 266 3 defined bit (1), 1 267 3 io_priority bit (1), 1 268 3 governed bit (1), 1 269 3 interactive_q bit (1), 1 270 3 pad bit (31), 1 271 2 credits fixed bin (35), /* Current worthiness of group */ 1 272 2 minf fixed bin (35), /* min fraction of cpu */ 1 273 2 pin_weight fixed bin (35), /* number of cycles to pin pages */ 1 274 2 eligibilities fixed bin (35), /* Count of eligibilities awarded */ 1 275 2 cpu_sum fixed bin (71), /* CPU used by members */ 1 276 2 resp1 fixed bin (71), 1 277 2 resp2 fixed bin (71), 1 278 2 quantum1 fixed bin (35), 1 279 2 quantum2 fixed bin (35), 1 280 2 rmeter1 fixed bin (71), 1 281 2 rmeter2 fixed bin (71), 1 282 2 rcount1 fixed bin (35), 1 283 2 rcount2 fixed bin (35), 1 284 2 realtime fixed bin (35), 1 285 2 purging fixed bin (35), 1 286 2 maxel fixed bin (35), 1 287 2 nel fixed bin (35), 1 288 2 number_thinks fixed bin (35), /* number times process entered "think" state */ 1 289 2 number_queues fixed bin (35), /* number times process entered "queued" state */ 1 290 2 total_think_time fixed bin (71), 1 291 2 total_queue_time fixed bin (71), 1 292 1 293 /* The next three arrays correspond to the array vcpu_response_bounds */ 1 294 1 295 2 number_processing (VCPU_RESPONSE_BOUNDS+1) fixed bin (35), /* number times entered "processing" state */ 1 296 2 total_processing_time (VCPU_RESPONSE_BOUNDS+1) fixed bin (71), 1 297 2 total_vcpu_time (VCPU_RESPONSE_BOUNDS+1) fixed bin (71), 1 298 2 maxf fixed bin (35), /* maximum fraction of cpu time */ 1 299 2 governing_credits fixed bin (35), /* for limiting cpu resources */ 1 300 2 pad1 (4) fixed bin (35); 1 301 1 302 1 303 dcl 1 based_sentinel aligned based, /* format of pxss-style sentinel */ 1 304 2 fp bit (18) unal, 1 305 2 bp bit (18) unal, 1 306 2 sentinel bit (36) aligned; 1 307 1 308 dcl VCPU_RESPONSE_BOUNDS fixed bin init (3) int static options (constant); 1 309 1 310 /* END INCLUDE FILE tcm.incl.pl1 */ 26 2 1 /* Begin include file hc_lock.incl.pl1 BIM 2/82 */ 2 2 /* Replaced by hc_fast_lock.incl.pl1 RSC 11/84 because name of structure 2 3* encourages name conflicts. 2 4* USE HC_FAST_LOCK INSTEAD! 2 5**/ 2 6 2 7 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 2 8 2 9 /* format: style3 */ 2 10 2 11 declare lock_ptr pointer; 2 12 declare 1 lock aligned based (lock_ptr), 2 13 2 pid bit (36) aligned, /* holder of lock */ 2 14 2 event bit (36) aligned, /* event associated with lock */ 2 15 2 flags aligned, 2 16 3 notify_sw bit (1) unaligned, 2 17 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 2 18 2 19 /* End include file hc_lock.incl.pl1 */ 27 3 1 /* BEGIN INCLUDE FILE ... apte.incl.pl1 */ 3 2 3 3 /* Modified 1984-11-11 by E. Swenson for IPC event channel validation. */ 3 4 3 5 dcl aptep pointer; 3 6 3 7 dcl 1 apte based (aptep) aligned, /* APT entry declaration for an active (known) process */ 3 8 2 thread unaligned, /* List thread */ 3 9 3 fp bit (18), /* Forward pointer */ 3 10 3 bp bit (18), /* Backward pointer */ 3 11 2 flags unaligned, /* Flags and miscellaneous */ 3 12 3 mbz bit (1), /* This bit must be zero (sentinel bit) */ 3 13 3 wakeup_waiting bit (1), /* ON if process has received wakeup */ 3 14 3 stop_pending bit (1), /* ON if process has received stop connect */ 3 15 3 pre_empted bit (1), /* ON if process is being pre-empted by get_processor */ 3 16 3 hproc bit (1), /* ON if process is hardcore process */ 3 17 3 loaded bit (1), /* ON if required per-process pages are in memory and wired */ 3 18 3 eligible bit (1), /* ON if process is eligible */ 3 19 3 idle bit (1), /* ON if this is an idle process */ 3 20 3 interaction bit (1), /* ON if process has interacted recently */ 3 21 3 pre_empt_pending bit (1), /* ON if process has received pre-empt connect */ 3 22 3 default_procs_required bit (1), /* ON if apte.procs_required is system default */ 3 23 3 realtime_burst bit (1), /* ON if next eligibility is realtime */ 3 24 3 always_loaded bit (1), /* ON if process is not to be unloaded */ 3 25 3 dbr_loaded bit (1), /* ON if DBR is loaded on some CPU */ 3 26 3 being_loaded bit (1), /* ON if somebody loading this process */ 3 27 3 shared_stack_0 bit (1), /* ON if a shared stack_0 is assigned */ 3 28 3 page_wait_flag bit (1), /* flag ON if waiting for page */ 3 29 3 firstsw bit (1), /* OFF until process is intialized */ 3 30 3 state bit (18), /* execution state */ 3 31 2 page_faults fixed bin (35), /* total page faults for the process */ 3 32 2 processid bit (36), /* bit 0-17: offset of ATPE */ 3 33 /* bit 18-35: sequential number */ 3 34 2 te fixed bin (35), /* virtual time since eligibility award */ 3 35 2 ts fixed bin (35), /* virtual time since scheduling */ 3 36 2 ti fixed bin (35), /* virtual time since interaction */ 3 37 2 timax fixed bin (35), /* maximum value allowed for apte.ti */ 3 38 3 39 /* * * * * * * * */ 3 40 3 41 2 ipc_pointers unaligned, 3 42 3 event_thread bit (18), /* relative pointer to ITT list */ 3 43 3 pad3 bit (18), 3 44 2 ips_message bit (36), /* IPS signals pending */ 3 45 2 asteps unaligned, /* relative ASTE pointers */ 3 46 3 pds bit (18), /* PDS (per-process) */ 3 47 3 dseg bit (18), /* DSEG (per-process) */ 3 48 3 prds bit (18), /* PRDS (per-processor) */ 3 49 2 savex7 bit (18) unaligned, /* x7 at call to getwork (return point in pxss) */ 3 50 2 term_processid bit (36), /* process to send wakeup at temination */ 3 51 2 lock_id bit (36), /* File System unqieu ID associated with process */ 3 52 2 time_used_clock fixed bin (71), /* Total CPU time when process last lost CPU */ 3 53 3 54 /* * * * * * * * */ 3 55 3 56 2 wait_event bit (36) aligned, /* Event ID process awaiting */ 3 57 2 wct_index bit (18) unaligned, /* rel offset of WCTE */ 3 58 2 flags2 unaligned, 3 59 3 priority_scheduling bit (1), /* ON if guaranteed eligibility */ 3 60 3 special_wakeups bit (6), /* Special wakeup channels */ 3 61 3 pad7 bit (7), 3 62 3 batch bit (1), /* ON if absentee */ 3 63 3 pr_tag bit (3), /* CPU tag running or last run */ 3 64 2 state_change_time fixed bin (71), /* Time apte.state last changed */ 3 65 2 alarm_event fixed bin (71), /* wakeup event for alarm clock manager */ 3 66 2 alarm_time_thread bit (18) unaligned, /* thread of processes with pending alarms */ 3 67 2 alarm_time bit (54) unaligned, /* wakeup time for alarm */ 3 68 3 69 /* * * * * * */ 3 70 3 71 2 term_channel fixed bin (71), /* wakeup event for account overflow */ 3 72 2 ws_size fixed bin, /* working set estimate for the process */ 3 73 2 temax fixed bin (35), /* maximum eligibility slice (vcpu) */ 3 74 2 deadline fixed bin (71), /* time of next run */ 3 75 2 lock bit (18) unaligned, /* 0 => APTE locked, unlocked => return point of last unlock */ 3 76 2 unusable bit (18) unaligned, /* locking routines destroy */ 3 77 2 cpu_monitor fixed bin (35), /* if not 0, send wakeup to term_processid when virtual cpu 3 78* /* reaches this (units = 1/1024 sec) */ 3 79 2 paging_measure fixed bin (71), /* cumulative memory units */ 3 80 2 access_authorization bit (72), /* authorization of this process */ 3 81 2 dbr fixed bin (71), /* DBR value (constant since DSEG entry-held) */ 3 82 3 83 2 virtual_cpu_time fixed bin (71), /* cumulative virtual CPU time for the process */ 3 84 2 ittes_sent fixed bin (18), /* Unprocessed ITTs sent by this process */ 3 85 2 ittes_got fixed bin (18), /* Unprocessed ITTs received by this process */ 3 86 3 87 /* Cells used to drive and instrument finite-state model for response time 3 88* measurement. Maintained by meter_response_time */ 3 89 3 90 2 current_response_state fixed bin (17) unaligned, /* Process state in modle */ 3 91 2 pad18 bit (18) unaligned, 3 92 2 number_processing fixed bin (35), /* Number interactions */ 3 93 2 last_response_state_time fixed bin (71), /* Clock time at last response state change */ 3 94 2 total_processing_time fixed bin (71), /* Total interaction processing time */ 3 95 3 96 /* * * * * * */ 3 97 3 98 2 begin_interaction_vcpu fixed bin (71), /* Virtual cpu at beginning of last interaction */ 3 99 3 100 /* End of cells for finite-state model */ 3 101 3 102 2 saved_temax fixed bin (35), /* temax at eligibility award */ 3 103 2 procs_required bit (8) unaligned, /* bit mask of CPUs this process can run */ 3 104 2 pad4 bit (28) unaligned, 3 105 2 ipc_r_offset fixed bin (18) unsigned, 3 106 2 ipc_r_factor fixed bin (35) unsigned, 3 107 2 apad (10) fixed bin (35); 3 108 3 109 /* END INCLUDE FILE ... apte.incl.pl1 */ 28 29 30 dcl 1 wci aligned like work_class_info; 31 4 1 /* BEGIN INCLUDE FILE ... work_class_info.incl.pl1 ... Mod REM 1/76 */ 4 2 4 3 4 4 /* This include file provides the structure used to call 4 5* hphcs_$define_work_classes. The version number should be set by 4 6* the caller to WCI_version_N */ 4 7 4 8 dcl wcip ptr; /* pointer on which work_class_info is based */ 4 9 dcl WCI_version_3 fixed bin int static init (3); /* current version of the structure */ 4 10 4 11 dcl 1 work_class_info aligned based (wcip), 4 12 2 version fixed bin, /* version of this structure */ 4 13 2 switches aligned, /* one word of switches */ 4 14 3 user_wc_defined (16) bit (1) unaligned, /* which user work classes are defined ("1"b = defined) */ 4 15 3 set_system_wc bit (1) unaligned, /* = "1"b if percent of system work class to be changed */ 4 16 3 set_user_wc bit (1) unaligned, /* = "1"b if definitions of user work classes to be changed */ 4 17 3 set_sked_mode bit (1) unal, /* "1"b if setting deadline | percent mode */ 4 18 3 set_max_batch_elig bit (1) unal, /* "1"b if setting max batch elig */ 4 19 3 pad bit (16) unal, /* rest of word */ 4 20 2 system_wc_min_pct fixed bin, /* new percent for system work class */ 4 21 2 user_wc_min_pct (16) fixed bin, /* percents for the normal user work classes */ 4 22 2 error_process_id bit (36) aligned, /* returned if we tried to undefine this process's work class */ 4 23 2 error_work_class fixed bin, /* the work class that had the above process in it */ 4 24 /* Version 1 limit */ 4 25 2 flags aligned, 4 26 3 deadline_mode bit (1) unal, /* = "1"b if virtual deadline for the many */ 4 27 3 realtime (16) bit (1) unaligned, /* which user work classes are realtime */ 4 28 3 governed (16) bit (1) unal, /* which work classes are governed ("1"b = defined)*/ 4 29 3 pad bit (3) unal, 4 30 2 max_batch_elig fixed bin, /* if nonzero is max batch elig */ 4 31 2 resp1 (16) fixed bin (35), /* response time after interaction(micro_sec) */ 4 32 2 quantum1 (16) fixed bin (35), /* first time slice after interaction(micro_sec) */ 4 33 2 resp2 (16) fixed bin (35), /* time between sucessive time slices(micro_sec) */ 4 34 2 quantum2 (16) fixed bin (35), /* second and following time slices(micro_sec) */ 4 35 2 wc_max_elig (0:16) fixed bin (35), /* Added if answering service ever decides to use it */ 4 36 2 io_priority (0:16) fixed bin (35), 4 37 2 pin_weight (0:16) fixed bin (35), 4 38 2 user_wc_max_pct (16) fixed bin; /* max percent of total cpu for governed WC */ 4 39 4 40 /* structure for calling hphcs_$tune_work_class */ 4 41 4 42 dcl WCTI_version_3 fixed bin int static init (3); 4 43 4 44 dcl 1 work_class_tune_info aligned based, 4 45 2 version fixed bin, 4 46 2 wc_number fixed bin (35), /* which workclass is to be changed */ 4 47 2 resp1 fixed bin (71), /* time til quantum after interact(micro_sec) */ 4 48 2 resp2 fixed bin (71), /* time between successive quanta(micro_sec) */ 4 49 2 quantum1 fixed bin (35), /* quantum after interaction(micro_sec) */ 4 50 2 quantum2 fixed bin (35), /* successive quanta(micro_sec) */ 4 51 2 maxel fixed bin (35), /* maxeligible for this workclass */ 4 52 2 set aligned, 4 53 3 resp1 bit (1) unal, 4 54 3 resp2 bit (1) unal, 4 55 3 quantum1 bit (1) unal, 4 56 3 quantum2 bit (1) unal, 4 57 3 maxel bit (1) unal, 4 58 3 purging bit (1) unal, 4 59 3 realtime bit (1) unal, 4 60 3 pin_weight bit (1) unal, 4 61 3 io_priority bit (1) unal, 4 62 3 governed bit (1) unal, 4 63 3 interactive_q bit (1) unal, 4 64 3 pad bit (25) unal, 4 65 2 pin_weight fixed bin (35), 4 66 2 max_percent fixed bin (35), 4 67 2 flags aligned, 4 68 3 io_priority bit (1) unal, 4 69 3 purging bit (1) unal, 4 70 3 realtime bit (1) unal, 4 71 3 interactive_q bit (1) unal, 4 72 3 pad bit (33) unal; 4 73 4 74 4 75 /* END INCLUDE FILE ... work_class_info.incl.pl1 */ 32 33 dcl (i, max_wc, wct_base) fixed bin; 34 dcl hundth_of_credits fixed bin; 35 dcl hundth_of_scatter fixed bin; 36 dcl (apte_count, sum, wcnum, size_of_wct_entry) fixed bin (35); 37 dcl ptwp ptr; 38 dcl oldmask fixed bin (71); 39 dcl code fixed bin (35); 40 41 dcl tc_data$ external; 42 43 dcl ( 44 error_table_$action_not_performed, 45 error_table_$obsolete_function, 46 error_table_$bad_work_class, 47 error_table_$bad_arg) 48 external static fixed bin (35); 49 50 dcl clock_ entry returns (fixed bin (71)); 51 dcl (pxss$lock_apt, pxss$unlock_apt) entry (); /* only way to touch apt lock */ 52 53 dcl pmut$wire_and_mask entry (fixed bin (71), ptr); 54 dcl pmut$unwire_unmask entry (fixed bin (71), ptr); 55 dcl wire_proc$wire_me entry (); 56 dcl wire_proc$unwire_me entry (); 57 58 dcl (addr, addrel, bin, divide, fixed, rel, size) builtin; 59 60 /* END DCLS */ 61 62 /* */ 63 64 65 tune_work_class: entry (a_wctup, a_code); 66 67 dcl a_wctup ptr; 68 dcl wctup ptr; 69 70 dcl 1 wctu_info aligned like work_class_tune_info; 71 72 wctup = a_wctup; 73 code = 0; 74 tcmp = addr (tc_data$); 75 wctu_info = wctup -> work_class_tune_info; 76 if wctu_info.version < WCTI_version_3 then do; 77 code = error_table_$obsolete_function; 78 go to TWC_RETURN; 79 end; 80 i = wctu_info.wc_number; 81 if (i<0) | (i>16) then do; 82 code = error_table_$bad_work_class; 83 go to TWC_RETURN; 84 end; 85 if ^tcm.wcte (i).defined then do; 86 code = error_table_$bad_work_class; 87 go to TWC_RETURN; 88 end; 89 90 if wctu_info.set.governed then 91 if wctu_info.max_percent < 0 | wctu_info.max_percent > 100 92 then do; 93 code = error_table_$bad_arg; 94 goto TWC_RETURN; 95 end; 96 97 98 /* Now set the new parameters for this work_class. */ 99 100 call WIRE_LOCK; /* TRAFFIC CONTROLLER LOCKED */ 101 102 if wctu_info.set.resp1 then 103 tcm.wcte (i).resp1 = wctu_info.resp1; 104 if wctu_info.set.resp2 then 105 tcm.wcte (i).resp2 = wctu_info.resp2; 106 if wctu_info.set.quantum1 then 107 tcm.wcte (i).quantum1 = wctu_info.quantum1; 108 if wctu_info.set.quantum2 then 109 tcm.wcte (i).quantum2 = wctu_info.quantum2; 110 if wctu_info.set.purging then 111 if wctu_info.flags.purging then tcm.wcte (i).purging = 1; 112 else tcm.wcte (i).purging = 0; 113 if wctu_info.set.realtime then 114 if wctu_info.flags.realtime then tcm.wcte (i).realtime = 1; 115 else tcm.wcte (i).realtime = 0; 116 if wctu_info.set.maxel then 117 tcm.wcte (i).maxel = wctu_info.maxel; 118 if wctu_info.set.pin_weight then 119 tcm.wcte (i).pin_weight = wctu_info.pin_weight; 120 if wctu_info.set.io_priority then 121 tcm.wcte (i).io_priority = wctu_info.flags.io_priority; 122 if wctu_info.set.governed then do; 123 if wctu_info.max_percent = 0 then 124 tcm.wcte (i).flags.governed = "0"b; 125 else do; 126 hundth_of_scatter = divide (tcm.credits_per_scatter, 100, 17); 127 tcm.wcte (i).maxf = hundth_of_scatter * wctu_info.max_percent; 128 tcm.wcte (i).governing_credits = 0; 129 tcm.wcte (i).flags.governed = "1"b; 130 end; 131 if ^wctu_info.set.interactive_q /* Use default */ 132 then tcm.wcte (i).flags.interactive_q = ^tcm.wcte (i).flags.governed; 133 end; 134 if wctu_info.set.interactive_q 135 then tcm.wcte (i).flags.interactive_q = wctu_info.flags.interactive_q; 136 137 138 call UNLOCK_UNWIRE; /* TRAFFIC CONTROLLER LOCKED */ 139 140 TWC_RETURN: 141 a_code = code; 142 return; 143 144 145 146 define_work_classes: entry (a_wcip, a_code); 147 148 dcl a_wcip ptr; 149 dcl a_code fixed bin (35); 150 151 152 /* First copy args */ 153 154 wcip = a_wcip; 155 156 wci = work_class_info; 157 wci.error_process_id = ""b; 158 wci.error_work_class = 0; 159 code = 0; 160 161 /* If setting user workclasses then compute sum and max_wc */ 162 /* In any case validate arguments */ 163 164 if wci.set_user_wc then do; 165 sum = 0; /* Compute the sum of the "percents" */ 166 max_wc = 0; /* Assume only zeroth exists */ 167 168 do i = 1 to 16; 169 if wci.user_wc_defined (i) then do; 170 if wci.user_wc_min_pct (i) <= 0 171 | (wci.governed (i) 172 & (wci.user_wc_max_pct (i) <= 0 | wci.user_wc_max_pct (i) > 100)) 173 then do; 174 code = error_table_$bad_arg; 175 go to DWC_RETURN; 176 end; 177 sum = sum + wci.user_wc_min_pct (i); 178 max_wc = i; 179 end; 180 end; 181 end; 182 183 if wci.set_system_wc then do; 184 if wci.system_wc_min_pct <= 0 then do; 185 code = error_table_$bad_arg; 186 go to DWC_RETURN; 187 end; 188 end; 189 190 call WIRE_LOCK; /* TRAFFIC CONTROLLER LOCKED */ 191 192 193 /* Verify that existing processes will belong to defined work classes */ 194 195 aptep = addr (tcm.apt); 196 apte_count = tcm.apt_size; 197 size_of_wct_entry = size (wct_entry); 198 wct_base = fixed (rel (addr (tcm.wcte (0))), 18); 199 200 if wci.set_user_wc then do; 201 do i = 1 to apte_count; 202 if ^ apte.flags.idle then /* Idle processes are not in wc's */ 203 if bin (apte.flags.state, 18) ^= 0 then /* Dont worry about empties */ 204 if bin (apte.flags.state, 18) ^= 5 then do; /* Dont worry about stopped */ 205 wcnum = divide (fixed (apte.wct_index, 18) - wct_base, size_of_wct_entry, 17, 0); 206 if wcnum > 0 then do; 207 if ^ wci.user_wc_defined (wcnum) then do; 208 wci.error_process_id = apte.processid; 209 wci.error_work_class = wcnum; 210 go to DWC_UU_RETURN; 211 end; 212 end; 213 end; 214 aptep = addrel (aptep, tcm.apt_entry_size); /* Move to next APTE */ 215 end; 216 217 tcm.max_wct_index = rel (addr (tcm.wcte (max_wc))); 218 219 if sum ^= 0 then /* Scheduler algorithm requires normalization to 100% */ 220 hundth_of_credits = divide (tcm.credits_per_scatter, sum, 17, 0); 221 else hundth_of_credits = 0; /* no user_work_classes defined */ 222 hundth_of_scatter = divide (tcm.credits_per_scatter, 100, 17, 0); 223 224 225 /* Set per-work_class parameters as specified */ 226 227 do i = 1 to 16; 228 if wci.user_wc_defined (i) then do; 229 tcm.wcte (i).flags.defined = "1"b; 230 tcm.wcte (i).minf = fixed (wci.user_wc_min_pct (i), 7) * hundth_of_credits; 231 /* Set credits to a modest amount. */ 232 tcm.wcte (i).credits = tcm.wcte (i).minf + tcm.telast; 233 end; 234 else do; 235 tcm.wcte (i).flags.defined = "0"b; 236 tcm.wcte (i).credits, 237 tcm.wcte (i).minf = 0; 238 end; 239 tcm.wcte (i).purging = 1; 240 tcm.wcte (i).maxel = 0; 241 if wci.version >= 2 & wci.user_wc_defined (i) then do; 242 if wci.realtime (i) then tcm.wcte.realtime (i) = 1; 243 else tcm.wcte (i).realtime = 0; 244 tcm.wcte (i).resp1 = wci.resp1 (i); 245 tcm.wcte (i).quantum1 = wci.quantum1 (i); 246 tcm.wcte (i).resp2 = wci.resp2 (i); 247 tcm.wcte (i).quantum2 = wci.quantum2 (i); 248 end; 249 else do; /* set default parms for this wc */ 250 tcm.wcte (i).resp1 = 4000000; /* 4sec */ 251 tcm.wcte (i).quantum1 = 500000; /* half sec */ 252 tcm.wcte (i).resp2 = 32000000; /* 32 sec */ 253 tcm.wcte (i).quantum2 = 1000000; /* one sec */ 254 tcm.wcte (i).realtime = 0; 255 end; 256 if wci.version >= 3 & wci.user_wc_defined (i) 257 & wci.governed (i) then do; 258 tcm.wcte (i).flags.governed = "1"b; 259 tcm.wcte (i).maxf = hundth_of_scatter * wci.user_wc_max_pct (i); 260 end; 261 else tcm.wcte (i).flags.governed = "0"b; 262 tcm.wcte (i).flags.interactive_q = ^tcm.wcte (i).flags.governed; 263 tcm.wcte (i).governing_credits = 0; 264 end; 265 end; 266 267 /* Set global parameters if requested. */ 268 269 270 if wci.set_sked_mode then tcm.deadline_mode = bin (wci.deadline_mode, 1); 271 if wci.set_max_batch_elig then tcm.max_batch_elig = wci.max_batch_elig; 272 273 if wci.set_system_wc then do; 274 tcm.wcte (0).minf = fixed (wci.system_wc_min_pct, 7) 275 * divide (tcm.credits_per_scatter, 100, 17, 0); 276 tcm.wcte (0).credits = tcm.wcte (0).minf + tcm.telast; 277 end; 278 279 280 /* Re-initialize metering data */ 281 if wci.set_user_wc | wci.set_system_wc then do; 282 do i = 0 to 16; 283 tcm.wcte (i).cpu_sum, 284 tcm.wcte (i).eligibilities = 0; 285 end; 286 tcm.define_wc_time = clock_ (); 287 tcm.processor_time_at_define_wc = tcm.processor_time; 288 end; 289 290 DWC_UU_RETURN: 291 call UNLOCK_UNWIRE; /* TRAFFIC CONTROLLER UNLOCKED */ 292 293 294 DWC_RETURN: 295 work_class_info = wci; 296 if code = 0 then 297 if (wci.error_work_class ^= 0) | (wci.error_process_id ^= ""b) 298 then code = error_table_$action_not_performed; 299 a_code = code; 300 return; 301 302 303 /* */ 304 305 /* -------------------------------------------------------------------- */ 306 307 WIRE_LOCK: proc; 308 309 call wire_proc$wire_me (); 310 call pmut$wire_and_mask (oldmask, ptwp); 311 tcmp = addr (tc_data$); 312 call pxss$lock_apt (); /* TRAFFIC CONTROLLER LOCKED HERE */ 313 314 end WIRE_LOCK; 315 316 /* -------------------------------------------------------------------- */ 317 318 UNLOCK_UNWIRE: proc; 319 320 call pxss$unlock_apt (); /* TRAFFIC CONTROLLER UNLOCKED HERE */ 321 call pmut$unwire_unmask (oldmask, ptwp); 322 call wire_proc$unwire_me (); 323 324 end UNLOCK_UNWIRE; 325 326 327 end tc; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0801.0 tc.pl1 >spec>install>1110>tc.pl1 26 1 01/30/85 1523.9 tcm.incl.pl1 >ldd>include>tcm.incl.pl1 27 2 01/06/85 1422.1 hc_lock.incl.pl1 >ldd>include>hc_lock.incl.pl1 28 3 01/06/85 1422.2 apte.incl.pl1 >ldd>include>apte.incl.pl1 32 4 06/21/82 1202.4 work_class_info.incl.pl1 >ldd>include>work_class_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. VCPU_RESPONSE_BOUNDS constant fixed bin(17,0) initial dcl 1-308 ref 85 85 85 85 102 102 102 102 104 104 104 104 106 106 106 106 108 108 108 108 110 110 110 110 112 112 112 112 113 113 113 113 115 115 115 115 116 116 116 116 118 118 118 118 120 120 120 120 123 123 123 123 127 127 127 127 127 127 127 128 128 128 128 128 128 128 129 129 129 129 131 131 131 131 131 131 131 131 134 134 134 134 195 195 195 195 197 197 197 198 217 217 217 217 229 229 229 229 230 230 230 230 232 232 232 232 232 232 232 232 235 235 235 235 236 236 236 236 236 236 236 236 239 239 239 239 240 240 240 240 242 242 242 242 243 243 243 243 244 244 244 244 245 245 245 245 246 246 246 246 247 247 247 247 250 250 250 250 251 251 251 251 252 252 252 252 253 253 253 253 254 254 254 254 258 258 258 258 259 259 259 259 259 259 259 261 261 261 261 262 262 262 262 262 262 262 262 263 263 263 263 263 263 263 274 276 276 283 283 283 283 283 283 283 283 WCTI_version_3 constant fixed bin(17,0) initial dcl 4-42 ref 76 a_code parameter fixed bin(35,0) dcl 149 set ref 65 140* 146 299* a_wcip parameter pointer dcl 148 ref 146 154 a_wctup parameter pointer dcl 67 ref 65 72 addr builtin function dcl 58 ref 74 195 198 217 311 addrel builtin function dcl 58 ref 214 apt based fixed bin(17,0) level 2 dcl 1-11 set ref 195 apt_entry_size 327 based fixed bin(18,0) level 2 dcl 1-11 ref 214 apt_size 313 based fixed bin(18,0) level 2 dcl 1-11 ref 196 apte based structure level 1 dcl 3-7 apte_count 000345 automatic fixed bin(35,0) dcl 36 set ref 196* 201 aptep 000102 automatic pointer dcl 3-5 set ref 195* 202 202 202 205 208 214* 214 based_sentinel based structure level 1 dcl 1-303 bin builtin function dcl 58 ref 202 202 270 clock_ 000022 constant entry external dcl 50 ref 286 code 000356 automatic fixed bin(35,0) dcl 39 set ref 73* 77* 82* 86* 93* 140 159* 174* 185* 296 296* 299 cpu_sum based fixed bin(71,0) array level 4 dcl 1-11 set ref 283* credits based fixed bin(35,0) array level 4 dcl 1-11 set ref 232* 236* 276* credits_per_scatter 412 based fixed bin(35,0) level 2 dcl 1-11 ref 126 219 222 274 deadline_mode 25 000104 automatic bit(1) level 3 in structure "wci" packed packed unaligned dcl 30 in procedure "tc" set ref 270 deadline_mode 420 based fixed bin(35,0) level 2 in structure "tcm" dcl 1-11 in procedure "tc" set ref 270* define_wc_time 414 based fixed bin(71,0) level 2 dcl 1-11 set ref 286* defined based bit(1) array level 5 packed packed unaligned dcl 1-11 set ref 85 229* 235* divide builtin function dcl 58 ref 126 205 219 222 274 eligibilities based fixed bin(35,0) array level 4 dcl 1-11 set ref 283* error_process_id 23 000104 automatic bit(36) level 2 dcl 30 set ref 157* 208* 296 error_table_$action_not_performed 000012 external static fixed bin(35,0) dcl 43 ref 296 error_table_$bad_arg 000020 external static fixed bin(35,0) dcl 43 ref 93 174 185 error_table_$bad_work_class 000016 external static fixed bin(35,0) dcl 43 ref 82 86 error_table_$obsolete_function 000014 external static fixed bin(35,0) dcl 43 ref 77 error_work_class 24 000104 automatic fixed bin(17,0) level 2 dcl 30 set ref 158* 209* 296 fixed builtin function dcl 58 ref 198 205 230 274 flags 1 based structure level 2 in structure "apte" packed packed unaligned dcl 3-7 in procedure "tc" flags based structure array level 4 in structure "tcm" packed packed unaligned dcl 1-11 in procedure "tc" flags 14 000362 automatic structure level 2 in structure "wctu_info" dcl 70 in procedure "tc" flags 25 000104 automatic structure level 2 in structure "wci" dcl 30 in procedure "tc" governed 11(09) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 90 122 governed 25(17) 000104 automatic bit(1) array level 3 in structure "wci" packed packed unaligned dcl 30 in procedure "tc" set ref 170 256 governed based bit(1) array level 5 in structure "tcm" packed packed unaligned dcl 1-11 in procedure "tc" set ref 123* 129* 131 258* 261* 262 governing_credits based fixed bin(35,0) array level 4 dcl 1-11 set ref 128* 263* hundth_of_credits 000343 automatic fixed bin(17,0) dcl 34 set ref 219* 221* 230 hundth_of_scatter 000344 automatic fixed bin(17,0) dcl 35 set ref 126* 127 222* 259 i 000340 automatic fixed bin(17,0) dcl 33 set ref 80* 81 81 85 102 104 106 108 110 112 113 115 116 118 120 123 127 128 129 131 131 134 168* 169 170 170 170 170 177 178* 201* 227* 228 229 230 230 232 232 235 236 236 239 240 241 242 242 243 244 244 245 245 246 246 247 247 250 251 252 253 254 256 256 258 259 259 261 262 262 263* 282* 283 283* idle 1(07) based bit(1) level 3 packed packed unaligned dcl 3-7 ref 202 interactive_q 14(03) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 134 interactive_q 11(10) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 131 134 interactive_q based bit(1) array level 5 in structure "tcm" packed packed unaligned dcl 1-11 in procedure "tc" set ref 131* 134* 262* io_priority 14 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 120 io_priority 11(08) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 120 io_priority based bit(1) array level 5 in structure "tcm" packed packed unaligned dcl 1-11 in procedure "tc" set ref 120* lock based structure level 1 dcl 2-12 max_batch_elig 26 000104 automatic fixed bin(17,0) level 2 in structure "wci" dcl 30 in procedure "tc" set ref 271 max_batch_elig 416 based fixed bin(35,0) level 2 in structure "tcm" dcl 1-11 in procedure "tc" set ref 271* max_percent 13 000362 automatic fixed bin(35,0) level 2 dcl 70 set ref 90 90 123 127 max_wc 000341 automatic fixed bin(17,0) dcl 33 set ref 166* 178* 217 max_wct_index 405 based bit(18) level 2 dcl 1-11 set ref 217* maxel 10 000362 automatic fixed bin(35,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 116 maxel 11(04) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 116 maxel based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 116* 240* maxf based fixed bin(35,0) array level 4 dcl 1-11 set ref 127* 259* minf based fixed bin(35,0) array level 4 dcl 1-11 set ref 230* 232 236* 274* 276 oldmask 000354 automatic fixed bin(71,0) dcl 38 set ref 310* 321* pin_weight 11(07) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 118 pin_weight 12 000362 automatic fixed bin(35,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 118 pin_weight based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 118* pmut$unwire_unmask 000032 constant entry external dcl 54 ref 321 pmut$wire_and_mask 000030 constant entry external dcl 53 ref 310 processid 3 based bit(36) level 2 dcl 3-7 ref 208 processor_time 42 based fixed bin(71,0) level 2 dcl 1-11 ref 287 processor_time_at_define_wc 270 based fixed bin(71,0) level 2 dcl 1-11 set ref 287* ptwp 000352 automatic pointer dcl 37 set ref 310* 321* purging 14(01) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 110 purging based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 110* 112* 239* purging 11(05) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 110 pxss$lock_apt 000024 constant entry external dcl 51 ref 312 pxss$unlock_apt 000026 constant entry external dcl 51 ref 320 quantum1 11(02) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 106 quantum1 6 000362 automatic fixed bin(35,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 106 quantum1 based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 106* 245* 251* quantum1 47 000104 automatic fixed bin(35,0) array level 2 in structure "wci" dcl 30 in procedure "tc" set ref 245 quantum2 7 000362 automatic fixed bin(35,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 108 quantum2 107 000104 automatic fixed bin(35,0) array level 2 in structure "wci" dcl 30 in procedure "tc" set ref 247 quantum2 based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 108* 247* 253* quantum2 11(03) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 108 realtime based fixed bin(35,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 113* 115* 242* 243* 254* realtime 14(02) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 113 realtime 25(01) 000104 automatic bit(1) array level 3 in structure "wci" packed packed unaligned dcl 30 in procedure "tc" set ref 242 realtime 11(06) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 113 rel builtin function dcl 58 ref 198 217 resp1 2 000362 automatic fixed bin(71,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 102 resp1 27 000104 automatic fixed bin(35,0) array level 2 in structure "wci" dcl 30 in procedure "tc" set ref 244 resp1 11 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 102 resp1 based fixed bin(71,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 102* 244* 250* resp2 based fixed bin(71,0) array level 4 in structure "tcm" dcl 1-11 in procedure "tc" set ref 104* 246* 252* resp2 67 000104 automatic fixed bin(35,0) array level 2 in structure "wci" dcl 30 in procedure "tc" set ref 246 resp2 4 000362 automatic fixed bin(71,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 104 resp2 11(01) 000362 automatic bit(1) level 3 in structure "wctu_info" packed packed unaligned dcl 70 in procedure "tc" set ref 104 set 11 000362 automatic structure level 2 dcl 70 set_max_batch_elig 1(19) 000104 automatic bit(1) level 3 packed packed unaligned dcl 30 set ref 271 set_sked_mode 1(18) 000104 automatic bit(1) level 3 packed packed unaligned dcl 30 set ref 270 set_system_wc 1(16) 000104 automatic bit(1) level 3 packed packed unaligned dcl 30 set ref 183 273 281 set_user_wc 1(17) 000104 automatic bit(1) level 3 packed packed unaligned dcl 30 set ref 164 200 281 size builtin function dcl 58 ref 197 size_of_wct_entry 000350 automatic fixed bin(35,0) dcl 36 set ref 197* 205 state 1(18) based bit(18) level 3 packed packed unaligned dcl 3-7 ref 202 202 sum 000346 automatic fixed bin(35,0) dcl 36 set ref 165* 177* 177 219 219 switches 1 000104 automatic structure level 2 dcl 30 system_wc_min_pct 2 000104 automatic fixed bin(17,0) level 2 dcl 30 set ref 184 274 tc_data$ 000010 external static fixed bin(17,0) dcl 41 set ref 74 311 tcm based structure level 1 dcl 1-11 tcmp 000100 automatic pointer dcl 1-9 set ref 74* 85 102 104 106 108 110 112 113 115 116 118 120 123 126 127 128 129 131 131 134 195 196 198 214 217 217 219 222 229 230 232 232 232 235 236 236 239 240 242 243 244 245 246 247 250 251 252 253 254 258 259 261 262 262 263 270 271 274 274 276 276 276 283 283 286 287 287 311* telast 344 based fixed bin(30,0) level 2 dcl 1-11 ref 232 276 user_wc_defined 1 000104 automatic bit(1) array level 3 packed packed unaligned dcl 30 set ref 169 207 228 241 256 user_wc_max_pct 212 000104 automatic fixed bin(17,0) array level 2 dcl 30 set ref 170 170 259 user_wc_min_pct 3 000104 automatic fixed bin(17,0) array level 2 dcl 30 set ref 170 177 230 version 000104 automatic fixed bin(17,0) level 2 in structure "wci" dcl 30 in procedure "tc" set ref 241 256 version 000362 automatic fixed bin(17,0) level 2 in structure "wctu_info" dcl 70 in procedure "tc" set ref 76 wc_number 1 000362 automatic fixed bin(35,0) level 2 dcl 70 set ref 80 wci 000104 automatic structure level 1 dcl 30 set ref 156* 294 wcip 000336 automatic pointer dcl 4-8 set ref 154* 156 294 wcnum 000347 automatic fixed bin(35,0) dcl 36 set ref 205* 206 207 209 wct_base 000342 automatic fixed bin(17,0) dcl 33 set ref 198* 205 wct_entry based structure level 1 dcl 1-260 ref 197 wct_index 21 based bit(18) level 2 packed packed unaligned dcl 3-7 ref 205 wcte based structure array level 3 dcl 1-11 set ref 198 217 wctep automatic pointer dcl 1-258 ref 197 wctu_info 000362 automatic structure level 1 dcl 70 set ref 75* wctup 000360 automatic pointer dcl 68 set ref 72* 75 wire_proc$unwire_me 000036 constant entry external dcl 56 ref 322 wire_proc$wire_me 000034 constant entry external dcl 55 ref 309 work_class_info based structure level 1 dcl 4-11 set ref 156 294* work_class_table based structure level 2 dcl 1-11 work_class_tune_info based structure level 1 dcl 4-44 ref 75 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. WCI_version_3 internal static fixed bin(17,0) initial dcl 4-9 lock_ptr automatic pointer dcl 2-11 NAMES DECLARED BY EXPLICIT CONTEXT. DWC_RETURN 002533 constant label dcl 294 ref 175 186 DWC_UU_RETURN 002532 constant label dcl 290 ref 210 TWC_RETURN 001334 constant label dcl 140 ref 78 83 87 94 UNLOCK_UNWIRE 002603 constant entry internal dcl 318 ref 138 290 WIRE_LOCK 002554 constant entry internal dcl 307 ref 100 190 define_work_classes 001342 constant entry external dcl 146 tc 000015 constant entry external dcl 13 tune_work_class 000027 constant entry external dcl 65 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3020 3060 2630 3030 Length 3324 2630 40 230 170 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tc 296 external procedure is an external procedure. WIRE_LOCK internal procedure shares stack frame of external procedure tc. UNLOCK_UNWIRE internal procedure shares stack frame of external procedure tc. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tc 000100 tcmp tc 000102 aptep tc 000104 wci tc 000336 wcip tc 000340 i tc 000341 max_wc tc 000342 wct_base tc 000343 hundth_of_credits tc 000344 hundth_of_scatter tc 000345 apte_count tc 000346 sum tc 000347 wcnum tc 000350 size_of_wct_entry tc 000352 ptwp tc 000354 oldmask tc 000356 code tc 000360 wctup tc 000362 wctu_info tc THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. clock_ pmut$unwire_unmask pmut$wire_and_mask pxss$lock_apt pxss$unlock_apt wire_proc$unwire_me wire_proc$wire_me THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_arg error_table_$bad_work_class error_table_$obsolete_function tc_data$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000014 65 000022 72 000034 73 000040 74 000041 75 000043 76 000046 77 000051 78 000053 80 000054 81 000056 82 000061 83 000063 85 000064 86 000134 87 000136 90 000137 93 000146 94 000150 100 000151 102 000152 104 000220 106 000266 108 000334 110 000402 112 000454 113 000515 115 000567 116 000630 118 000676 120 000744 122 001016 123 001021 126 001073 127 001077 128 001153 129 001160 131 001174 134 001261 138 001333 140 001334 142 001337 146 001340 154 001347 156 001353 157 001356 158 001357 159 001360 164 001361 165 001364 166 001365 168 001366 169 001373 170 001377 174 001412 175 001415 177 001416 178 001422 180 001424 183 001426 184 001431 185 001433 186 001436 190 001437 195 001440 196 001503 197 001506 198 001510 200 001516 201 001521 202 001532 205 001544 206 001551 207 001552 208 001556 209 001560 210 001561 214 001562 215 001566 217 001570 219 001633 221 001642 222 001643 227 001646 228 001653 229 001660 230 001731 232 001744 233 001754 235 001755 236 002026 239 002041 240 002107 241 002113 242 002120 243 002134 244 002140 245 002147 246 002155 247 002164 248 002172 250 002173 251 002201 252 002207 253 002215 254 002223 256 002227 258 002241 259 002255 260 002267 261 002270 262 002304 263 002334 264 002344 270 002346 271 002355 273 002363 274 002370 276 002424 281 002434 282 002441 283 002445 285 002515 286 002517 287 002527 290 002532 294 002533 296 002537 299 002550 300 002553 307 002554 309 002555 310 002562 311 002573 312 002576 314 002602 318 002603 320 002604 321 002611 322 002622 324 002627 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved