Σελιδοποίηση

Κάθε σελίδα συνδέεται με την παρακάτω δομή δεδομένων που περιγράφει τα χαρακτηριστικά της:
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 - Λιγότερο πρόσφατη χρησιμοποιημένη).
free
Σελίδες έτοιμες για χρήση.
cache
Σελίδες σχεδόν έτοιμες για χρήση αφού ελευθερωθούν από τη χρήση βοηθητικής μνήμης.
inactive
Σελίδες που δεν έχουν χρησιμοποιηθεί πρόσφατα και είναι υποψήφιες για νέα χρήση.
active
Σελίδες που έχουν πρόσφατα χρησιμοποιηθεί.
zero
Ελεύθερες σελίδες που έχουν μηδενιστεί.