Annotation of Net2/vm/vm_object.h, revision 1.1.1.2

1.1       root        1: /* 
                      2:  * Copyright (c) 1991 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * The Mach Operating System project at Carnegie-Mellon University.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by the University of
                     19:  *     California, Berkeley and its contributors.
                     20:  * 4. Neither the name of the University nor the names of its contributors
                     21:  *    may be used to endorse or promote products derived from this software
                     22:  *    without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     34:  * SUCH DAMAGE.
                     35:  *
1.1.1.2 ! root       36:  *     from: @(#)vm_object.h   7.3 (Berkeley) 4/21/91
        !            37:  *     vm_object.h,v 1.3 1993/05/20 03:59:36 cgd Exp
1.1       root       38:  *
                     39:  *
                     40:  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
                     41:  * All rights reserved.
                     42:  *
                     43:  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
                     44:  * 
                     45:  * Permission to use, copy, modify and distribute this software and
                     46:  * its documentation is hereby granted, provided that both the copyright
                     47:  * notice and this permission notice appear in all copies of the
                     48:  * software, derivative works or modified versions, and any portions
                     49:  * thereof, and that both notices appear in supporting documentation.
                     50:  * 
                     51:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
                     52:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
                     53:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     54:  * 
                     55:  * Carnegie Mellon requests users of this software to return to
                     56:  *
                     57:  *  Software Distribution Coordinator  or  [email protected]
                     58:  *  School of Computer Science
                     59:  *  Carnegie Mellon University
                     60:  *  Pittsburgh PA 15213-3890
                     61:  *
                     62:  * any improvements or extensions that they make and grant Carnegie the
                     63:  * rights to redistribute these changes.
                     64:  */
                     65: 
1.1.1.2 ! root       66: #ifndef _VM_VM_OBJECT_H_
        !            67: #define _VM_VM_OBJECT_H_
        !            68: 
1.1       root       69: /*
                     70:  *     Virtual memory object module definitions.
                     71:  */
                     72: 
                     73: #include <vm/vm_pager.h>
                     74: 
                     75: /*
                     76:  *     Types defined:
                     77:  *
                     78:  *     vm_object_t             Virtual memory object.
                     79:  */
                     80: 
                     81: struct vm_object {
                     82:        queue_chain_t           memq;           /* Resident memory */
                     83:        queue_chain_t           object_list;    /* list of all objects */
                     84:        simple_lock_data_t      Lock;           /* Synchronization */
                     85:        int                     LockHolder;
                     86:        int                     ref_count;      /* How many refs?? */
                     87:        vm_size_t               size;           /* Object size */
                     88:        int                     resident_page_count;
                     89:                                                /* number of resident pages */
                     90:        struct vm_object        *copy;          /* Object that holds copies of
                     91:                                                   my changed pages */
                     92:        vm_pager_t              pager;          /* Where to get data */
                     93:        boolean_t               pager_ready;    /* Have pager fields been filled? */
                     94:        vm_offset_t             paging_offset;  /* Offset into paging space */
                     95:        struct vm_object        *shadow;        /* My shadow */
                     96:        vm_offset_t             shadow_offset;  /* Offset in shadow */
                     97:        unsigned int
                     98:                                paging_in_progress:16,
                     99:                                                /* Paging (in or out) - don't
                    100:                                                   collapse or destroy */
                    101:        /* boolean_t */         can_persist:1,  /* allow to persist */
                    102:        /* boolean_t */         internal:1;     /* internally created object */
                    103:        queue_chain_t           cached_list;    /* for persistence */
                    104: };
                    105: 
                    106: typedef struct vm_object       *vm_object_t;
                    107: 
                    108: struct vm_object_hash_entry {
                    109:        queue_chain_t           hash_links;     /* hash chain links */
                    110:        vm_object_t             object;         /* object we represent */
                    111: };
                    112: 
                    113: typedef struct vm_object_hash_entry    *vm_object_hash_entry_t;
                    114: 
                    115: #ifdef KERNEL
                    116: queue_head_t   vm_object_cached_list;  /* list of objects persisting */
                    117: int            vm_object_cached;       /* size of cached list */
                    118: simple_lock_data_t     vm_cache_lock;  /* lock for object cache */
                    119: 
                    120: queue_head_t   vm_object_list;         /* list of allocated objects */
                    121: long           vm_object_count;        /* count of all objects */
                    122: simple_lock_data_t     vm_object_list_lock;
                    123:                                        /* lock for object list and count */
                    124: 
                    125: vm_object_t    kernel_object;          /* the single kernel object */
                    126: vm_object_t    kmem_object;
                    127: 
                    128: #define        vm_object_cache_lock()          simple_lock(&vm_cache_lock)
                    129: #define        vm_object_cache_unlock()        simple_unlock(&vm_cache_lock)
                    130: #endif KERNEL
                    131: 
                    132: /*
                    133:  *     Declare procedures that operate on VM objects.
                    134:  */
                    135: 
                    136: void           vm_object_init ();
                    137: void           vm_object_terminate();
                    138: vm_object_t    vm_object_allocate();
                    139: void           vm_object_reference();
                    140: void           vm_object_deallocate();
                    141: void           vm_object_pmap_copy();
                    142: void           vm_object_pmap_remove();
                    143: void           vm_object_page_remove();
                    144: void           vm_object_shadow();
                    145: void           vm_object_copy();
                    146: void           vm_object_collapse();
                    147: vm_object_t    vm_object_lookup();
                    148: void           vm_object_enter();
                    149: void           vm_object_setpager();
                    150: #define                vm_object_cache(pager)          pager_cache(vm_object_lookup(pager),TRUE)
                    151: #define                vm_object_uncache(pager)        pager_cache(vm_object_lookup(pager),FALSE)
                    152: 
                    153: void           vm_object_cache_clear();
                    154: void           vm_object_print();
                    155: 
                    156: #if    VM_OBJECT_DEBUG
                    157: #define        vm_object_lock_init(object)     { simple_lock_init(&(object)->Lock); (object)->LockHolder = 0; }
                    158: #define        vm_object_lock(object)          { simple_lock(&(object)->Lock); (object)->LockHolder = (int) current_thread(); }
                    159: #define        vm_object_unlock(object)        { (object)->LockHolder = 0; simple_unlock(&(object)->Lock); }
                    160: #define        vm_object_lock_try(object)      (simple_lock_try(&(object)->Lock) ? ( ((object)->LockHolder = (int) current_thread()) , TRUE) : FALSE)
                    161: #define        vm_object_sleep(event, object, interruptible) \
                    162:                                        { (object)->LockHolder = 0; thread_sleep((event), &(object)->Lock, (interruptible)); }
                    163: #else  VM_OBJECT_DEBUG
                    164: #define        vm_object_lock_init(object)     simple_lock_init(&(object)->Lock)
                    165: #define        vm_object_lock(object)          simple_lock(&(object)->Lock)
                    166: #define        vm_object_unlock(object)        simple_unlock(&(object)->Lock)
                    167: #define        vm_object_lock_try(object)      simple_lock_try(&(object)->Lock)
                    168: #define        vm_object_sleep(event, object, interruptible) \
                    169:                                        thread_sleep((event), &(object)->Lock, (interruptible))
                    170: #endif VM_OBJECT_DEBUG
                    171: 
1.1.1.2 ! root      172: #endif /* !_VM_VM_OBJECT_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.