COMPILATION LISTING OF SEGMENT unthread_kste Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 10/28/82 1156.8 mst Thu Options: optimize list 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 unthread_kste: proc (a_kstep); 12 13 /* 14* 15* Written April 1975 by R. Bratt 16* 17* Last modified by: 18* 19* ---> unthread_kste removes a kste from the list on which it is threaded. If 20* kste.entryp = 0 then the kste is assumed to be threaded onto the free list. Otherwise, 21* the kste is assumed to be threaded into the appropriate (as determined by kste.uid) 22* hash class list. 23* USAGE: call unthread_kste (kstep); 24* 25* kstep ptr --- pointer to the kste to be unthreaded (input) 26* 27**/ 28 29 dcl head bit (18) unaligned based (headp), 30 headp ptr, 31 rel_kstep bit (18) aligned, 32 a_kstep ptr; 33 1 1 /* BEGIN INCLUDE FILE - - - kst.incl.pl1 - - - last modified March 1976 by R. Bratt */ 1 2 1 3 dcl pds$kstp ext ptr, 1 4 (kstp, kstep) ptr; 1 5 1 6 dcl 1 kst aligned based (kstp), /* KST header declaration */ 1 7 2 lowseg fixed bin (17), /* lowest segment number described by kst */ 1 8 2 highseg fixed bin (17), /* highest segment number described by kst */ 1 9 2 highest_used_segno fixed bin (17), /* highest segment number yet used */ 1 10 2 lvs fixed bin (8), /* number of private LVs this process is connected to */ 1 11 2 time_of_bootload fixed bin (71), /* bootload time during prelinking */ 1 12 2 garbage_collections fixed bin (17) unaligned, /* KST garbage collections */ 1 13 2 entries_collected fixed bin (17) unaligned, /* KST entries recovered by garbage collection */ 1 14 2 free_list bit (18) unaligned, /* relative pointer to first free kste */ 1 15 2 prelinked_ring (7) bit (1) unaligned, /* rings prelinked in process */ 1 16 2 template bit (1) unaligned, /* this is a template kst if set */ 1 17 2 unused_2 bit (10) unaligned, 1 18 2 uid_hash_bucket (0 : 127) bit (18) unaligned, /* hash buckets */ 1 19 2 kst_entry (0 refer (kst.lowseg):0 refer (kst.highseg)) aligned like kste, /* kst entries */ 1 20 2 lv (1:256) bit (36), /* private logical volume connection list */ 1 21 2 end_of_kst bit (36); 1 22 1 23 dcl 1 kste based (kstep) aligned, /* KST entry declaration */ 1 24 2 fp bit (18) unaligned, /* forward rel pointer */ 1 25 2 segno fixed bin (17) unaligned, /* segment number of this kste */ 1 26 2 usage_count (0:7) fixed bin (8) unaligned, /* outstanding initiates/ring */ 1 27 2 entryp ptr unaligned, /* branch pointer */ 1 28 2 uid bit (36) aligned, /* unique identifier */ 1 29 2 access_information unaligned, 1 30 3 dtbm bit (36), /* date time branch modified */ 1 31 3 extended_access bit (33), /* extended access from the branch */ 1 32 3 access bit (3), /* rew */ 1 33 3 ex_rb (3) bit (3), /* ring brackets from branch */ 1 34 2 hdr bit (3) unaligned, /* highest detectable ring */ 1 35 2 flags unaligned, 1 36 3 dirsw bit (1), /* directory switch */ 1 37 3 allow_write bit (1), /* set if initiated with write permission */ 1 38 3 priv_init bit (1), /* privileged initiation */ 1 39 3 tms bit (1), /* transparent modification switch */ 1 40 3 tus bit (1), /* transparent usage switch */ 1 41 3 tpd bit (1), /* transparent paging device switch */ 1 42 3 audit bit (1), /* audit switch */ 1 43 3 explicit_deact_ok bit (1), /* set if I am willing to have a user force deactivate */ 1 44 3 pad bit (3), 1 45 2 infcount fixed bin (12) unaligned; /* _i_f dirsw _t_h_e_n inferior count _e_l_s_e lv index */ 1 46 1 47 /* END INCLUDE FILE - - - - - - - - - - - - kst.incl.pl1 - - - - - - - - - - - - */ 34 35 36 kstp = pds$kstp; 37 if unspec (a_kstep -> kste.entryp) = "0"b 38 then headp = addr (kst.free_list); 39 else headp = addr (kst.uid_hash_bucket (mod (fixed (a_kstep -> kste.uid), dim (kst.uid_hash_bucket, 1)))); 40 41 rel_kstep = rel (a_kstep); 42 if head = rel_kstep 43 then head = a_kstep -> kste.fp; 44 else do kstep = ptr (a_kstep, head) repeat (ptr (kstep, kste.fp)) while (rel (kstep) ^= "0"b); 45 if kste.fp = rel_kstep 46 then do; 47 kste.fp = a_kstep -> kste.fp; 48 return; 49 end; 50 end; 51 52 end unthread_kste; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/27/82 1127.4 unthread_kste.pl1 >dumps>old>recomp>unthread_kste.pl1 34 1 09/13/76 1100.1 kst.incl.pl1 >ldd>include>kst.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. a_kstep parameter pointer dcl 29 ref 11 37 39 41 42 44 47 entryp 3 based pointer level 2 packed unaligned dcl 1-23 ref 37 fp based bit(18) level 2 packed unaligned dcl 1-23 set ref 42 45 47* 47 50 free_list 7 based bit(18) level 2 packed unaligned dcl 1-6 set ref 37 head based bit(18) unaligned dcl 29 set ref 42 42* 44 headp 000100 automatic pointer dcl 29 set ref 37* 39* 42 42 44 kst based structure level 1 dcl 1-6 kste based structure level 1 dcl 1-23 kstep 000106 automatic pointer dcl 1-3 set ref 44* 44* 45 47* 50 50 kstp 000104 automatic pointer dcl 1-3 set ref 36* 37 39 39 pds$kstp 000010 external static pointer dcl 1-3 ref 36 rel_kstep 000102 automatic bit(18) dcl 29 set ref 41* 42 45 uid 4 based bit(36) level 2 dcl 1-23 ref 39 uid_hash_bucket 10 based bit(18) array level 2 packed unaligned dcl 1-6 set ref 39 39 NAME DECLARED BY EXPLICIT CONTEXT. unthread_kste 000004 constant entry external dcl 11 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 37 39 dim builtin function ref 39 fixed builtin function ref 39 mod builtin function ref 39 ptr builtin function ref 44 50 rel builtin function ref 41 44 unspec builtin function ref 37 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 132 144 76 142 Length 322 76 12 142 33 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME unthread_kste 73 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME unthread_kste 000100 headp unthread_kste 000102 rel_kstep unthread_kste 000104 kstp unthread_kste 000106 kstep unthread_kste THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. return mod_fx3 ext_entry NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. pds$kstp CONSTANTS 000075 aa 000000000200 000000 aa 464000000000 BEGIN PROCEDURE unthread_kste ENTRY TO unthread_kste STATEMENT 1 ON LINE 11 unthread_kste: proc (a_kstep); 000001 at 000001000000 000002 ta 000001000000 000003 da 000027300000 000004 aa 000120 6270 00 eax7 80 000005 aa 7 00034 3521 20 epp2 pr7|28,* 000006 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000007 aa 000002000000 000010 aa 000000000000 STATEMENT 1 ON LINE 36 kstp = pds$kstp; 000011 la 4 00010 3735 20 epp7 pr4|8,* pds$kstp 000012 aa 7 00000 3735 20 epp7 pr7|0,* pds$kstp 000013 aa 6 00104 6535 00 spri7 pr6|68 kstp STATEMENT 1 ON LINE 37 if unspec (a_kstep -> kste.entryp) = "0"b then headp = addr (kst.free_list); 000014 aa 6 00032 3715 20 epp5 pr6|26,* 000015 aa 5 00002 3535 20 epp3 pr5|2,* a_kstep 000016 aa 3 00000 3535 20 epp3 pr3|0,* a_kstep 000017 aa 3 00003 2351 00 lda pr3|3 000020 aa 000005 6010 04 tnz 5,ic 000025 000021 aa 6 00104 3515 20 epp1 pr6|68,* kstp 000022 aa 1 00007 3521 00 epp2 pr1|7 kst.free_list 000023 aa 6 00100 2521 00 spri2 pr6|64 headp 000024 aa 000012 7100 04 tra 10,ic 000036 STATEMENT 1 ON LINE 39 else headp = addr (kst.uid_hash_bucket (mod (fixed (a_kstep -> kste.uid), dim (kst.uid_hash_bucket, 1)))); 000025 aa 3 00004 2351 00 lda pr3|4 kste.uid 000026 aa 000044 7730 00 lrl 36 000027 aa 000046 3520 04 epp2 38,ic 000075 = 000000000200 000030 aa 0 00706 7001 00 tsx0 pr0|454 mod_fx3 000031 aa 000022 4020 07 mpy 18,dl 000032 aa 6 00104 3515 20 epp1 pr6|68,* kstp 000033 aa 1 00010 3521 00 epp2 pr1|8 kst.uid_hash_bucket 000034 aa 2 00000 5035 06 abd pr2|0,ql 000035 aa 6 00100 2521 00 spri2 pr6|64 headp STATEMENT 1 ON LINE 41 rel_kstep = rel (a_kstep); 000036 aa 3 00000 6351 00 eaa pr3|0 000037 aa 6 00102 7551 00 sta pr6|66 rel_kstep STATEMENT 1 ON LINE 42 if head = rel_kstep then head = a_kstep -> kste.fp; 000040 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 000041 aa 2 00000 00 0022 descb pr2|0,18 head 000042 aa 6 00110 00 0044 descb pr6|72,36 head 000043 aa 6 00110 1151 00 cmpa pr6|72 head 000044 aa 000005 6010 04 tnz 5,ic 000051 000045 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 000046 aa 3 00000 00 0022 descb pr3|0,18 kste.fp 000047 aa 2 00000 00 0022 descb pr2|0,18 head 000050 aa 000024 7100 04 tra 20,ic 000074 STATEMENT 1 ON LINE 44 else do kstep = ptr (a_kstep, head) repeat (ptr (kstep, kste.fp)) while (rel (kstep) ^= "0"b); 000051 aa 6 00110 2351 00 lda pr6|72 head 000052 aa 000000 3134 01 eawp3 0,au 000053 aa 6 00106 2535 00 spri3 pr6|70 kstep 000054 aa 6 00106 3735 20 epp7 pr6|70,* kstep 000055 aa 7 00000 6351 00 eaa pr7|0 000056 aa 000016 6000 04 tze 14,ic 000074 STATEMENT 1 ON LINE 45 if kste.fp = rel_kstep then do; 000057 aa 7 00000 2351 00 lda pr7|0 kste.fp 000060 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 000061 aa 6 00110 7551 00 sta pr6|72 kste.fp 000062 aa 6 00102 1151 00 cmpa pr6|66 rel_kstep 000063 aa 000006 6010 04 tnz 6,ic 000071 STATEMENT 1 ON LINE 47 kste.fp = a_kstep -> kste.fp; 000064 aa 6 00032 3715 20 epp5 pr6|26,* 000065 aa 5 00002 3535 20 epp3 pr5|2,* a_kstep 000066 aa 3 00000 2351 20 lda pr3|0,* kste.fp 000067 aa 7 00000 5511 60 stba pr7|0,60 kste.fp STATEMENT 1 ON LINE 48 return; 000070 aa 0 00631 7101 00 tra pr0|409 return STATEMENT 1 ON LINE 49 end; STATEMENT 1 ON LINE 50 end; 000071 aa 000000 3334 01 eawp7 0,au 000072 aa 6 00106 6535 00 spri7 pr6|70 kstep 000073 aa 777761 7100 04 tra -15,ic 000054 STATEMENT 1 ON LINE 52 end unthread_kste; 000074 aa 0 00631 7101 00 tra pr0|409 return END PROCEDURE unthread_kste ----------------------------------------------------------- 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