<<<<<<<<<<           >>>>>>>>>>

Wstęp

 
 
 
 
 
 
 
 
 

Przez ramkę rozumiem obszar pamięci fizycznej, wielkości strony. Przez stronę rozumiem obszar pamięci wirtualnej procesu.
Oba pojęcia są powszechnie używane w tym znaczeniu.

Przez blok będę rozumiał spójny fragment pamięci fizycznej. Pojęcie to zostało wprowadzone jedynie na potrzeby tej prezentacji.

Wydawałoby się, że w przypadku linuksa fragmentacja pamięci fizycznej nie jest problemem. Mając do dyspozycji mechanizm stronnicowania można z dowolnie rozmieszczonych ramek utworzyć spójny obszar pamięci dla procesu. Niestety są sytuacje, w których trzeba zaalokować blok większy niż jedna ramka. Transmisja DMA pomija mechanizm stronnicowanie (co nie jest dziwne - stronnicowanie jest zaimplementowane w procesorze, a istotą DMA jest pomijanie procesora przy dostępie do pamięci). Aby przesyłać na raz duże ilości danych przez DMA (np. w czasie odczytu z dysku) trzeba zarezerwować odpowiednio duży blok. Również jądro może potrzebować większych bloków. Oczywiście jądro korzysta ze stronnicowania, jednak ustawianie ramek w spójne obszary pamięci wirtualnej wymaga zmiany tablicy stron jądra, co może zająć trochę czasu.