/* BEGIN INCLUDE FILE abs_data.incl.pl1 */ /* Absentee data is an array of entries that are threaded into a number of different lists. The skip list is the only "real" list, in the sense that all non-free entries are threaded into it, and the other lists (the defer, ready, cputime, lc, and resource lists) each consist of subsets of the skip list. (The free list does not count, as far as the logic goes, since it is just a list of free array entries that can be used when a new entry is to be added to the skip list. If there are no free entries, a new one is made at the end of the array.) The skip, cputime, and readys are actually sixs, one per queue. The defer list contains requests from all six queues, ordered by their deferred times. When a deferred request reaches the head of the defer list, and then its time arrives, it is moved to the tail of the ready list for its queue. Then it is marked as to be run after the request which is currently at the end of its queue. The intention is that when a request's deferred time arrives, it will be treated as if it had just been entered. Requests in the ready list are ordered by their deferred time, so when a request is found whose "position" in the queue (i.e., the job it must be run after) has not yet reached the head of the queue, it is known that none after it can be run either. A request that is deferred indefinitely is placed at the end of the defer list, and when the operator releases it, it is moved into the ready list as if its time had just arrived. The resource list, although logically a separate list, is implemented as the first part of the ready list, so the two can be searched as one continuous list. It contains requests waiting for resource reservations. They are ordered by their original queue positions, and they are each free to run as soon as their required resources become available. A request refused login by load control is waiting for a "resource" - namely a free slot in its load control group. Thus it is held in the resource list. Requests in the cputime list are deferred because their cpu time limits are higher than their queue's max limit for the current shift. These requests are ordered by their original queue positions. Whenever the max limit for any queue is raised, the cputime list for that queue is scanned from the beginning for requests that can now be run, and those requests are run before any more requests are taken from the queue. Requests in the skip list but in none of the others are jobs that are running now, and should be deleted from the queue after they log out. The run list is the first part of the skip list. It exists so that jobs started by the abs run operator command can have skip list entries. Such jobs can not be put at the tail of the skip list, because they have been taken from an arbitrary spot in the queue, for immediate running, and the last skip list entry serves as an indicator of where in the queue to read the next job from. The load control list (lc list) is a single list (i.e., not one per queue), made up of entries that are on the resource list for some queue. Entries are placed in this list when they are deferred by load control. The purpose of this list is to remember what users, projects, and groups are having their jobs deferred by load control, so we can avoid trying to log in other jobs from the same users, projects, or groups, when it is certian that they will also be deferred. This list is built up as we try to find a job that can log in, and it is destroyed just before we go blocked with no more work to do; it is NOT destroyed when we go blocked with more work to do, after sending ourselves an "aum_ctl" wakeup. This segment is maintained by absentee_utility_ and dumped by dump_abs_data. The padding is deliberately arranged to make the header 100 octal words long, and each entry 40 octal words long, for convenient reading of octal dumps. The segment is truncated and rebuilt at each answering service startup, so there is no need to maintain compatibility with old versions of the structure. Modified by T. Casey, May 1978, for resource reservations. Modified by T. Casey, November 1978, for MR7.0, adding cputime list, and queues zero and foreground. Modified by T. Casey, April 1979, for MR7.0a, to add deferral_logged bit. Modified by T. Casey, June 1981, for MR9.0, to add group, person, project, and lc list variables. */ dcl ABS_DATA_version_2 fixed bin int static options (constant) init (2); /* version number of this declaration */ dcl 1 absentee_data aligned based (adp), /* template of internal storage area */ /* adp is declared (static or automatic) by users of this file */ 2 version fixed bin, /* version of this structure */ 2 last fixed bin, /* current number of entries */ 2 tail_free fixed bin, /* index of last free entry - if zero no free entry */ 2 head_defer fixed bin, /* index of first deferred request */ 2 tail_defer fixed bin, /* index of last deferred request */ 2 head_lc fixed bin, /* index of first entry on lc list */ 2 tail_lc fixed bin, /* index of last entry on lc list */ 2 rebuilding bit (1) unaligned, /* on if lists being rebuilt following loop in list search */ 2 asd_pad1 bit (35) unaligned, 2 last_rsc (-1:4) fixed bin, /* to detect when one pass thru resource list is done */ 2 asd_pad2 (2) fixed bin, /* pad to end of 2nd 8-word block */ /* begin 6-element array of 8-word blocks */ 2 queue_data (-1:4) aligned, 3 head_ready fixed bin, /* index of first ready request in queue */ 3 tail_ready fixed bin, /* ........ last ready ................. */ 3 head_skip fixed bin, 3 tail_skip fixed bin, /* ........ last skip .................. */ 3 tail_run fixed bin, 3 tail_resource fixed bin, 3 head_cput fixed bin, 3 tail_cput fixed bin, /* end of 8th 8-word block - the header is 64 words long and the entries begin at 100 octal */ 2 entry (0 refer (absentee_data.last)) aligned like abs_info; /* entries are 32 words long (40 octal) */ dcl aip ptr init (null); dcl 1 abs_info aligned based (aip), /* description of each entry */ 2 next_skip fixed bin, 2 prev_skip fixed bin, 2 next_defer fixed bin, 2 prev_defer fixed bin, 2 next_ready fixed bin, 2 prev_ready fixed bin, 2 next_cput fixed bin, 2 prev_cput fixed bin, /* 10 octal */ 2 prev_free fixed bin, /* index of previous free entry in free list */ 2 queue fixed bin, 2 switches, 3 can_run bit (1) unaligned, /* part of ready list - if on can run */ 3 waiting_for_resources bit (1) unaligned, /* part of resource list */ 3 waiting_for_load_ctl bit (1) unaligned, 3 free_list bit (1) unaligned, 3 skip_list bit (1) unaligned, 3 defer_list bit (1) unaligned, 3 ready_list bit (1) unaligned, 3 resource_list bit (1) unaligned, 3 cput_list bit (1) unaligned, 3 run_list bit (1) unaligned, 3 deferral_notified bit (1) unaligned, 3 deferral_logged bit (1) unaligned, 3 lc_list bit (1) unaligned, /* entry is in lc list */ 2 lc_reason fixed bin (2) unsigned unaligned, /* 1=user limit; 2=project limit; 3=group limit */ 2 asd_pad3 bit (21) unaligned, 2 cpu_limit fixed bin, /* time limit, if on cput list */ 2 time fixed bin (71), /* part of defer list - deferred time */ 2 message_id bit (72) aligned, /* id of this request in the queue message segment */ /* 20 octal */ 2 last_message_id bit (72) aligned, /* request which must be run before this request can */ 2 request_id fixed bin (71), /* request id of this request */ 2 group char (8), 2 prev_lc fixed bin, /* index of previous entry on load control (lc) list */ 2 next_lc fixed bin, /* index of next entry on lc list */ /* 30 octal */ 2 person char (22) unaligned, 2 asd_pad4 char (1) unaligned, 2 project char (9) unaligned; /* an entry is 40 octal words long */ /* END INCLUDE FILE ... abs_data.incl.pl1 */ */ ----------------------------------------------------------- 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 */