1 /* START OF: unpaged_page_tables.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 2 3 /* This include file describes the segments unpaged_page_tables and 4 int_unpaged_page_tables. These segments contain the page tables for 5 supervisor segments loaded by the bootloader that are paged and wired. 6 Such segments were previously called unpaged and defined without using 7 a page table. 8 9 Both unpage_page_tables and int_unpage_page_tables share the format 10 declared below. 11 12 - Page tables for some segs having the SLTE ^paged attribute are stored 13 in unpaged_page_tables. The unpaged_page_tables segment is setup by 14 Collection One programs and in-use in all phases of Multics operation. 15 16 - Page tables for segs having the SLTE init_seg attribute are stored in 17 int_unpaged_page_tables. Segments with the init_seg attribute only 18 exist while Collection One bootload programs are running. Early in 19 Collection Two, these initialization-related programs and the 20 int_unpaged_page_tables segment itself are deleted from Multics 21 memory, and from the Segment Loading Table maintained in memory. 22 Only some early dumps include these initialization segments and their 23 SLT entries. 24 25 Written September 15, 1983 by Keith Loepere. */ 26 27 28 29 30 /****^ HISTORY COMMENTS: 31 1) change(2022-11-14,GDixon), approve(2023-01-16,MCR10129), 32 audit(2023-02-28,Swenson), install(2023-02-28,MR12.8-1054): 33 A) Change declaration of upt.first_entry to denote only the location of 34 the first Page Table + header (rather than declaring its full 35 contents). This prevents infinite loop in the azm request: 36 display unpaged_page_tables -as upt 37 which thinks upt.first_entry includes a very large number of PTWs. 38 B) Add declaration of upt_entry_header so size of this header can be 39 determined in PL/I code. 40 C) Expand comments to explain use and layout of the segments. 41 END HISTORY COMMENTS */ 42 43 44 45 46 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */ 47 48 dcl upt_ptr ptr; 49 dcl 1 upt aligned based (upt_ptr), 50 2 sst_absloc fixed bin (26), /* for dump analyzers */ 51 2 sst_last_loc fixed bin (26), 52 2 upt_absloc fixed bin (26), 53 2 upt_last_loc fixed bin (26), 54 2 iupt_absloc fixed bin (26), 55 2 iupt_last_loc fixed bin (26), 56 57 2 current_length fixed bin, /* number of words currently used */ 58 2 max_length fixed bin, /* max number of words in memory allocated */ 59 2 first_entry fixed bin; /* size of the 1st page table (see: upt_entry.size below) */ 60 61 /* ---------------------------------------------------------------------------------------------------- 62 The upt structure can be located by a pointer to the unpaged_page_tables segment. 63 upt_ptr = addr(unpaged_page_tables$); 64 65 If upt.iupt_absloc > 0, then the upt structure overlaying int_unpaged_page_tables 66 can be located by a reference to that segment. 67 upt_ptr = addr(int_unpaged_page_tables$); 68 69 The first Page Table with header begins at location: 70 upt_entry_ptr = addr(upt.first_entry); 71 72 Each Page table is an even-word aligned array of PTWs preceded by a 2-word header, 73 as shown by upt_entry declaration (see below). sdw.add gives the absolute address of 74 the actual page table defined by the upt_entry.ptws(*) array. 75 76 Each subsequent Page Table entry may be accessed by: 77 upt_entry_ptr = 78 addwordno (upt_entry_ptr, currentsize (upt_entry) + mod (currentsize (upt_entry), 2) ); 79 ---------------------------------------------------------------------------------------------------- */ 80 81 dcl upt_entry_ptr ptr; 82 dcl 1 upt_entry aligned based (upt_entry_ptr), 83 2 upt_pt_header aligned like upt_entry_header, 84 2 ptws (0 refer (upt_entry.size)) bit (36) aligned; 85 86 dcl 1 upt_entry_header aligned based, 87 2 size fixed bin, /* number of page table words allocated */ 88 2 segno fixed bin; /* segment number of hardcore segment */ 89 90 /* END OF: unpaged_page_tables.incl.pl1 * * * * * * * * * * * * * * * * * * * */