Trochę o ramkach, stronach, błędach braku strony i wymianie stron

 

Prezentacja by Wojciech Dudek

 

1. Tłumaczenie adresu

adres logiczny->(segmentacja)->adres liniowy-> (stronicowanie) adres fizyczny trzy tablice (glob. katalog stron, pośredni kat. str. , tablica stron)

1.1 tablica ramek

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;

1.2 tablica stron

flush_tlb_page() (dla buforów TLB)
pgd_t

 

2.wyj±tek błędu strony

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


3.Wymiana stron

-co można wymieniać, kiedy wymieniać

-sloty

-indentyfikator (zamias FPE mamy inode i nr)

-swap_out()