Jest tu dużo zaangażowanych, ale postaram się to wyjaśnić tak prosto, jak to tylko możliwe i w sposób, który można zastosować do prawie każdego systemu operacyjnego.
Istnieją tutaj 2 podstawowe zasady:
Suma wszystkich rzeczy, które muszą znajdować się w pamięci RAM, a te rzeczy, które mogłyby skorzystać z pamięci RAM, są prawie zawsze większe niż rozmiar pamięci RAM. Do rzeczy, które skorzystałyby z bycia w pamięci RAM, należą zestawy robocze procesów i lista rezerwowa. Ten ostatni zawiera dane i kod, które były kiedyś w użyciu, ale od tego czasu przestały działać. Wiele z tego zostanie ponownie wykorzystanych, niektóre z nich wkrótce, więc warto zachować to w pamięci RAM. Ta pamięć działa jak rodzaj pamięci podręcznej, ale nie jest tak naprawdę niezbędna, dlatego należy do kategorii dostępnej pamięci. Podobnie jak wolna pamięć, można ją szybko przekazać każdemu programowi, który jej potrzebuje. Ze względu na wydajność pamięć rezerwowa powinna być duża.
Częstotliwość użycia bloków pamięci jest daleka od losowej, ale można ją przewidzieć ze znaczną dokładnością. Pamięć jest podzielona na bloki, często 4 bajty. Dostęp do niektórych bloków uzyskuje się wiele razy na sekundę, podczas gdy do innych nie można uzyskać dostępu przez wiele minut, godzin, dni, a nawet tygodni, jeśli system działa wystarczająco długo. Istnieje szeroki zakres zastosowania między tymi 2 skrajnościami. Menedżer pamięci wie, które bloki zostały ostatnio otwarte, a które nie. Jest rozsądnym założeniem, że blok pamięci, do którego ostatnio uzyskano dostęp, będzie wkrótce potrzebny. Pamięć, do której ostatnio nie uzyskano dostępu, prawdopodobnie wkrótce nie będzie potrzebna. Długie doświadczenie dowiodło, że jest to ważna zasada.
Menedżer pamięci wykorzystuje drugą zasadę, aby w dużej mierze złagodzić niepożądane konsekwencje pierwszej. Aby to zrobić, wykonuje operację równoważenia polegającą na przechowywaniu ostatnio używanych danych w pamięci RAM, podczas gdy rzadko używane dane są przechowywane w oryginalnych plikach lub pliku stronicowania.
Gdy pamięć RAM jest obfita, równoważenie jest łatwe. Wiele ostatnio nieużywanych danych można przechowywać w pamięci RAM. To dobra sytuacja.
Sprawy komplikują się, gdy zwiększa się obciążenie pracą. Suma użytych danych i kodu jest większa, ale rozmiar pamięci RAM pozostaje taki sam. Oznacza to, że mniejszy ich podzbiór może być przechowywany w pamięci RAM. Niektóre rzadziej używane dane nie mogą już znajdować się w pamięci RAM, ale muszą zostać pozostawione na dysku. Menedżer pamięci bardzo stara się zachować równowagę między pamięcią w aktywnym użyciu a dostępną pamięcią. Jednak wraz ze wzrostem obciążenia menedżer pamięci będzie zmuszony udostępnić więcej dostępnej pamięci działającym procesom. To nie jest dobra sytuacja, ale menedżer pamięci nie ma wyboru.
Problem polega na tym, że przenoszenie danych do iz pamięci RAM podczas działania programów zajmuje dużo czasu. Gdy pamięć RAM jest obfita, nie zdarza się to często i nawet nie zostanie zauważona. Ale kiedy użycie pamięci RAM osiągnie wysoki poziom, stanie się to znacznie częściej. Sytuacja może być tak zła, że więcej czasu poświęca się na przenoszenie danych do iz pamięci RAM, niż na faktyczne ich użycie. Jest to druzgocące, czego menedżer pamięci bardzo stara się uniknąć, ale przy dużym obciążeniu często nie można tego uniknąć.
Menedżer pamięci jest po twojej stronie, zawsze starając się zachować optymalną wydajność nawet w niesprzyjających warunkach. Ale gdy obciążenie jest duże, a dostępna pamięć kończy się na niskim poziomie, musi robić złe rzeczy, aby nadal działać. To jest właściwie najważniejsza rzecz. Priorytetem jest najpierw utrzymanie działania, a następnie jak najszybsze wykonanie.