|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6697 (0x1a29) Types: TextFile Notes: UNIX file Names: »region.h«
└─⟦a6ab2eb36⟧ Bits:30004042/kconfig3.imd SW95705I 386/ix Multi-user Release 1.2 └─⟦a6ab2eb36⟧ UNIX Filesystem └─⟦this⟧ »kc/new/usr/include/sys/region.h«
/* Copyright (c) 1987 AT&T */ /* All Rights Reserved */ /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ /* The copyright notice above does not evidence any */ /* actual or intended publication of such source code. */ #ident "@(#)region.h 1.12 - 88/07/15" /* The page table entries are paired with a list of disk block * descriptors which give the location on disk where a * copy of the corresponding page is found. If the page * is on swap, it is always a single block. However, if * it is on a regular file, a single page may correspond * to a number of non-consecutive disk blocks. */ typedef struct dbd { uint dbd_type : 3; /* The values for this field are given */ /* below. */ uint dbd_cw : 1; /* Copy of the Bit pg_cw, if dbd is */ /* swapped out */ #define DB_CW 8 uint dbd_swpi : 4; /* The index into swaptab for the */ /* device this page is on if dbd_type */ /* is DBD_SWAP. */ uint dbd_blkno : 24; /* The block number or i_map index. */ } dbd_t; /* * Per region descriptor. One is allocated for * every active region in the system. */ typedef struct region { short r_flags; /* Various flags defined below. */ long r_pgsz; /* size in pages */ long r_nvalid; /* number of valid pages in region */ short r_refcnt; /* number of users pointing at region */ short r_swapcnt; /* number of users pointing at region */ /* and being swapped out */ short r_type; /* type of region */ short r_waitcnt; /* number of processes waiting for load */ short r_noswapcnt; /* Count of nbr of processes which have */ /* requested that this region not be */ /* swapped out. */ #ifdef VPIX /* (page equiv) */ short r_v86tab; /* hook to the v86tab structure for this*/ /* region. */ #endif /* VPIX (page equiv) */ int r_filesz; /* Size in bytes of section of file */ /* from which this region is loaded. */ pde_t **r_list; /* Pointer to a list of pointers to */ /* page tables. */ dbd_t **r_dlist; /* Pointer to a list of pointers to dbd */ /* tables. */ pde_t **r_ptblptr; /* These four pointers are used in */ dbd_t **r_dtblptr; /* place of r_list and r_dlist for */ pde_t *r_pgptr; /* regions smaller than 4 Mb */ dbd_t *r_dbdptr; struct inode *r_iptr; /* pointer to inode where blocks are */ struct region *r_forw; /* forward link */ struct region *r_back; /* backward link */ } reg_t; #define PAGETABSIZ(rp) (ctos(rp->r_pgsz) << 1) /* * dbd table flags */ #define DBD_NONE 0 /* There is no copy of this page on */ /* disk. */ #define DBD_SWAP 1 /* A copy of this page is on block nbr */ /* dbd_blkno of the swap file */ /* swptbl[dbd_swpi]. */ #define DBD_FILE 2 /* A copy of this page is on the file */ /* described by the inode r_iptr. The */ /* dbd_blkno field is an index into the */ /* i_map list pointed to by the inode. */ /* It is the start of a list of block */ /* number which contain a copy of the */ /* page. */ #define DBD_LSTFILE 3 /* Same as DBD_FILE except that */ /* this is the last page of the region */ #define DBD_DZERO 4 /* This is a demand zero page. No */ /* space is allocated now. When a */ /* fault occurs, allocate a page and */ /* initialize it to all zeros. */ #define DBD_DFILL 5 /* This is a demand fill page. No */ /* space is allocated now. When a */ /* fault occurs, allocate a page and */ /* do not initialize it at all. It */ /* will be initialized by reading in */ /* data from disk. */ #if VPIX || IOMAP /* (io map) */ #define DBD_IOMAP 6 /* This is a page mapped to physical */ /* memory. No space is allocated. */ #endif /* VPIX || IOMAP (io map) */ /* * Region flags */ #define RG_NOFREE 0x0001 /* Don't free region on last detach */ #define RG_DONE 0x0002 /* Region is initialized */ #define RG_NOSHARE 0x0004 /* Don't share the region. */ #define RG_LOCK 0x0008 /* Region is locked */ #define RG_WANTED 0x0010 /* Wakeup rp after clearing RG_LOCK */ #define RG_WAITING 0x0020 /* Wakeup rp->r_flags when RG_DONE is set */ #define XREMOTE 0x0040 /* remote region entry */ #define RG_DOWN 0x0080 /* region grows down (stack) */ #define RG_SWAP 0x0100 /* region page tables are swapped to disk */ #define RG_WEITEK 0x0200 /* region is associated with Weitek chip */ #ifdef VPIX /* (page equiv) */ #define RG_VPIX 0x0400 /* region is a vpix region */ #endif /* VPIX (page equiv) */ /* * Region types */ #define RT_UNUSED 0 /* Region not being used. */ #define RT_PRIVATE 1 /* Private (non-shared) region. */ #define RT_STEXT 2 /* Shared text region */ #define RT_SHMEM 3 /* Shared memory region */ /* Each process has a number of pregions which describe the * regions which are attached to the process. */ typedef struct pregion { struct region *p_reg; /* Pointer to the region. */ caddr_t p_regva; /* User virtual address of */ /* region. */ short p_flags; /* Flags. */ short p_type; /* Type. */ } preg_t; /* Pregion flags. */ #define PF_RDONLY 0x0001 /* Read-only attach. */ /* Pregion types. */ #define PT_UNUSED 0x00 /* Unused region. */ #define PT_TEXT 0x01 /* Text region. */ #define PT_DATA 0x02 /* Data region. */ #define PT_STACK 0x03 /* Stack region. */ #define PT_SHMEM 0x04 /* Shared memory region. */ #define PT_DMM 0x05 /* Double mapped memory. */ #define PT_LIBTXT 0x06 /* Shared library text region. */ #define PT_LIBDAT 0x07 /* Shared library data region. */ #ifdef VPIX #define PT_V86 0x08 /* Virtual 8086 mode region */ #endif extern preg_t nullpregion; /* A null preg_t. */ extern int rlist_lock; /* Lock for the region list. */ extern int pregpp; /* Number of pregions per */ /* process including null one. */ extern reg_t region[]; /* Global array of regions */ extern reg_t ractive; /* List of active regions */ extern reg_t rfree; /* List of free regions */ extern reg_t sysreg; /* System region. */ extern reg_t nullregion; /* A null region. */ reg_t *allocreg(); /* region allocator */ void freereg(); /* region free routine */ preg_t *attachreg(); /* Attach region to process. */ void detachreg(); /* Detach region from process. */ reg_t *dupreg(); /* Duplicate region (fork). */ int growreg(); /* Grow region. */ int loadreg(); /* Load region from file. */ int mapreg(); /* Map region to 413 file. */ reg_t *findreg(); /* Find region from virtual address. */ preg_t *findpreg(); /* Find pregion of given type. */ void chgprot(); /* Change protection for region. */ void reginit(); /* Initialize the region table. */