osdev.labedz.org

Prosty menadżer pamięci

Zadaniem niskopoziomowego menadżera pamięci jest przechowywanie informacji o dostępności poszczególnych stron pamięci, rezerwacje wolnego obszaru pamięci o żądanej wielkości, przekazywanie jego adresu systemowi, oraz zwalnianie odpowiedniego obszaru pamięci.

Najbardziej popularnymi rozwiązaniami menadżera pamięci niskiego poziomu jest mechanizm stosu wolnych stron oraz mechanizm mapy bitowej wolnych stron. Każde z tych rozwiązań jest obecnie stosowane w tworzonych systemach.

Mechanizm stosu wolnych stron działa w sposób podobny do zwykłego stosu programowego. W trakcie inicjacji systemu operacyjnego tworzony jest stos zawierający adresy wolnych stron pamięci. Jeżeli jakaś aplikacja żąda zarezerwowania bloku pamięci, system pobiera adresy ze stosu i przekazuje je do programu. Zwolnienie pamięci polega na ponownym odłożeniu nie używanych już stron na stos. Mechanizm ten charakteryzuje się bardzo szybkim działaniem - nie ma potrzeby poszukiwania wolnego obszaru pamięci. Jest on też stosunkowo prosty do zaimplementowania. Jego wadą jest natomiast problematyczne rezerwowanie większych bloków pamięci przy znacznej defragmentacji pamięci, oraz stosunkowo duży obszar pamięci zajmowany przez stos (dla 4GB pamięci stos ma wielkość ok. 4MB).

Mechanizm stosu wolnych stron
Rys. Mechanizm stosu wolnych stron

Innym sposobem przechowywania informacji na temat wolnych stron pamięci jest tablica bitowa, w której każdy bit odzwierciedla odpowiednią stronę w pamięci komputera. Rezerwacja i zwalnianie stron pamięci polega na ustawianiu, bądź zerowaniu właściwych bitów tablicy. Zaletą tego rozwiązania jest stosunkowo mały obszar zajmowany przez tablicę (przy 4GB pamięci tablica 132KB), oraz prosty mechanizm rezerwacji dużych bloków pamięci. Wadą natomiast jest stosunkowo skomplikowany mechanizm wyznaczania adresów wolnego obszaru pamięci, oraz potrzeba każdorazowego poszukiwania wolnych stron.

Mechanizm mapy bitowej stron pamięci
Rys. Mechanizm mapy bitowej stron pamięci

Jeżeli w systemie wystąpią duże bloki zajętej pamięci, w celu przyśpieszenia mechanizmu poszukiwania wolnych stron, często stosuje się dodatkowe mapy bitowe, których komórki są odzwierciedleniem kilkunastu (przeważnie 16 bądź 32) komórek tablicy niższego poziomu. Takie rozwiązanie pozwala na przyśpieszenie wyznaczenia obszaru wolnego pamięci do poziomu porównywalnego z uzyskiwanym w mechanizmie stosu wolnych stron.

W systemach operacyjnych mają zastosowanie oba powyższe rozwiązania. Najczęściej mechanizm mapy bitowej jest stosowany dla obszarów, gdzie wymagany jest dostęp do dużych bloków pamięci (wymaganych np. przez urządzenia zewnętrzne lub mechanizm DMA), czyli w komputerach kompatybilnych z IBM-PC/AT najczęściej obszar poniżej 16MB. Mechanizm stosu wolnych stron stosowany jest dla obszarów pamięci często podlegającym operacjom zwalniania i rezerwacji.

Menadżer pamięci implementowanego system operacyjnego jest wyposażony w mechanizm pojedynczej mapy bitowej dla całego obszaru adresowalnego. Mechanizm ten stanowi pięć procedur: lock_mem_page/lock_mem_pages do rezerwacji strony/bloku stron pamięci, free_mem_page/free_mem_pages do zwalniania zarezerwowanej strony/bloku stron, oraz procedura find_free_pages służąca do szukania adresu wolnego bloku pamięci o określonej wielkości.