struct vm_page { TAILQ_ENTRY(vm_page) pageq; /* queue info for FIFO queue or free list (P) */ TAILQ_ENTRY(vm_page) hashq; /* hash table links (O) */ TAILQ_ENTRY(vm_page) listq; /* pages in same object (O) */ vm_object_t object; /* which object am I in (O,P) */ vm_pindex_t pindex; /* offset into object (O,P) */ vm_offset_t phys_addr; /* physical address of page */ u_short queue; /* page queue index */ u_short flags, /* see below */ pc; /* page color */ u_short wire_count; /* wired down maps refs (P) */ short hold_count; /* page hold count */ u_char act_count; /* page usage count */ u_char busy; /* page busy count */ /* NOTE that these must support one bit per DEV_BSIZE in a page!!! */ /* so, on normal X86 kernels, they must be at least 8 bits wide */ u_char valid; /* map of valid DEV_BSIZE chunks */ u_char dirty; /* map of dirty DEV_BSIZE chunks */ };Αντίστοιχα η σελίδα μπορεί να βρίσκεται σε μια από τις παρακάτω καταστάσεις:
#define PG_BUSY 0x01 /* page is in transit (O) */ #define PG_WANTED 0x02 /* someone is waiting for page (O) */ #define PG_TABLED 0x04 /* page is in VP table (O) */ #define PG_FICTITIOUS 0x08 /* physical page doesn't exist (O) */ #define PG_WRITEABLE 0x10 /* page is mapped writeable */ #define PG_MAPPED 0x20 /* page is mapped */ #define PG_ZERO 0x40 /* page is zeroed */ #define PG_REFERENCED 0x80 /* page has been referenced */ #define PG_CLEANCHK 0x100 /* page has been checked for cleaning */Όλες οι σελίδες ανοίκουν σε μια από 5 διαφορετικές λίστες ταξινομημένες σύμφωνα με το κριτήριο LRU (Least Recently Used - Λιγότερο πρόσφατη χρησιμοποιημένη).