typedef struct page { struct list_head list; struct address_space *mapping; unsigned long index; struct page *next_hash; atomic_t count; // 0 wolny; wiecej -tyle razy przypisany jakim¶ stonom unsigned long flags; // flagi (PG_DMA, PG_locked, PG_referenced,PG_reserved, PG_Slab struct list_head lru; unsigned long age; wait_queue_head_t wait; struct page **pprev_hash; struct buffer_head * buffers; void *virtual; /* non-NULL if kmapped */ struct zone_struct *zone; } mem_map_t;
extern mem_map_t * mem_map;
flush_tlb_page() (dla buforów TLB)
pgd_t
do_page_fault() handle_pagefault()
-- stronicowanie na ż±danie (zera w pgd_t - nie przydzielona ramka, swap - not Present)
do_not_page() i do_swap_page()
-odzielnie zapis oddzielnie odczyt
-zapis __get_free_page() i memset (Dirty)
- odczyt ZERO_PAGE
--cow (kopiowanie przy zapisie)
-czy strone posiada jeden proces (nie lekki) - pole count mem_map_t
-kopiowanie jeżeli ZERO_PAGE to zerowanie memset
ciekawostki -brk() to free() malloc() i calloc() + libc
-co można wymieniać, kiedy wymieniać
-sloty
-indentyfikator (zamias FPE mamy inode i nr)
-swap_out()