1 /* vmparam.h 6.5 85/03/07 */ 2 3 /* 4 * Machine dependent constants for VAX 5 */ 6 /* 7 * USRTEXT is the start of the user text/data space, while USRSTACK 8 * is the top (end) of the user stack. LOWPAGES and HIGHPAGES are 9 * the number of pages from the beginning of the P0 region to the 10 * beginning of the text and from the beginning of the P1 region to the 11 * beginning of the stack respectively. 12 */ 13 #define USRTEXT 0 14 #define USRSTACK (0x80000000-UPAGES*NBPG) /* Start of user stack */ 15 #define BTOPUSRSTACK (0x400000 - UPAGES) /* btop(USRSTACK) */ 16 /* number of ptes per page */ 17 #define P1PAGES 0x200000 /* number of pages in P1 region */ 18 #define LOWPAGES 0 19 #define HIGHPAGES UPAGES 20 21 /* 22 * Virtual memory related constants, all in clicks 23 */ 24 #define MAXTSIZ (6*CLSIZE*1024) /* max text size */ 25 #ifndef DFLDSIZ 26 #define DFLDSIZ (6*1024*1024/NBPG) /* initial data size limit */ 27 #endif 28 #ifndef MAXDSIZ 29 #define MAXDSIZ (16*1024*1024/NBPG) /* max data size */ 30 #endif 31 #ifndef DFLSSIZ 32 #define DFLSSIZ (512*1024/NBPG) /* initial stack size limit */ 33 #endif 34 #ifndef MAXSSIZ 35 #define MAXSSIZ MAXDSIZ /* max stack size */ 36 #endif 37 38 /* 39 * Default sizes of swap allocation chunks (see dmap.h). 40 * The actual values may be changed in vminit() based on MAXDSIZ. 41 * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024. 42 */ 43 #define DMMIN 32 /* smallest swap allocation */ 44 #define DMMAX 4096 /* largest potential swap allocation */ 45 #define DMTEXT 1024 /* swap allocation for text */ 46 47 /* 48 * Sizes of the system and user portions of the system page table. 49 */ 50 /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */ 51 #define SYSPTSIZE ((20+MAXUSERS)*NPTEPG) 52 #define USRPTSIZE (32*NPTEPG) 53 54 /* 55 * The size of the clock loop. 56 */ 57 #define LOOPPAGES (maxfree - firstfree) 58 59 /* 60 * The time for a process to be blocked before being very swappable. 61 * This is a number of seconds which the system takes as being a non-trivial 62 * amount of real time. You probably shouldn't change this; 63 * it is used in subtle ways (fractions and multiples of it are, that is, like 64 * half of a ``long time'', almost a long time, etc.) 65 * It is related to human patience and other factors which don't really 66 * change over time. 67 */ 68 #define MAXSLP 20 69 70 /* 71 * A swapped in process is given a small amount of core without being bothered 72 * by the page replacement algorithm. Basically this says that if you are 73 * swapped in you deserve some resources. We protect the last SAFERSS 74 * pages against paging and will just swap you out rather than paging you. 75 * Note that each process has at least UPAGES+CLSIZE pages which are not 76 * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this 77 * number just means a swapped in process is given around 25k bytes. 78 * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81), 79 * so we loan each swapped in process memory worth 100$, or just admit 80 * that we don't consider it worthwhile and swap it out to disk which costs 81 * $30/mb or about $0.75. 82 */ 83 #define SAFERSS 32 /* nominal ``small'' resident set size 84 protected against replacement */ 85 86 /* 87 * DISKRPM is used to estimate the number of paging i/o operations 88 * which one can expect from a single disk controller. 89 */ 90 #define DISKRPM 60 91 92 /* 93 * Klustering constants. Klustering is the gathering 94 * of pages together for pagein/pageout, while clustering 95 * is the treatment of hardware page size as though it were 96 * larger than it really is. 97 * 98 * KLMAX gives maximum cluster size in CLSIZE page (cluster-page) 99 * units. Note that KLMAX*CLSIZE must be <= DMMIN in dmap.h. 100 */ 101 102 #define KLMAX (32/CLSIZE) 103 #define KLSEQL (16/CLSIZE) /* in klust if vadvise(VA_SEQL) */ 104 #define KLIN (8/CLSIZE) /* default data/stack in klust */ 105 #define KLTXT (4/CLSIZE) /* default text in klust */ 106 #define KLOUT (32/CLSIZE) 107 108 /* 109 * KLSDIST is the advance or retard of the fifo reclaim for sequential 110 * processes data space. 111 */ 112 #define KLSDIST 3 /* klusters advance/retard for seq. fifo */ 113 114 /* 115 * Paging thresholds (see vm_sched.c). 116 * Strategy of 1/19/85: 117 * lotsfree is 512k bytes, but at most 1/4 of memory 118 * desfree is 200k bytes, but at most 1/8 of memory 119 * minfree is 64k bytes, but at most 1/2 of desfree 120 */ 121 #define LOTSFREE (512 * 1024) 122 #define LOTSFREEFRACT 4 123 #define DESFREE (200 * 1024) 124 #define DESFREEFRACT 8 125 #define MINFREE (64 * 1024) 126 #define MINFREEFRACT 2 127 128 /* 129 * There are two clock hands, initially separated by HANDSPREAD bytes 130 * (but at most all of user memory). The amount of time to reclaim 131 * a page once the pageout process examines it increases with this 132 * distance and decreases as the scan rate rises. 133 */ 134 #define HANDSPREAD (2 * 1024 * 1024) 135 136 /* 137 * The number of times per second to recompute the desired paging rate 138 * and poke the pagedaemon. 139 */ 140 #define RATETOSCHEDPAGING 4 141 142 /* 143 * Believed threshold (in megabytes) for which interleaved 144 * swapping area is desirable. 145 */ 146 #define LOTSOFMEM 2 147 148 /* 149 * BEWARE THIS DEFINITION WORKS ONLY WITH COUNT OF 1 150 */ 151 #define mapin(pte, v, pfnum, count, prot) \ 152 (*(int *)(pte) = (pfnum) | (prot), mtpr(TBIS, ptob(v))) 153