*参照元 [#zd477076] #backlinks *説明 [#g61899df] -パス: [[linux-2.6.33/include/linux/mm_types.h]] -FIXME: これは何? --説明 **参考 [#ja9be71d] *実装 [#k2824ad6] /* * Each physical page in the system has a struct page associated with * it to keep track of whatever it is we are using the page for at the * moment. Note that we have no way to track which tasks are using * a page, though if it is a pagecache page, rmap structures can tell us * who is mapping it. */ struct page { unsigned long flags; /* Atomic flags, some possibly * updated asynchronously */ atomic_t _count; /* Usage count, see below. */ - --[[linux-2.6.33/]] --[[linux-2.6.33/atomic_t]] union { atomic_t _mapcount; /* Count of ptes mapped in mms, * to show when page is mapped * & limit reverse map searches. */ struct { /* SLUB */ u16 inuse; u16 objects; }; }; union { struct { unsigned long private; /* Mapping-private opaque data: * usually used for buffer_heads * if PagePrivate set; used for * swp_entry_t if PageSwapCache; * indicates order in the buddy * system if PG_buddy is set. */ struct address_space *mapping; /* If low bit clear, points to * inode address_space, or NULL. * If page mapped as anonymous * memory, low bit is set, and * it points to anon_vma object: * see PAGE_MAPPING_ANON below. */ - --[[linux-2.6.33/]] --[[linux-2.6.33/address_space]] }; #if USE_SPLIT_PTLOCKS - --[[linux-2.6.33/USE_SPLIT_PTLOCKS]] spinlock_t ptl; - --[[linux-2.6.33/]] --[[linux-2.6.33/spinlock_t]] #endif struct kmem_cache *slab; /* SLUB: Pointer to slab */ - --[[linux-2.6.33/]] --[[linux-2.6.33/kmem_cache]] struct page *first_page; /* Compound tail pages */ - --[[linux-2.6.33/]] --[[linux-2.6.33/page]] }; union { pgoff_t index; /* Our offset within mapping. */ void *freelist; /* SLUB: freelist req. slab lock */ }; - --[[linux-2.6.33/pgoff_t]] struct list_head lru; /* Pageout list, eg. active_list * protected by zone->lru_lock ! */ - --[[linux-2.6.33/]] --[[linux-2.6.33/list_head]] /* * On machines where all RAM is mapped into kernel address space, * we can simply calculate the virtual address. On machines with * highmem some memory is mapped into kernel virtual memory * dynamically, so we need a place to store that address. * Note that this field could be 16 bits on x86 ... ;) * * Architectures with slow multiplication can define * WANT_PAGE_VIRTUAL in asm/page.h */ #if defined(WANT_PAGE_VIRTUAL) - --[[linux-2.6.33/WANT_PAGE_VIRTUAL]] void *virtual; /* Kernel virtual address (NULL if not kmapped, ie. highmem) */ #endif /* WANT_PAGE_VIRTUAL */ #ifdef CONFIG_WANT_PAGE_DEBUG_FLAGS - --[[linux-2.6.33/CONFIG_WANT_PAGE_DEBUG_FLAGS]] unsigned long debug_flags; /* Use atomic bitops on this */ #endif #ifdef CONFIG_KMEMCHECK - --[[linux-2.6.33/CONFIG_KMEMCHECK]] /* * kmemcheck wants to track the status of each byte in a page; this * is a pointer to such a status block. NULL if not tracked. */ void *shadow; #endif }; *コメント [#sa12ecea]