[ Pobierz całość w formacie PDF ]
.h - Plik zawierająšcydefinicje struktur:struct vm_area_struct- Struktura służąšca do obsługi wirtualnej przestrzeni adresowej.Pamięćwirtualna procesu reprezentowana jest przez listę i drzewo AVL strukturvm_area_struct opisująšcych przyznane procesowi spójne obszary wirtualnejprzestrzeni adresowej.struct vm_operations_struct- Struktura zawierajšąca funkcje obsługująšce strukturę vm_area_struct.struct page- Struktura zawierająšca informacje o poszczególnych ramkach./include/linux/swapctl.h - Plikten zawiera funkcje służšące do postarzania i odmładzania ramek.Są tonastępujące funkcje:void touch_page(struct page *page) - Funkcja odmładzająca ramki.void age_page(struct page *page) - Funkcja postarzająca ramki.void age_of(unsigned long addr) - Funkcja zwracająca wiek ramkio adresie: addr.void set_page_new(unsigned long addr) -Funkcja inicjująšca wiekramki jako PAGE_INITIAL_AGE.7.Błędybraku i ochrony strony/linux/arch/i386/mm/fault.c - Plikten zawiera funkcję:void do_page_fault(struct pt_regs *regs, unsigned long error_code)- Funkcja ta niemal bezpośrednio obsługuje przerwanie błędu strony.Argumentyto wskaźŸnik do kopii zawartości rejestrów w momencie powstania wyjąštkuoraz kod błędu.Pierwsze trzy bity kodu błędu informujšą czy nastąšpił błąšdbraku strony, czy ochrony strony, to determinuje czy wołana jest funkcjaobsługi ochrony, czy braku strony./linux/mm/memory.c - Plik ten zawieranastępująšce funkcje:void do_wp_page(struct task_struct * tsk, struct vm_area_struct* vma, unsigned long address, int write_access) - Funkcja ta jest wywoływanaprzez niskopoziomowy handler "do_page_fault" w przypadku, gdywystąšpiło odwołanie do strony, do której proces nie ma praw zapisu.Mato miejsce w przypadku, gdy strona pamięci jest dzielona lub została niedawnowykonana operacja fork() i nie zostały fizycznie skopiowane strony procesumacierzystego do potomnego.void do_swap_page(struct task_struct * tsk, struct vm_area_struct* vma, unsigned long address, pte_t * page_table, pte_t entry, int write_access)-Funkcja wczytuje strony z dysku.void do_no_page(struct task_struct * tsk, struct vm_area_struct* vma, unsigned long address, int write_access) - Funkcja ta jest wywoływanaprzez niskopoziomowy handler "do_page_fault" w przypadku, gdywystapiło odwołanie do strony, której jeszcze nie ma w pamięci.Jest towielka rozdzielnia, która sprawdza stan ramki w pamieci i w zależnościod tego wywołuje odpowiednie akcje: 1.jeśli strona znajduje się w pamięci(przydzielona innemu procesowi) następuje uaktualnienie deskryptora strony,jeśli strona jest dostępna na urząšdzeniu wymiany następuje wczytanie stronyz dysku, jeśli strona jest niezainicjalizowana następuje pobranie nowejstrony z puli systemu i uaktualnienie deskryptorów).8.Pamięć dla jądra/linux/mm/kmalloc.c - Plik tenzawiera implementację mechanizmu przydziału pamięci dla jąšdra.Zawieraon dwie funkcje oraz definicję tablicy, na której te funkcje operujšą:struct size_descriptorsizes[]- Tablica zawierająca początki list wolnych obszarów pamięciramek, które moduł odpowiedzialny za przydział pamięci dla jądra otrzymałod modułu zarządzającego ramkami.Lista o początku sizes[i] zawieraobszary pamięci rozmiaru 2(i+5).struct block_header- Struktura opisująca pojedynczy blok przydzielany jądru.struct page_descriptor- Struktura opisująca pojedynczy element listy, której dowiązanie dopoczątku przechowuje element sizes[i].void* kmalloc(int size, int priority) - Funkcja przydzielająšcašjšądru obszar pamięci rozmiaru size.Przegląšda tablicę SIZES w poszukiwaniuodpowiedniego obszaru lub żąda przydziału ramki pamięci, z której wycinaodpowiedni obszar, a resztę zapamiętuje w tablicy SIZES.int kfree(void * __ptr) - Funkcja zwalniająšcaš obszar pamięciwskazywany przez argument __ptr.Przygotował na podstawie skomentowanych źŸródeł: Jacek Korkuć
[ Pobierz całość w formacie PDF ]