1*53978Sfujita /* 2*53978Sfujita * Copyright (c) 1988 University of Utah. 3*53978Sfujita * Copyright (c) 1992 OMRON Corporation. 4*53978Sfujita * Copyright (c) 1982, 1986, 1990, 1992 The Regents of the University of California. 5*53978Sfujita * All rights reserved. 6*53978Sfujita * 7*53978Sfujita * This code is derived from software contributed to Berkeley by 8*53978Sfujita * the Systems Programming Group of the University of Utah Computer 9*53978Sfujita * Science Department. 10*53978Sfujita * 11*53978Sfujita * %sccs.include.redist.c% 12*53978Sfujita * 13*53978Sfujita * from: Utah $Hdr: vmparam.h 1.16 91/01/18$ 14*53978Sfujita * OMRON: $Id: vmparam.h,v 1.3 92/06/14 18:08:16 moti Exp $ 15*53978Sfujita * 16*53978Sfujita * from: hp300/include/vmparam.h 7.3 (Berkeley) 5/7/91 17*53978Sfujita * 18*53978Sfujita * @(#)vmparam.h 7.1 (Berkeley) 06/15/92 19*53978Sfujita */ 20*53978Sfujita 21*53978Sfujita /* 22*53978Sfujita * Machine dependent constants for HP300 23*53978Sfujita */ 24*53978Sfujita /* 25*53978Sfujita * USRTEXT is the start of the user text/data space, while USRSTACK 26*53978Sfujita * is the top (end) of the user stack. LOWPAGES and HIGHPAGES are 27*53978Sfujita * the number of pages from the beginning of the P0 region to the 28*53978Sfujita * beginning of the text and from the beginning of the P1 region to the 29*53978Sfujita * beginning of the stack respectively. 30*53978Sfujita * 31*53978Sfujita * NOTE: the ONLY reason that HIGHPAGES is 0x100 instead of UPAGES (3) 32*53978Sfujita * is for HPUX compatibility. Why?? Because HPUX's debuggers 33*53978Sfujita * have the user's stack hard-wired at FFF00000 for post-mortems, 34*53978Sfujita * and we must be compatible... 35*53978Sfujita */ 36*53978Sfujita #define USRTEXT 0 37*53978Sfujita #define USRSTACK (-HIGHPAGES*NBPG) /* Start of user stack */ 38*53978Sfujita #define BTOPUSRSTACK (0x100000-HIGHPAGES) /* btop(USRSTACK) */ 39*53978Sfujita #define P1PAGES 0x100000 40*53978Sfujita #define LOWPAGES 0 41*53978Sfujita #define HIGHPAGES (0x100000/NBPG) 42*53978Sfujita 43*53978Sfujita /* 44*53978Sfujita * In kernel address space, user stack and user structure is mapped at 45*53978Sfujita * KERNELSTACK(LUNA only). Because LUNA has only 0x80000000 kernel 46*53978Sfujita * address space and last 1G(0x40000000-0x7FFFFFFF) is IO mapping space. 47*53978Sfujita * See below VM_MAX_KERNEL_ADDRESS define. 48*53978Sfujita */ 49*53978Sfujita #define KERNELSTACK 0x3FF00000 50*53978Sfujita 51*53978Sfujita /* 52*53978Sfujita * Virtual memory related constants, all in bytes 53*53978Sfujita */ 54*53978Sfujita #ifndef MAXTSIZ 55*53978Sfujita #define MAXTSIZ (6*1024*1024) /* max text size */ 56*53978Sfujita #endif 57*53978Sfujita #ifndef DFLDSIZ 58*53978Sfujita #define DFLDSIZ (8*1024*1024) /* initial data size limit */ 59*53978Sfujita #endif 60*53978Sfujita #ifndef MAXDSIZ 61*53978Sfujita #define MAXDSIZ (16*1024*1024) /* max data size */ 62*53978Sfujita #endif 63*53978Sfujita #ifndef DFLSSIZ 64*53978Sfujita #define DFLSSIZ (512*1024) /* initial stack size limit */ 65*53978Sfujita #endif 66*53978Sfujita #ifndef MAXSSIZ 67*53978Sfujita #define MAXSSIZ MAXDSIZ /* max stack size */ 68*53978Sfujita #endif 69*53978Sfujita 70*53978Sfujita /* 71*53978Sfujita * Default sizes of swap allocation chunks (see dmap.h). 72*53978Sfujita * The actual values may be changed in vminit() based on MAXDSIZ. 73*53978Sfujita * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024. 74*53978Sfujita * DMMIN should be at least ctod(1) so that vtod() works. 75*53978Sfujita * vminit() insures this. 76*53978Sfujita */ 77*53978Sfujita #define DMMIN 32 /* smallest swap allocation */ 78*53978Sfujita #define DMMAX 4096 /* largest potential swap allocation */ 79*53978Sfujita 80*53978Sfujita /* 81*53978Sfujita * Sizes of the system and user portions of the system page table. 82*53978Sfujita */ 83*53978Sfujita /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */ 84*53978Sfujita #define SYSPTSIZE (2 * NPTEPG) /* 8mb */ 85*53978Sfujita #define USRPTSIZE (1 * NPTEPG) /* 4mb */ 86*53978Sfujita 87*53978Sfujita /* 88*53978Sfujita * PTEs for mapping user space into the kernel for phyio operations. 89*53978Sfujita * One page is enough to handle 4Mb of simultaneous raw IO operations. 90*53978Sfujita */ 91*53978Sfujita #ifndef USRIOSIZE 92*53978Sfujita #define USRIOSIZE (1 * NPTEPG) /* 4mb */ 93*53978Sfujita #endif 94*53978Sfujita 95*53978Sfujita /* 96*53978Sfujita * PTEs for system V style shared memory. 97*53978Sfujita * This is basically slop for kmempt which we actually allocate (malloc) from. 98*53978Sfujita */ 99*53978Sfujita #ifndef SHMMAXPGS 100*53978Sfujita #define SHMMAXPGS 1024 /* 4mb */ 101*53978Sfujita #endif 102*53978Sfujita 103*53978Sfujita /* 104*53978Sfujita * Boundary at which to place first MAPMEM segment if not explicitly 105*53978Sfujita * specified. Should be a power of two. This allows some slop for 106*53978Sfujita * the data segment to grow underneath the first mapped segment. 107*53978Sfujita */ 108*53978Sfujita #define MMSEG 0x200000 109*53978Sfujita 110*53978Sfujita /* 111*53978Sfujita * The size of the clock loop. 112*53978Sfujita */ 113*53978Sfujita #define LOOPPAGES (maxfree - firstfree) 114*53978Sfujita 115*53978Sfujita /* 116*53978Sfujita * The time for a process to be blocked before being very swappable. 117*53978Sfujita * This is a number of seconds which the system takes as being a non-trivial 118*53978Sfujita * amount of real time. You probably shouldn't change this; 119*53978Sfujita * it is used in subtle ways (fractions and multiples of it are, that is, like 120*53978Sfujita * half of a ``long time'', almost a long time, etc.) 121*53978Sfujita * It is related to human patience and other factors which don't really 122*53978Sfujita * change over time. 123*53978Sfujita */ 124*53978Sfujita #define MAXSLP 20 125*53978Sfujita 126*53978Sfujita /* 127*53978Sfujita * A swapped in process is given a small amount of core without being bothered 128*53978Sfujita * by the page replacement algorithm. Basically this says that if you are 129*53978Sfujita * swapped in you deserve some resources. We protect the last SAFERSS 130*53978Sfujita * pages against paging and will just swap you out rather than paging you. 131*53978Sfujita * Note that each process has at least UPAGES+CLSIZE pages which are not 132*53978Sfujita * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this 133*53978Sfujita * number just means a swapped in process is given around 25k bytes. 134*53978Sfujita * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81), 135*53978Sfujita * so we loan each swapped in process memory worth 100$, or just admit 136*53978Sfujita * that we don't consider it worthwhile and swap it out to disk which costs 137*53978Sfujita * $30/mb or about $0.75. 138*53978Sfujita */ 139*53978Sfujita #define SAFERSS 4 /* nominal ``small'' resident set size 140*53978Sfujita protected against replacement */ 141*53978Sfujita 142*53978Sfujita /* 143*53978Sfujita * DISKRPM is used to estimate the number of paging i/o operations 144*53978Sfujita * which one can expect from a single disk controller. 145*53978Sfujita */ 146*53978Sfujita #define DISKRPM 60 147*53978Sfujita 148*53978Sfujita /* 149*53978Sfujita * Klustering constants. Klustering is the gathering 150*53978Sfujita * of pages together for pagein/pageout, while clustering 151*53978Sfujita * is the treatment of hardware page size as though it were 152*53978Sfujita * larger than it really is. 153*53978Sfujita * 154*53978Sfujita * KLMAX gives maximum cluster size in CLSIZE page (cluster-page) 155*53978Sfujita * units. Note that ctod(KLMAX*CLSIZE) must be <= DMMIN in dmap.h. 156*53978Sfujita * ctob(KLMAX) should also be less than MAXPHYS (in vm_swp.c) 157*53978Sfujita * unless you like "big push" panics. 158*53978Sfujita */ 159*53978Sfujita 160*53978Sfujita #define KLMAX (4/CLSIZE) 161*53978Sfujita #define KLSEQL (2/CLSIZE) /* in klust if vadvise(VA_SEQL) */ 162*53978Sfujita #define KLIN (4/CLSIZE) /* default data/stack in klust */ 163*53978Sfujita #define KLTXT (4/CLSIZE) /* default text in klust */ 164*53978Sfujita #define KLOUT (4/CLSIZE) 165*53978Sfujita 166*53978Sfujita /* 167*53978Sfujita * KLSDIST is the advance or retard of the fifo reclaim for sequential 168*53978Sfujita * processes data space. 169*53978Sfujita */ 170*53978Sfujita #define KLSDIST 3 /* klusters advance/retard for seq. fifo */ 171*53978Sfujita 172*53978Sfujita /* 173*53978Sfujita * Paging thresholds (see vm_sched.c). 174*53978Sfujita * Strategy of 1/19/85: 175*53978Sfujita * lotsfree is 512k bytes, but at most 1/4 of memory 176*53978Sfujita * desfree is 200k bytes, but at most 1/8 of memory 177*53978Sfujita * minfree is 64k bytes, but at most 1/2 of desfree 178*53978Sfujita */ 179*53978Sfujita #define LOTSFREE (512 * 1024) 180*53978Sfujita #define LOTSFREEFRACT 4 181*53978Sfujita #define DESFREE (200 * 1024) 182*53978Sfujita #define DESFREEFRACT 8 183*53978Sfujita #define MINFREE (64 * 1024) 184*53978Sfujita #define MINFREEFRACT 2 185*53978Sfujita 186*53978Sfujita /* 187*53978Sfujita * There are two clock hands, initially separated by HANDSPREAD bytes 188*53978Sfujita * (but at most all of user memory). The amount of time to reclaim 189*53978Sfujita * a page once the pageout process examines it increases with this 190*53978Sfujita * distance and decreases as the scan rate rises. 191*53978Sfujita */ 192*53978Sfujita #define HANDSPREAD (2 * 1024 * 1024) 193*53978Sfujita 194*53978Sfujita /* 195*53978Sfujita * The number of times per second to recompute the desired paging rate 196*53978Sfujita * and poke the pagedaemon. 197*53978Sfujita */ 198*53978Sfujita #define RATETOSCHEDPAGING 4 199*53978Sfujita 200*53978Sfujita /* 201*53978Sfujita * Believed threshold (in megabytes) for which interleaved 202*53978Sfujita * swapping area is desirable. 203*53978Sfujita */ 204*53978Sfujita #define LOTSOFMEM 2 205*53978Sfujita 206*53978Sfujita /* 207*53978Sfujita * Mach derived constants 208*53978Sfujita */ 209*53978Sfujita 210*53978Sfujita /* user/kernel map constants */ 211*53978Sfujita #define VM_MIN_ADDRESS ((vm_offset_t)0) 212*53978Sfujita #define VM_MAXUSER_ADDRESS ((vm_offset_t)0xFFF00000) 213*53978Sfujita #define VM_MAX_ADDRESS ((vm_offset_t)0xFFF00000) 214*53978Sfujita #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)0) 215*53978Sfujita #define VM_MAX_KERNEL_ADDRESS ((vm_offset_t)0x7FFFF000) 216*53978Sfujita 217*53978Sfujita /* virtual sizes (bytes) for various kernel submaps */ 218*53978Sfujita #define VM_MBUF_SIZE (NMBCLUSTERS*MCLBYTES) 219*53978Sfujita #define VM_KMEM_SIZE (NKMEMCLUSTERS*CLBYTES) 220*53978Sfujita #define VM_PHYS_SIZE (USRIOSIZE*CLBYTES) 221*53978Sfujita 222*53978Sfujita /* # of kernel PT pages (initial only, can grow dynamically) */ 223*53978Sfujita #define VM_KERNEL_PT_PAGES ((vm_size_t)2) /* XXX: SYSPTSIZE */ 224*53978Sfujita 225*53978Sfujita /* pcb base */ 226*53978Sfujita #define pcbb(p) ((u_int)(p)->p_addr) 227