next up previous contents
Next: Stronicowanie Up: Pamięć Wirtualna w Linuksie Previous: Segmentacja   Spis rzeczy

Odwzorowanie wirtualnej przestrzeni adresowej procesu

Wirtualna przestrzeń adresowa każdego procesu jest podzielona na dwie główne części:
  1. 0 - 3GB - przestrzeń procesu
  2. 3GB - 4GB - przestrzeń jądra
Przestrzeń jądra jest współdzielona przez wszystkie procesy. Dostęp do niej jest możliwy tylko w trybie jądra. Na początku tej części przestrzeni adresowej odwzorowana jest pamięć fizyczna.

Dla każdego procesu jądro utrzymuje strukturę opisującą przestrzeń adresową procesu. W tej strukturze znajduje się m.in. lista struktur opisujących ciągłe obszary pamięci (wirtualnej). Każdy ciągły obszar może mieć różne metody wykonywania zadań związanych z wirtualną pamięcią (głównie obsługa błędu braku strony), to pozwala jądru na poprawną obsługę wirtualnych regionów, które są używane w różny sposób. Np. dla obszaru związanego z kodem procesu obsługa błędu braku strony polega na wczytaniu odpowiedniej strony z pliku, dla obszaru przydzielonego przez malloc() obsługa błędu polega na ściągnięciu strony z pliku wymiany (lub jego pamięci podręcznej) lub przydzieleniu nowej strony.

Zawsze istnieją co najmniej trzy obszary:

  1. kod i zainicjowane dane
  2. niezainicjalizowane dane i sterta (bezpośrednio za poprzednim)
  3. stos
Dodatkowo jest też obszar na biblioteki dzielone. Obszary są przechowywane w dwóch strukturach: lista i drzewo czerwono-czarne. Lista jest uporządkowana według adresów obszarów. Drzewo pozwala na szybkie wyszukiwanie przynależnego adresowi obszaru co przyspiesza np. obsługę błędu braku strony.

Pamięć bezpośrednio za 3GB odwzorowuje w sposób ciągły pamięć fizyczną. Jeżeli pamięci fizycznej jest więcej niż 896MB, to pozostała część jest dostępna jako ,,HIGHMEM'' (tylko na pamięć podręczną i pamięć procesów). Pozostałe 128MB jest wykorzystywane do przydzielania ciągłych obszarów wirtualnej pamięci dla jądra oraz odwzorowywania stron ze strefy ,,HIGHMEM''.


next up previous contents
Next: Stronicowanie Up: Pamięć Wirtualna w Linuksie Previous: Segmentacja   Spis rzeczy
Jarek Babel 2002-12-10