|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 University of Utah. ! 3: * Copyright (c) 1982, 1986, 1990 The Regents of the University of California. ! 4: * All rights reserved. ! 5: * ! 6: * This code is derived from software contributed to Berkeley by ! 7: * the Systems Programming Group of the University of Utah Computer ! 8: * Science Department. ! 9: * ! 10: * Redistribution and use in source and binary forms, with or without ! 11: * modification, are permitted provided that the following conditions ! 12: * are met: ! 13: * 1. Redistributions of source code must retain the above copyright ! 14: * notice, this list of conditions and the following disclaimer. ! 15: * 2. Redistributions in binary form must reproduce the above copyright ! 16: * notice, this list of conditions and the following disclaimer in the ! 17: * documentation and/or other materials provided with the distribution. ! 18: * 3. All advertising materials mentioning features or use of this software ! 19: * must display the following acknowledgement: ! 20: * This product includes software developed by the University of ! 21: * California, Berkeley and its contributors. ! 22: * 4. Neither the name of the University nor the names of its contributors ! 23: * may be used to endorse or promote products derived from this software ! 24: * without specific prior written permission. ! 25: * ! 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 36: * SUCH DAMAGE. ! 37: * ! 38: * from: Utah $Hdr: vmparam.h 1.16 91/01/18$ ! 39: * ! 40: * @(#)vmparam.h 7.3 (Berkeley) 5/7/91 ! 41: */ ! 42: ! 43: /* ! 44: * Machine dependent constants for HP300 ! 45: */ ! 46: /* ! 47: * USRTEXT is the start of the user text/data space, while USRSTACK ! 48: * is the top (end) of the user stack. LOWPAGES and HIGHPAGES are ! 49: * the number of pages from the beginning of the P0 region to the ! 50: * beginning of the text and from the beginning of the P1 region to the ! 51: * beginning of the stack respectively. ! 52: * ! 53: * These are a mixture of i386, sun3 and hp settings.. ! 54: */ ! 55: ! 56: /* Sun settings. Still hope, that I might get sun3 binaries to work... */ ! 57: #define USRTEXT 0x2000 ! 58: #define USRSTACK 0x0F000000 ! 59: #define LOWPAGES btoc(USRTEXT) ! 60: #define HIGHPAGES 0 ! 61: ! 62: /* ! 63: * Virtual memory related constants, all in bytes ! 64: */ ! 65: ! 66: #if 0 ! 67: /* these are the sun3 parameters, but they obviously confuse our memory ! 68: allocator (because data and stack segments overlap). So for now, ! 69: limit both data and stack to 32M each, this should be fairly enough ! 70: for the start, and if not, we'll take another look at how to tell ! 71: the vm-system that it's ok if stack and data potentially overlap, ! 72: as long as they don't in reality.. */ ! 73: ! 74: #ifndef MAXTSIZ ! 75: #define MAXTSIZ (6*1024*1024) /* max text size */ ! 76: #endif ! 77: #ifndef DFLDSIZ ! 78: #define DFLDSIZ USRSTACK /* initial data size limit */ ! 79: #endif ! 80: #ifndef MAXDSIZ ! 81: #define MAXDSIZ USRSTACK /* max data size */ ! 82: #endif ! 83: #ifndef DFLSSIZ ! 84: #define DFLSSIZ (2*1024*1024) /* initial stack size limit */ ! 85: #endif ! 86: #ifndef MAXSSIZ ! 87: #define MAXSSIZ MAXDSIZ /* max stack size */ ! 88: #endif ! 89: ! 90: #else ! 91: ! 92: #ifndef MAXTSIZ ! 93: #define MAXTSIZ (6*1024*1024) /* max text size */ ! 94: #endif ! 95: #ifndef DFLDSIZ ! 96: #define DFLDSIZ (32*1024*1024) /* initial data size limit */ ! 97: #endif ! 98: #ifndef MAXDSIZ ! 99: #define MAXDSIZ (32*1024*1024) /* max data size */ ! 100: #endif ! 101: #ifndef DFLSSIZ ! 102: #define DFLSSIZ (2*1024*1024) /* initial stack size limit */ ! 103: #endif ! 104: #ifndef MAXSSIZ ! 105: #define MAXSSIZ MAXDSIZ /* max stack size */ ! 106: #endif ! 107: ! 108: #endif ! 109: ! 110: /* ! 111: * Default sizes of swap allocation chunks (see dmap.h). ! 112: * The actual values may be changed in vminit() based on MAXDSIZ. ! 113: * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024. ! 114: * DMMIN should be at least ctod(1) so that vtod() works. ! 115: * vminit() insures this. ! 116: */ ! 117: #define DMMIN 32 /* smallest swap allocation */ ! 118: #define DMMAX NBPG /* largest potential swap allocation */ ! 119: ! 120: /* ! 121: * Sizes of the system and user portions of the system page table. ! 122: */ ! 123: /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */ ! 124: #define SYSPTSIZE (1 * NPTEPG) /* 16mb */ ! 125: #define USRPTSIZE (1 * NPTEPG) /* 16mb */ ! 126: ! 127: /* ! 128: * PTEs for mapping user space into the kernel for phyio operations. ! 129: * One page is enough to handle 16Mb of simultaneous raw IO operations. ! 130: */ ! 131: #ifndef USRIOSIZE ! 132: #define USRIOSIZE (1 * NPTEPG) /* 16mb */ ! 133: #endif ! 134: ! 135: /* ! 136: * PTEs for system V style shared memory. ! 137: * This is basically slop for kmempt which we actually allocate (malloc) from. ! 138: */ ! 139: #ifndef SHMMAXPGS ! 140: #define SHMMAXPGS (1 * NPTEPG) /* 16mb */ ! 141: #endif ! 142: ! 143: /* ! 144: * Boundary at which to place first MAPMEM segment if not explicitly ! 145: * specified. Should be a power of two. This allows some slop for ! 146: * the data segment to grow underneath the first mapped segment. ! 147: */ ! 148: /* XXXX probably too low !?!? */ ! 149: #define MMSEG 0x200000 ! 150: ! 151: /* ! 152: * The size of the clock loop. ! 153: */ ! 154: #define LOOPPAGES (maxfree - firstfree) ! 155: ! 156: /* ! 157: * The time for a process to be blocked before being very swappable. ! 158: * This is a number of seconds which the system takes as being a non-trivial ! 159: * amount of real time. You probably shouldn't change this; ! 160: * it is used in subtle ways (fractions and multiples of it are, that is, like ! 161: * half of a ``long time'', almost a long time, etc.) ! 162: * It is related to human patience and other factors which don't really ! 163: * change over time. ! 164: */ ! 165: #define MAXSLP 20 ! 166: ! 167: /* ! 168: * A swapped in process is given a small amount of core without being bothered ! 169: * by the page replacement algorithm. Basically this says that if you are ! 170: * swapped in you deserve some resources. We protect the last SAFERSS ! 171: * pages against paging and will just swap you out rather than paging you. ! 172: * Note that each process has at least UPAGES+CLSIZE pages which are not ! 173: * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this ! 174: * number just means a swapped in process is given around 25k bytes. ! 175: * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81), ! 176: * so we loan each swapped in process memory worth 100$, or just admit ! 177: * that we don't consider it worthwhile and swap it out to disk which costs ! 178: * $30/mb or about $0.75. ! 179: */ ! 180: #define SAFERSS 4 /* nominal ``small'' resident set size ! 181: protected against replacement */ ! 182: ! 183: /* ! 184: * DISKRPM is used to estimate the number of paging i/o operations ! 185: * which one can expect from a single disk controller. ! 186: */ ! 187: #define DISKRPM 60 ! 188: ! 189: /* ! 190: * Klustering constants. Klustering is the gathering ! 191: * of pages together for pagein/pageout, while clustering ! 192: * is the treatment of hardware page size as though it were ! 193: * larger than it really is. ! 194: * ! 195: * KLMAX gives maximum cluster size in CLSIZE page (cluster-page) ! 196: * units. Note that ctod(KLMAX*CLSIZE) must be <= DMMIN in dmap.h. ! 197: * ctob(KLMAX) should also be less than MAXPHYS (in vm_swp.c) ! 198: * unless you like "big push" panics. ! 199: */ ! 200: ! 201: #define KLMAX (4/CLSIZE) ! 202: #define KLSEQL (2/CLSIZE) /* in klust if vadvise(VA_SEQL) */ ! 203: #define KLIN (4/CLSIZE) /* default data/stack in klust */ ! 204: #define KLTXT (4/CLSIZE) /* default text in klust */ ! 205: #define KLOUT (4/CLSIZE) ! 206: ! 207: /* ! 208: * KLSDIST is the advance or retard of the fifo reclaim for sequential ! 209: * processes data space. ! 210: */ ! 211: #define KLSDIST 3 /* klusters advance/retard for seq. fifo */ ! 212: ! 213: /* ! 214: * Paging thresholds (see vm_sched.c). ! 215: * Strategy of 1/19/85: ! 216: * lotsfree is 512k bytes, but at most 1/4 of memory ! 217: * desfree is 200k bytes, but at most 1/8 of memory ! 218: * minfree is 64k bytes, but at most 1/2 of desfree ! 219: */ ! 220: #define LOTSFREE (512 * 1024) ! 221: #define LOTSFREEFRACT 4 ! 222: #define DESFREE (200 * 1024) ! 223: #define DESFREEFRACT 8 ! 224: #define MINFREE (64 * 1024) ! 225: #define MINFREEFRACT 2 ! 226: ! 227: /* ! 228: * There are two clock hands, initially separated by HANDSPREAD bytes ! 229: * (but at most all of user memory). The amount of time to reclaim ! 230: * a page once the pageout process examines it increases with this ! 231: * distance and decreases as the scan rate rises. ! 232: */ ! 233: #define HANDSPREAD (2 * 1024 * 1024) ! 234: ! 235: /* ! 236: * The number of times per second to recompute the desired paging rate ! 237: * and poke the pagedaemon. ! 238: */ ! 239: #define RATETOSCHEDPAGING 4 ! 240: ! 241: /* ! 242: * Believed threshold (in megabytes) for which interleaved ! 243: * swapping area is desirable. ! 244: */ ! 245: #define LOTSOFMEM 2 ! 246: ! 247: #define mapin(pte, v, pfnum, prot) \ ! 248: (*(u_int *)(pte) = ((pfnum) << PGSHIFT) | (prot), TBIS((caddr_t)(v))) ! 249: ! 250: /* ! 251: * Mach derived constants ! 252: */ ! 253: ! 254: /* user/kernel map constants */ ! 255: #define VM_MIN_ADDRESS ((vm_offset_t)0) ! 256: #define VM_MAXUSER_ADDRESS ((vm_offset_t)(0-(UPAGES*NBPG))) ! 257: #define VM_MAX_ADDRESS ((vm_offset_t)(0-(UPAGES*NBPG))) ! 258: #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)0) ! 259: #define VM_MAX_KERNEL_ADDRESS ((vm_offset_t)(0-NBPG)) ! 260: ! 261: /* virtual sizes (bytes) for various kernel submaps */ ! 262: #define VM_MBUF_SIZE (NMBCLUSTERS*MCLBYTES) ! 263: #define VM_KMEM_SIZE (NKMEMCLUSTERS*CLBYTES) ! 264: #define VM_PHYS_SIZE (USRIOSIZE*CLBYTES) ! 265: ! 266: /* # of kernel PT pages (initial only, can grow dynamically) */ ! 267: #define VM_KERNEL_PT_PAGES ((vm_size_t)1) /* XXX: SYSPTSIZE */ ! 268: ! 269: /* pcb base */ ! 270: #define pcbb(p) ((u_int)(p)->p_addr)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.