Zwalnianie obszaru VMA

Zwalnianiem obszarów pamięci wirtualnej procesu zajmuje się funkcja do_munmmap (zdefiniowana w pliku mmap.c). Poniżej podaję uproszczony opis działania tej funkcji (bez sytuacji wyjątkowych i błędów).

Funkcja do_munmmap dostaje adres początkowy i zakres zwalnianego obszaru. Uwaga! podany zakres nie musi odpowiadać zakresowi opisywanemu przez jakiś deskryptor VMA. Funkcja najpierw sprawdza czy podany adres istnieje i czy będzie mogła stworzyć nowy deskryptor VMA na wypadek gdyby zakres był w środku obszaru opisywanego innym deskryptorem i trzeba było go podzielić na dwa. Następnie zbiera w listę obszary przecinające się z podanym zakresem. Potem dla każdego obszaru VMA z tej listy:
-- zwalnia strony przydzielone obszarowi;
-- zwalnia pamięć obszaru, są tu cztery przypadki:
- zwolniony zostanie cały obszar;
- zwolniony zostanie jego początek;
- zwolniony zostanie jego środek;
- zwolniony zostanie jego koniec.
Wszystkie te przypadki obsługiwane są funkcją unmap_fixup.


Tomasz Szymko 27 listopada 2001