[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     ! 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