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

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:  *
                     36:  *     @(#)vm_object.h 7.3 (Berkeley) 4/21/91
                     37:  *
                     38:  *
                     39:  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
                     40:  * All rights reserved.
                     41:  *
                     42:  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
                     43:  * 
                     44:  * Permission to use, copy, modify and distribute this software and
                     45:  * its documentation is hereby granted, provided that both the copyright
                     46:  * notice and this permission notice appear in all copies of the
                     47:  * software, derivative works or modified versions, and any portions
                     48:  * thereof, and that both notices appear in supporting documentation.
                     49:  * 
                     50:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
                     51:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
                     52:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     53:  * 
                     54:  * Carnegie Mellon requests users of this software to return to
                     55:  *
                     56:  *  Software Distribution Coordinator  or  [email protected]
                     57:  *  School of Computer Science
                     58:  *  Carnegie Mellon University
                     59:  *  Pittsburgh PA 15213-3890
                     60:  *
                     61:  * any improvements or extensions that they make and grant Carnegie the
                     62:  * rights to redistribute these changes.
                     63:  */
                     64: 
                     65: /*
                     66:  *     Virtual memory object module definitions.
                     67:  */
                     68: 
                     69: #ifndef        _VM_OBJECT_
                     70: #define        _VM_OBJECT_
                     71: 
                     72: #include <vm/vm_pager.h>
                     73: 
                     74: /*
                     75:  *     Types defined:
                     76:  *
                     77:  *     vm_object_t             Virtual memory object.
                     78:  */
                     79: 
                     80: struct vm_object {
                     81:        queue_chain_t           memq;           /* Resident memory */
                     82:        queue_chain_t           object_list;    /* list of all objects */
                     83:        simple_lock_data_t      Lock;           /* Synchronization */
                     84:        int                     LockHolder;
                     85:        int                     ref_count;      /* How many refs?? */
                     86:        vm_size_t               size;           /* Object size */
                     87:        int                     resident_page_count;
                     88:                                                /* number of resident pages */
                     89:        struct vm_object        *copy;          /* Object that holds copies of
                     90:                                                   my changed pages */
                     91:        vm_pager_t              pager;          /* Where to get data */
                     92:        boolean_t               pager_ready;    /* Have pager fields been filled? */
                     93:        vm_offset_t             paging_offset;  /* Offset into paging space */
                     94:        struct vm_object        *shadow;        /* My shadow */
                     95:        vm_offset_t             shadow_offset;  /* Offset in shadow */
                     96:        unsigned int
                     97:                                paging_in_progress:16,
                     98:                                                /* Paging (in or out) - don't
                     99:                                                   collapse or destroy */
                    100:        /* boolean_t */         can_persist:1,  /* allow to persist */
                    101:        /* boolean_t */         internal:1;     /* internally created object */
                    102:        queue_chain_t           cached_list;    /* for persistence */
                    103: };
                    104: 
                    105: typedef struct vm_object       *vm_object_t;
                    106: 
                    107: struct vm_object_hash_entry {
                    108:        queue_chain_t           hash_links;     /* hash chain links */
                    109:        vm_object_t             object;         /* object we represent */
                    110: };
                    111: 
                    112: typedef struct vm_object_hash_entry    *vm_object_hash_entry_t;
                    113: 
                    114: #ifdef KERNEL
                    115: queue_head_t   vm_object_cached_list;  /* list of objects persisting */
                    116: int            vm_object_cached;       /* size of cached list */
                    117: simple_lock_data_t     vm_cache_lock;  /* lock for object cache */
                    118: 
                    119: queue_head_t   vm_object_list;         /* list of allocated objects */
                    120: long           vm_object_count;        /* count of all objects */
                    121: simple_lock_data_t     vm_object_list_lock;
                    122:                                        /* lock for object list and count */
                    123: 
                    124: vm_object_t    kernel_object;          /* the single kernel object */
                    125: vm_object_t    kmem_object;
                    126: 
                    127: #define        vm_object_cache_lock()          simple_lock(&vm_cache_lock)
                    128: #define        vm_object_cache_unlock()        simple_unlock(&vm_cache_lock)
                    129: #endif KERNEL
                    130: 
                    131: /*
                    132:  *     Declare procedures that operate on VM objects.
                    133:  */
                    134: 
                    135: void           vm_object_init ();
                    136: void           vm_object_terminate();
                    137: vm_object_t    vm_object_allocate();
                    138: void           vm_object_reference();
                    139: void           vm_object_deallocate();
                    140: void           vm_object_pmap_copy();
                    141: void           vm_object_pmap_remove();
                    142: void           vm_object_page_remove();
                    143: void           vm_object_shadow();
                    144: void           vm_object_copy();
                    145: void           vm_object_collapse();
                    146: vm_object_t    vm_object_lookup();
                    147: void           vm_object_enter();
                    148: void           vm_object_setpager();
                    149: #define                vm_object_cache(pager)          pager_cache(vm_object_lookup(pager),TRUE)
                    150: #define                vm_object_uncache(pager)        pager_cache(vm_object_lookup(pager),FALSE)
                    151: 
                    152: void           vm_object_cache_clear();
                    153: void           vm_object_print();
                    154: 
                    155: #if    VM_OBJECT_DEBUG
                    156: #define        vm_object_lock_init(object)     { simple_lock_init(&(object)->Lock); (object)->LockHolder = 0; }
                    157: #define        vm_object_lock(object)          { simple_lock(&(object)->Lock); (object)->LockHolder = (int) current_thread(); }
                    158: #define        vm_object_unlock(object)        { (object)->LockHolder = 0; simple_unlock(&(object)->Lock); }
                    159: #define        vm_object_lock_try(object)      (simple_lock_try(&(object)->Lock) ? ( ((object)->LockHolder = (int) current_thread()) , TRUE) : FALSE)
                    160: #define        vm_object_sleep(event, object, interruptible) \
                    161:                                        { (object)->LockHolder = 0; thread_sleep((event), &(object)->Lock, (interruptible)); }
                    162: #else  VM_OBJECT_DEBUG
                    163: #define        vm_object_lock_init(object)     simple_lock_init(&(object)->Lock)
                    164: #define        vm_object_lock(object)          simple_lock(&(object)->Lock)
                    165: #define        vm_object_unlock(object)        simple_unlock(&(object)->Lock)
                    166: #define        vm_object_lock_try(object)      simple_lock_try(&(object)->Lock)
                    167: #define        vm_object_sleep(event, object, interruptible) \
                    168:                                        thread_sleep((event), &(object)->Lock, (interruptible))
                    169: #endif VM_OBJECT_DEBUG
                    170: 
                    171: #endif _VM_OBJECT_

unix.superglobalmegacorp.com

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