|
|
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: * NOTE: the ONLY reason that HIGHPAGES is 0x100 instead of UPAGES (3) ! 54: * is for HPUX compatibility. Why?? Because HPUX's debuggers ! 55: * have the user's stack hard-wired at FFF00000 for post-mortems, ! 56: * and we must be compatible... ! 57: */ ! 58: #define USRTEXT 0 ! 59: #define USRSTACK (-HIGHPAGES*NBPG) /* Start of user stack */ ! 60: #define BTOPUSRSTACK (0x100000-HIGHPAGES) /* btop(USRSTACK) */ ! 61: #define P1PAGES 0x100000 ! 62: #define LOWPAGES 0 ! 63: #define HIGHPAGES (0x100000/NBPG) ! 64: ! 65: /* ! 66: * Virtual memory related constants, all in bytes ! 67: */ ! 68: #ifndef MAXTSIZ ! 69: #define MAXTSIZ (6*1024*1024) /* max text size */ ! 70: #endif ! 71: #ifndef DFLDSIZ ! 72: #define DFLDSIZ (8*1024*1024) /* initial data size limit */ ! 73: #endif ! 74: #ifndef MAXDSIZ ! 75: #define MAXDSIZ (16*1024*1024) /* max data size */ ! 76: #endif ! 77: #ifndef DFLSSIZ ! 78: #define DFLSSIZ (512*1024) /* initial stack size limit */ ! 79: #endif ! 80: #ifndef MAXSSIZ ! 81: #define MAXSSIZ MAXDSIZ /* max stack size */ ! 82: #endif ! 83: ! 84: /* ! 85: * Default sizes of swap allocation chunks (see dmap.h). ! 86: * The actual values may be changed in vminit() based on MAXDSIZ. ! 87: * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024. ! 88: * DMMIN should be at least ctod(1) so that vtod() works. ! 89: * vminit() insures this. ! 90: */ ! 91: #define DMMIN 32 /* smallest swap allocation */ ! 92: #define DMMAX 4096 /* largest potential swap allocation */ ! 93: ! 94: /* ! 95: * Sizes of the system and user portions of the system page table. ! 96: */ ! 97: /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */ ! 98: #define SYSPTSIZE (2 * NPTEPG) /* 8mb */ ! 99: #define USRPTSIZE (1 * NPTEPG) /* 4mb */ ! 100: ! 101: /* ! 102: * PTEs for mapping user space into the kernel for phyio operations. ! 103: * One page is enough to handle 4Mb of simultaneous raw IO operations. ! 104: */ ! 105: #ifndef USRIOSIZE ! 106: #define USRIOSIZE (1 * NPTEPG) /* 4mb */ ! 107: #endif ! 108: ! 109: /* ! 110: * PTEs for system V style shared memory. ! 111: * This is basically slop for kmempt which we actually allocate (malloc) from. ! 112: */ ! 113: #ifndef SHMMAXPGS ! 114: #define SHMMAXPGS 1024 /* 4mb */ ! 115: #endif ! 116: ! 117: /* ! 118: * External IO space map size. ! 119: * By default we make it large enough to map up to 3 DIO-II devices and ! 120: * the complete DIO space. For a 320-only configuration (which has no ! 121: * DIO-II) you could define a considerably smaller region. ! 122: */ ! 123: #ifndef EIOMAPSIZE ! 124: #define EIOMAPSIZE 3584 /* 14mb */ ! 125: #endif ! 126: ! 127: /* ! 128: * Boundary at which to place first MAPMEM segment if not explicitly ! 129: * specified. Should be a power of two. This allows some slop for ! 130: * the data segment to grow underneath the first mapped segment. ! 131: */ ! 132: #define MMSEG 0x200000 ! 133: ! 134: /* ! 135: * The size of the clock loop. ! 136: */ ! 137: #define LOOPPAGES (maxfree - firstfree) ! 138: ! 139: /* ! 140: * The time for a process to be blocked before being very swappable. ! 141: * This is a number of seconds which the system takes as being a non-trivial ! 142: * amount of real time. You probably shouldn't change this; ! 143: * it is used in subtle ways (fractions and multiples of it are, that is, like ! 144: * half of a ``long time'', almost a long time, etc.) ! 145: * It is related to human patience and other factors which don't really ! 146: * change over time. ! 147: */ ! 148: #define MAXSLP 20 ! 149: ! 150: /* ! 151: * A swapped in process is given a small amount of core without being bothered ! 152: * by the page replacement algorithm. Basically this says that if you are ! 153: * swapped in you deserve some resources. We protect the last SAFERSS ! 154: * pages against paging and will just swap you out rather than paging you. ! 155: * Note that each process has at least UPAGES+CLSIZE pages which are not ! 156: * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this ! 157: * number just means a swapped in process is given around 25k bytes. ! 158: * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81), ! 159: * so we loan each swapped in process memory worth 100$, or just admit ! 160: * that we don't consider it worthwhile and swap it out to disk which costs ! 161: * $30/mb or about $0.75. ! 162: */ ! 163: #define SAFERSS 4 /* nominal ``small'' resident set size ! 164: protected against replacement */ ! 165: ! 166: /* ! 167: * DISKRPM is used to estimate the number of paging i/o operations ! 168: * which one can expect from a single disk controller. ! 169: */ ! 170: #define DISKRPM 60 ! 171: ! 172: /* ! 173: * Klustering constants. Klustering is the gathering ! 174: * of pages together for pagein/pageout, while clustering ! 175: * is the treatment of hardware page size as though it were ! 176: * larger than it really is. ! 177: * ! 178: * KLMAX gives maximum cluster size in CLSIZE page (cluster-page) ! 179: * units. Note that ctod(KLMAX*CLSIZE) must be <= DMMIN in dmap.h. ! 180: * ctob(KLMAX) should also be less than MAXPHYS (in vm_swp.c) ! 181: * unless you like "big push" panics. ! 182: */ ! 183: ! 184: #define KLMAX (4/CLSIZE) ! 185: #define KLSEQL (2/CLSIZE) /* in klust if vadvise(VA_SEQL) */ ! 186: #define KLIN (4/CLSIZE) /* default data/stack in klust */ ! 187: #define KLTXT (4/CLSIZE) /* default text in klust */ ! 188: #define KLOUT (4/CLSIZE) ! 189: ! 190: /* ! 191: * KLSDIST is the advance or retard of the fifo reclaim for sequential ! 192: * processes data space. ! 193: */ ! 194: #define KLSDIST 3 /* klusters advance/retard for seq. fifo */ ! 195: ! 196: /* ! 197: * Paging thresholds (see vm_sched.c). ! 198: * Strategy of 1/19/85: ! 199: * lotsfree is 512k bytes, but at most 1/4 of memory ! 200: * desfree is 200k bytes, but at most 1/8 of memory ! 201: * minfree is 64k bytes, but at most 1/2 of desfree ! 202: */ ! 203: #define LOTSFREE (512 * 1024) ! 204: #define LOTSFREEFRACT 4 ! 205: #define DESFREE (200 * 1024) ! 206: #define DESFREEFRACT 8 ! 207: #define MINFREE (64 * 1024) ! 208: #define MINFREEFRACT 2 ! 209: ! 210: /* ! 211: * There are two clock hands, initially separated by HANDSPREAD bytes ! 212: * (but at most all of user memory). The amount of time to reclaim ! 213: * a page once the pageout process examines it increases with this ! 214: * distance and decreases as the scan rate rises. ! 215: */ ! 216: #define HANDSPREAD (2 * 1024 * 1024) ! 217: ! 218: /* ! 219: * The number of times per second to recompute the desired paging rate ! 220: * and poke the pagedaemon. ! 221: */ ! 222: #define RATETOSCHEDPAGING 4 ! 223: ! 224: /* ! 225: * Believed threshold (in megabytes) for which interleaved ! 226: * swapping area is desirable. ! 227: */ ! 228: #define LOTSOFMEM 2 ! 229: ! 230: #define mapin(pte, v, pfnum, prot) \ ! 231: (*(u_int *)(pte) = ((pfnum) << PGSHIFT) | (prot), TBIS((caddr_t)(v))) ! 232: ! 233: /* ! 234: * Mach derived constants ! 235: */ ! 236: ! 237: /* user/kernel map constants */ ! 238: #define VM_MIN_ADDRESS ((vm_offset_t)0) ! 239: #define VM_MAXUSER_ADDRESS ((vm_offset_t)0xFFF00000) ! 240: #define VM_MAX_ADDRESS ((vm_offset_t)0xFFF00000) ! 241: #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)0) ! 242: #define VM_MAX_KERNEL_ADDRESS ((vm_offset_t)0xFFFFF000) ! 243: ! 244: /* virtual sizes (bytes) for various kernel submaps */ ! 245: #define VM_MBUF_SIZE (NMBCLUSTERS*MCLBYTES) ! 246: #define VM_KMEM_SIZE (NKMEMCLUSTERS*CLBYTES) ! 247: #define VM_PHYS_SIZE (USRIOSIZE*CLBYTES) ! 248: ! 249: /* # of kernel PT pages (initial only, can grow dynamically) */ ! 250: #define VM_KERNEL_PT_PAGES ((vm_size_t)2) /* XXX: SYSPTSIZE */ ! 251: ! 252: /* pcb base */ ! 253: #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.