#include <mach/vm_purgable.h> also included by
<mach/mach.h>mach/vm_purgable.h
Virtual memory map purgeable object definitions.
Objects that will be needed in the future (forward cached objects) should be queued LIFO.
Objects that have been used and are cached for reuse (backward cached) should be queued FIFO.
Every user of purgeable memory is entitled to using the highest volatile group (7).
Only if a client wants some of its objects to definitely be purged earlier, it can put those in
another group. This could be used to make all FIFO objects (in the lower group) go away before
any LIFO objects (in the higher group) go away.
Objects that should not get any chance to stay around can be marked as "obsolete". They will
be emptied before any other objects or pages are reclaimed. Obsolete objects are not emptied
in any particular order.
'purgeable' is recognized as the correct spelling. For historical reasons, definitions
in this file are spelled 'purgable'.
typedefvm_purgable_t
typedef int vm_purgable_t
macroVM_PURGABLE_SET_STATE
Enumeration of valid values for vm_purgable_t.
When making a new VM_PURGABLE_*, update tests vm_parameter_validation_[user|kern]
and their expected results; they deliberately call VM functions with invalid
values and you may be turning one of those invalid bits valid.
#define VM_PURGABLE_SET_STATE ((vm_purgable_t) 0)
set state of purgeable object
macroVM_PURGABLE_GET_STATE
#define VM_PURGABLE_GET_STATE ((vm_purgable_t) 1)
get state of purgeable object
macroVM_PURGABLE_PURGE_ALL
#define VM_PURGABLE_PURGE_ALL ((vm_purgable_t) 2)
purge all volatile objects now
macroVM_PURGABLE_SET_STATE_FROM_KERNEL
#define VM_PURGABLE_SET_STATE_FROM_KERNEL ((vm_purgable_t) 3)
set state from kernel
macroVM_PURGABLE_NO_AGING_SHIFT
#define VM_PURGABLE_NO_AGING_SHIFT 16
macroVM_PURGABLE_NO_AGING_MASK
#define VM_PURGABLE_NO_AGING_MASK (0x1 << VM_PURGABLE_NO_AGING_SHIFT)
macroVM_PURGABLE_NO_AGING
#define VM_PURGABLE_NO_AGING (0x1 << VM_PURGABLE_NO_AGING_SHIFT)
macroVM_PURGABLE_DEBUG_SHIFT
#define VM_PURGABLE_DEBUG_SHIFT 12
macroVM_PURGABLE_DEBUG_MASK
#define VM_PURGABLE_DEBUG_MASK (0x3 << VM_PURGABLE_DEBUG_SHIFT)
macroVM_PURGABLE_DEBUG_EMPTY
#define VM_PURGABLE_DEBUG_EMPTY (0x1 << VM_PURGABLE_DEBUG_SHIFT)
macroVM_PURGABLE_DEBUG_FAULT
#define VM_PURGABLE_DEBUG_FAULT (0x2 << VM_PURGABLE_DEBUG_SHIFT)
macroVM_VOLATILE_GROUP_SHIFT
Volatile memory ordering groups (group zero objects are purged before group 1, etc...
It is implementation dependent as to whether these groups are global or per-address space.
(for the moment, they are global).
#define VM_VOLATILE_GROUP_SHIFT 8
macroVM_VOLATILE_GROUP_MASK
#define VM_VOLATILE_GROUP_MASK (7 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_DEFAULT
#define VM_VOLATILE_GROUP_DEFAULT VM_VOLATILE_GROUP_0
macroVM_VOLATILE_GROUP_0
#define VM_VOLATILE_GROUP_0 (0 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_1
#define VM_VOLATILE_GROUP_1 (1 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_2
#define VM_VOLATILE_GROUP_2 (2 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_3
#define VM_VOLATILE_GROUP_3 (3 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_4
#define VM_VOLATILE_GROUP_4 (4 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_5
#define VM_VOLATILE_GROUP_5 (5 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_6
#define VM_VOLATILE_GROUP_6 (6 << VM_VOLATILE_GROUP_SHIFT)
macroVM_VOLATILE_GROUP_7
#define VM_VOLATILE_GROUP_7 (7 << VM_VOLATILE_GROUP_SHIFT)
macroVM_PURGABLE_BEHAVIOR_SHIFT
Purgeable behavior
Within the same group, FIFO objects will be emptied before objects that are added later.
LIFO objects will be emptied after objects that are added later.
- Input only, not returned on state queries.
#define VM_PURGABLE_BEHAVIOR_SHIFT 6
macroVM_PURGABLE_BEHAVIOR_MASK
#define VM_PURGABLE_BEHAVIOR_MASK (1 << VM_PURGABLE_BEHAVIOR_SHIFT)
macroVM_PURGABLE_BEHAVIOR_FIFO
#define VM_PURGABLE_BEHAVIOR_FIFO (0 << VM_PURGABLE_BEHAVIOR_SHIFT)
macroVM_PURGABLE_BEHAVIOR_LIFO
#define VM_PURGABLE_BEHAVIOR_LIFO (1 << VM_PURGABLE_BEHAVIOR_SHIFT)
macroVM_PURGABLE_ORDERING_SHIFT
Obsolete object.
Disregard volatile group, and put object into obsolete queue instead, so it is the next object
to be purged.
- Input only, not returned on state queries.
#define VM_PURGABLE_ORDERING_SHIFT 5
macroVM_PURGABLE_ORDERING_MASK
#define VM_PURGABLE_ORDERING_MASK (1 << VM_PURGABLE_ORDERING_SHIFT)
macroVM_PURGABLE_ORDERING_OBSOLETE
#define VM_PURGABLE_ORDERING_OBSOLETE (1 << VM_PURGABLE_ORDERING_SHIFT)
macroVM_PURGABLE_ORDERING_NORMAL
#define VM_PURGABLE_ORDERING_NORMAL (0 << VM_PURGABLE_ORDERING_SHIFT)
macroVM_VOLATILE_ORDER_MASK
#define VM_VOLATILE_ORDER_MASK (1 << VM_VOLATILE_ORDER_SHIFT)
macroVM_VOLATILE_MAKE_FIRST_IN_GROUP
#define VM_VOLATILE_MAKE_FIRST_IN_GROUP (1 << VM_VOLATILE_ORDER_SHIFT)
macroVM_VOLATILE_MAKE_LAST_IN_GROUP
#define VM_VOLATILE_MAKE_LAST_IN_GROUP (0 << VM_VOLATILE_ORDER_SHIFT)
macroVM_PURGABLE_STATE_MIN
Valid states of a purgeable object.
#define VM_PURGABLE_STATE_MIN 0
minimum purgeable object state value
macroVM_PURGABLE_ALL_MASKS
#define VM_PURGABLE_ALL_MASKS (VM_PURGABLE_STATE_MASK | VM_VOLATILE_ORDER_MASK | VM_PURGABLE_ORDERING_MASK | VM_PURGABLE_BEHAVIOR_MASK | VM_VOLATILE_GROUP_MASK | VM_PURGABLE_DEBUG_MASK | VM_PURGABLE_NO_AGING_MASK)