Muszę skomentować komentarze do pytania, w szczególności zamieszanie między „tabelą stron” i „plikiem strony”. To nie jest odpowiedź, ale nie zmieści się w miejscu przeznaczonym na komentarze.
„Tabela stron” jest rzeczywiście czymś zupełnie innym niż plik stronicowania. Posiadanie n MB pamięci RAM na tabele stron nie oznacza, że używasz n MB miejsca na plik stronicowania. I chociaż niektóre wpisy tabeli stron (PTE, z których składają się tabele stron) odnoszą się do zawartości pliku strony, nie wszystkie.
Tabele stron są strukturami w pamięci, które są używane przez MMU procesora do translacji adresów z adresów wirtualnych (znowu nie pliku stronicowania) na adresy fizyczne, a także przez system operacyjny do śledzenia wirtualnej przestrzeni adresowej i pomagania w usuwaniu błędów stron. Tabele stron składają się z pozycji tablicy stron (PTE). Każdy PTE zajmuje 8 bajtów i określa 4K bajtów wirtualnej przestrzeni adresowej - tj. Jedną wirtualną stronę. Z grubsza jest jeden PTE na każdą nie-wolną stronę wirtualnej przestrzeni adresowej.
Nawiasem mówiąc, chociaż plik stronicowania może doświadczać fragmentacji zarówno zewnętrznej, jak i wewnętrznej (ten pierwszy zwykle nie stanowi większego problemu; ten drugi można poprawić, czyniąc go około czterokrotnie większym, niż powinien), tabele stron nie mogą. Są już trochę rozdrobnione i nie ma to najmniejszego znaczenia.
Każdy PTE ma „ważny” bit. W przypadku stron „ważnych”, czyli „rezydentnych”, PTE zawiera fizyczny numer strony, który odpowiada numerowi wirtualnej strony powiązanej z PTE; jest to wykorzystywane bezpośrednio przez MMU.
W przypadku „nieprawidłowych” stron MMU podnosi błąd strony, a PTE ma wtedy wiele możliwych formatów i interpretacji.
Uwaga: Wszystkie powyższe dotyczą dowolnego systemu operacyjnego, który umożliwia stronicowanie na x86 / x64. Poniższe informacje są w dużej mierze specyficzne dla systemu Windows, ale wiele koncepcji dotyczy innych systemów operacyjnych, z różnicami w szczegółach implementacji.
W przypadku strony w pamięci podręcznej strony PTE nadal zawiera fizyczny numer strony. W przypadku stron, które zostały utracone z pamięci RAM i zapisane w pliku strony, PTE zawiera numer pliku strony i przesunięcie w pliku strony, w którym zapisano zawartość strony. Inne możliwe treści PTE to odwołania do wirtualnych deskryptorów adresów , odniesienia do „prototypowych PTE”, odniesienia do zerowych stron itp., Do których nie zamierzam wchodzić. Wystarczy powiedzieć, że tylko niektóre PTE odnoszą się do lokalizacji w plikach stron.
Wspominam o tym wszystkim, aby pokazać, że plik strony i tabele stron, mimo że są powiązane, zdecydowanie nie są tym samym.
Tabele stron są zorganizowane w strukturę drzewa. Dla każdego procesu istnieje inne takie drzewo lub zbiór tabel stron - dzięki temu każdy proces może zdefiniować własne wystąpienie wirtualnej przestrzeni adresowej. Tabela stron w katalogu głównym drzewa musi zawsze znajdować się w pamięci RAM. Pozostałe są stronowalne; nie istnieją nawet tam, gdzie odpowiadałyby dużym (minimum 2 MB) regionom niezdefiniowanej lub wolnej wirtualnej przestrzeni adresowej.
Pozycje tabeli stron w tabelach „liści” drzewa odpowiadają stronom wirtualnej przestrzeni adresowej. PTE w tabelach wyższego poziomu - tych bliższych do katalogu głównego (i samego katalogu głównego) - informują, gdzie znajdują się kolejne tabele niższego poziomu (jeśli w ogóle istnieją).
Liczba pokazywana przez RAMmap to pamięć fizyczna (RAM) zajmowana przez wszystkie tabele stron rezydentnych (in-RAM) dla wszystkich procesów plus system operacyjny.
Ważne jest tutaj to, że system w OQ miał 2,5 GB pamięci RAM związanej z tabelami stron. Oznacza to, że zdefiniowano co najmniej 2,5 GB tabel stron. Ponieważ tabele stron same w sobie można ustawiać na stronach, rozmiar wirtualny może być znacznie większy niż rozmiar fizyczny, co pokazuje nam cała pamięć RAM. Ale załóżmy, że to „tylko” 2,5 GB. Przy ośmiu bajtach na PTE, co stanowi około 320 milionów PTE. Ponieważ każda PTE definiuje jedną stronę - 4 bajty - wirtualnej przestrzeni adresowej, oznacza to, że ponad 1,2 terabajtów wirtualnej przestrzeni adresowej jest definiowanych przez tabele stron w pamięci .
To nie jest niemożliwe, ale raczej dużo.
Dla porównania, w mojej bankomacie systemowym mam około 125 MB pamięci RAM w tabelach stron. Oznaczałoby to tylko około 65 GB wirtualnej przestrzeni adresowej. Moje rzeczywiste użycie wirtualne jest znacznie wyższe (125 TB tylko dla procesów), ale dzieje się tak, ponieważ większość tabel stron nie ma pamięci RAM. „Duże strony”, kolejna rzecz, o której nie powinienem się tutaj zajmować, mogą również pomóc w uwzględnieniu różnych proporcji między wielkościami tabel stron a wielkością używanej wirtualnej przestrzeni adresowej.
Tak więc: aby znaleźć winowajcę, najpierw szukałem w Monitorze wydajności w kategorii Proces procesów o wysokiej wartości licznika „Wirtualne bajty”.