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