[BACK]Return to uvm_anon.h CVS log [TXT][DIR] Up to [local] / sys / uvm

Annotation of sys/uvm/uvm_anon.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: uvm_anon.h,v 1.14 2007/06/18 21:51:15 pedro Exp $     */
                      2: /*     $NetBSD: uvm_anon.h,v 1.13 2000/12/27 09:17:04 chs Exp $        */
                      3:
                      4: /*
                      5:  *
                      6:  * Copyright (c) 1997 Charles D. Cranor and Washington University.
                      7:  * All rights reserved.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. All advertising materials mentioning features or use of this software
                     18:  *    must display the following acknowledgement:
                     19:  *      This product includes software developed by Charles D. Cranor and
                     20:  *      Washington University.
                     21:  * 4. The name of the author may not be used to endorse or promote products
                     22:  *    derived from this software without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     26:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     27:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     28:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     29:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     30:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     31:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     32:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     33:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     34:  */
                     35:
                     36: #ifndef _UVM_UVM_ANON_H_
                     37: #define _UVM_UVM_ANON_H_
                     38:
                     39: /*
                     40:  * uvm_anon.h
                     41:  */
                     42:
                     43: /*
                     44:  * anonymous memory management
                     45:  *
                     46:  * anonymous virtual memory is short term virtual memory that goes away
                     47:  * when the processes referencing it go away.    an anonymous page of
                     48:  * virtual memory is described by the following data structure:
                     49:  */
                     50:
                     51: struct vm_anon {
                     52:        struct vm_page *an_page;        /* if in RAM [an_lock] */
                     53:        int an_ref;                     /* reference count [an_lock] */
                     54:        int an_swslot;          /* drum swap slot # (if != 0)
                     55:                                   [an_lock.  also, it is ok to read
                     56:                                   an_swslot if we hold an_page PG_BUSY] */
                     57:        simple_lock_data_t an_lock;     /* lock for an_ref */
                     58: };
                     59:
                     60: /*
                     61:  * for active vm_anon's the data can be in one of the following state:
                     62:  * [1] in a vm_page with no backing store allocated yet, [2] in a vm_page
                     63:  * with backing store allocated, or [3] paged out to backing store
                     64:  * (no vm_page).
                     65:  *
                     66:  * for pageout in case [2]: if the page has been modified then we must
                     67:  * flush it out to backing store, otherwise we can just dump the
                     68:  * vm_page.
                     69:  */
                     70:
                     71: /*
                     72:  * anons are grouped together in anonymous memory maps, or amaps.
                     73:  * amaps are defined in uvm_amap.h.
                     74:  */
                     75:
                     76: /*
                     77:  * processes reference anonymous virtual memory maps with an anonymous
                     78:  * reference structure:
                     79:  */
                     80:
                     81: struct vm_aref {
                     82:        int ar_pageoff;                 /* page offset into amap we start */
                     83:        struct vm_amap *ar_amap;        /* pointer to amap */
                     84: };
                     85:
                     86: /*
                     87:  * the offset field indicates which part of the amap we are referencing.
                     88:  * locked by vm_map lock.
                     89:  */
                     90:
                     91: #ifdef _KERNEL
                     92:
                     93: /*
                     94:  * prototypes
                     95:  */
                     96:
                     97: struct vm_anon *uvm_analloc(void);
                     98: void uvm_anfree(struct vm_anon *);
                     99: void uvm_anon_init(void);
                    100: struct vm_page *uvm_anon_lockloanpg(struct vm_anon *);
                    101: void uvm_anon_dropswap(struct vm_anon *);
                    102: boolean_t uvm_anon_pagein(struct vm_anon *);
                    103: #endif /* _KERNEL */
                    104:
                    105: #endif /* _UVM_UVM_ANON_H_ */

CVSweb