COMPILATION LISTING OF SEGMENT map_onto_disk 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 1021.2 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* *********************************************************** */ 8 map_onto_disk: proc (pvtx, first_record, num_records, seg_ptr, contents_valid); 9 10 /* Utility procedure to map a segment onto a specified area of disk. 11*Written October 1983, Keith Loepere. */ 12 13 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */ 14 15 dcl addr builtin; 16 dcl bin builtin; 17 dcl bit builtin; 18 dcl contents_valid bit (1) aligned parameter; /* 0 => contents of disk are not important, map using nulled addresses */ 19 dcl first_record fixed bin (20) parameter; /* first record on disk to map */ 20 dcl make_sdw$no_pages entry (fixed bin (15), fixed bin (71), ptr, ptr); 21 dcl num_records fixed bin parameter; /* num records to map */ 22 dcl page fixed bin; /* loop index */ 23 dcl page_table (0:num_records - 1) bit (36) aligned based (ptp); 24 dcl partition_sdw fixed bin (71); /* for created segment */ 25 dcl pmut$swap_sdw entry (ptr, ptr); 26 dcl ptp pointer; /* to page table for segment */ 27 dcl ptw_util_$make_disk entry (ptr, fixed bin (20)); 28 dcl ptw_util_$make_null_disk entry (ptr, fixed bin (20)); 29 dcl pvtx fixed bin parameter; /* pvtx of disk to map */ 30 dcl seg_ptr ptr parameter; /* ptr to resultant segment */ 31 dcl segno builtin; 32 33 34 /* Get an ASTE that describes the segment, with a page table full of null 35*addresses. Then make it point to the disk. */ 36 37 call make_sdw$no_pages (segno (seg_ptr), partition_sdw, astep, ptp); 38 39 aste.pvtx = pvtx; 40 aste.msl, aste.csl, aste.records = bit (bin (num_records, 9), 9); 41 42 do page = 0 to num_records - 1; 43 if contents_valid then call ptw_util_$make_disk (addr (page_table (page)), page + first_record); 44 else call ptw_util_$make_null_disk (addr (page_table (page)), page + first_record); 45 end; 46 47 call pmut$swap_sdw (seg_ptr, addr (partition_sdw)); 48 return; 49 /* BEGIN INCLUDE FILE ...aste.incl.pl1 ... */ 1 2 1 3 /* Template for an AST entry. Length = 12 words. */ 1 4 1 5 /* Words 0 to 7, and 11 are read by PC; they are read and modified by SC. 1 6* Words 8, 9 and 10 are modified by PC; they should never be modified without locking the PC lock */ 1 7 /* Modified January 1985 by Keith Loepere for multi_class. */ 1 8 1 9 dcl astep ptr; 1 10 1 11 dcl 1 aste based (astep) aligned, 1 12 1 13 (2 fp bit (18), /* forward used list rel pointer */ 1 14 2 bp bit (18), /* backward used list rel pointer */ 1 15 1 16 2 infl bit (18), /* ptr to NEXT in list of ASTE's of my brothers */ 1 17 2 infp bit (18), /* ptr to FIRST in list of ASTE's of my children */ 1 18 1 19 2 strp bit (18), /* rel pointer to process trailer */ 1 20 2 par_astep bit (18), /* rel pointer to parent aste */ 1 21 1 22 2 uid bit (36), /* segment unique id */ 1 23 1 24 2 msl bit (9), /* maximum segment length in 1024 word units */ 1 25 2 pvtx fixed bin (8), /* physical volume table index */ 1 26 2 vtocx fixed bin (17), /* vtoc entry index */ 1 27 1 28 2 usedf bit (1), /* ast entry is being used if non-zero */ 1 29 2 init bit (1), /* used bit - insure 1 lap */ 1 30 2 gtus bit (1), /* global transparent usage switch */ 1 31 2 gtms bit (1), /* global transparent modified switch */ 1 32 2 hc bit (1), /* hard core segment */ 1 33 2 hc_sdw bit (1), /* aste with sdw for hardcore seg if non-zero */ 1 34 2 any_access_on bit (1), /* any sdw allows access, unless write_access_on */ 1 35 2 write_access_on bit (1), /* any sdw allows write access */ 1 36 2 inhibit_cache bit (1), /* flag not to reset above bits */ 1 37 2 explicit_deact_ok bit (1), /* set if user can deactivate seg */ 1 38 2 deact_error bit (1), /* set if error occurred while deactivating */ 1 39 2 hc_part bit (1), /* set if pages are in a hardcore partition */ 1 40 2 fm_damaged bit (1), /* set if filemap checksum was ever bad */ 1 41 2 multi_class bit (1), /* set if page_control should watch state changes to this segment */ 1 42 2 pad1 bit (2), /* OO */ 1 43 2 dius bit (1), /* dumper in use switch */ 1 44 2 nid bit (1), /* if on prevents addtion to incremental dump map */ 1 45 2 dmpr_pad bit (1), 1 46 2 ehs bit (1), /* entry hold switch */ 1 47 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */ 1 48 2 dirsw bit (1), /* directory switch */ 1 49 2 master_dir bit (1), /* master dir - a root for the log volume */ 1 50 2 volmap_seg bit (1), /* volmap_seg for some volume */ 1 51 2 tqsw (0:1) bit (1), /* terminal quota switch - (0) for non dir pages */ 1 52 2 pad_ic bit (10), /* Used to be aste.ic */ 1 53 1 54 2 dtu bit (36), /* date and time segment last used */ 1 55 1 56 2 dtm bit (36), /* date and time segment last modified */ 1 57 1 58 1 59 2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */ 1 60 1 61 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */ 1 62 1 63 2 csl bit (9), /* current segment length in 1024 words units */ 1 64 2 fmchanged bit (1), /* turned on by page if file map changed */ 1 65 2 fms bit (1), /* file modified switch */ 1 66 2 npfs bit (1), /* no page fault switch */ 1 67 2 gtpd bit (1), /* global transparent paging device switch */ 1 68 2 dnzp bit (1), /* don't null out if zero page switch */ 1 69 2 per_process bit (1), /* use master quota for this entry */ 1 70 2 ddnp bit (1), /* don't deposit nulled pages */ 1 71 2 pad2 bit (2), 1 72 2 records bit (9), /* number of records used by the seg in sec storage */ 1 73 2 np bit (9), /* number of pages in core */ 1 74 1 75 1 76 2 ht_fp bit (18), /* hash table forward rel pointer */ 1 77 2 fmchanged1 bit (1), /* value of "fmchanged" saved by pc$get_file_map */ 1 78 2 damaged bit (1), /* PC declared segment unusable */ 1 79 2 pack_ovfl bit (1), /* page fault on seg would cause pack overflow */ 1 80 2 synchronized bit (1), /* Data Management synchronized segment */ 1 81 2 pad3 bit (6), /* OOOOOOOOO */ 1 82 2 ptsi bit (2), /* page table size index */ 1 83 2 marker bit (6)) unaligned; /* marker to indicate last word of ASTE */ 1 84 1 85 1 86 dcl asta (0 : 8000) bit (36*12 /* sst-> sst.astsize */) based aligned; 1 87 1 88 1 89 dcl 1 aste_part aligned based (astep), 1 90 1 91 2 one bit (36) unaligned, /* fp and bp */ 1 92 2 two bit (36*11 - 8) unaligned, /* part that has to be zeroed when ASTE is freed */ 1 93 2 three bit (8) unaligned; /* ptsi and marker */ 1 94 1 95 1 96 dcl 1 seg_aste based (astep) aligned, /* Overlay because quota is only for dirs */ 1 97 2 pad1 bit (8*36), 1 98 2 usage fixed bin (35), /* page fault count: overlays quota */ 1 99 2 pad2 bit (3*36); 1 100 1 101 /* END INCLUDE FILE ... aste.incl.pl1 */ 49 50 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0801.1 map_onto_disk.pl1 >spec>install>1110>map_onto_disk.pl1 49 1 01/30/85 1523.9 aste.incl.pl1 >ldd>include>aste.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. addr builtin function dcl 15 ref 43 43 44 44 47 47 aste based structure level 1 dcl 1-11 astep 000106 automatic pointer dcl 1-9 set ref 37* 39 40 40 40 bin builtin function dcl 16 ref 40 bit builtin function dcl 17 ref 40 contents_valid parameter bit(1) dcl 18 ref 8 43 csl 12 based bit(9) level 2 packed packed unaligned dcl 1-11 set ref 40* first_record parameter fixed bin(20,0) dcl 19 ref 8 43 44 make_sdw$no_pages 000010 constant entry external dcl 20 ref 37 msl 4 based bit(9) level 2 packed packed unaligned dcl 1-11 set ref 40* num_records parameter fixed bin(17,0) dcl 21 ref 8 40 42 page 000100 automatic fixed bin(17,0) dcl 22 set ref 42* 43 43 43 44 44 44* page_table based bit(36) array dcl 23 set ref 43 43 44 44 partition_sdw 000102 automatic fixed bin(71,0) dcl 24 set ref 37* 47 47 pmut$swap_sdw 000012 constant entry external dcl 25 ref 47 ptp 000104 automatic pointer dcl 26 set ref 37* 43 43 44 44 ptw_util_$make_disk 000014 constant entry external dcl 27 ref 43 ptw_util_$make_null_disk 000016 constant entry external dcl 28 ref 44 pvtx parameter fixed bin(17,0) dcl 29 in procedure "map_onto_disk" ref 8 39 pvtx 4(09) based fixed bin(8,0) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "map_onto_disk" set ref 39* records 12(18) based bit(9) level 2 packed packed unaligned dcl 1-11 set ref 40* seg_ptr parameter pointer dcl 30 set ref 8 37 37 47* segno builtin function dcl 31 ref 37 37 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. asta based bit(432) array dcl 1-86 aste_part based structure level 1 dcl 1-89 seg_aste based structure level 1 dcl 1-96 NAME DECLARED BY EXPLICIT CONTEXT. map_onto_disk 000011 constant entry external dcl 8 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 232 252 143 242 Length 434 143 20 146 66 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME map_onto_disk 86 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME map_onto_disk 000100 page map_onto_disk 000102 partition_sdw map_onto_disk 000104 ptp map_onto_disk 000106 astep map_onto_disk 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. make_sdw$no_pages pmut$swap_sdw ptw_util_$make_disk ptw_util_$make_null_disk NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 8 000004 37 000016 39 000041 40 000046 42 000056 43 000065 44 000107 45 000124 47 000126 48 000142 ----------------------------------------------------------- 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