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