Czy ktoś może mi wyjaśnić, jaka jest różnica między pamięcią wirtualną a przestrzenią wymiany ?
I dlaczego mówimy, że dla maszyny 32-bitowej maksymalna dostępna pamięć wirtualna to tylko 4 GB?
operating-system
terminology
algo-geeks
źródło
źródło
Odpowiedzi:
Superużytkownik świetnie poznaje pamięć wirtualną .
Mówiąc najprościej, pamięć wirtualna to połączenie pamięci RAM i miejsca na dysku, z którego mogą korzystać uruchomione procesy.
Przestrzeń wymiany to część pamięci wirtualnej znajdująca się na dysku twardym, używana, gdy pamięć RAM jest pełna.
Jeśli chodzi o powody, dla których 32-bitowy procesor jest ograniczony do pamięci wirtualnej 4 GB, jest to dobrze omówione tutaj :
źródło
Istnieje pewne zamieszanie w odniesieniu do terminu „pamięć wirtualna” i faktycznie odnosi się do dwóch bardzo różnych koncepcji
Przestrzeń wymiany, OTOH, to nazwa części dysku używanej do przechowywania dodatkowych stron pamięci RAM, gdy nie jest używana.
Ważną rzeczą do zrobienia jest to, że to pierwsze jest możliwe w sposób przejrzysty dzięki obsłudze sprzętu i systemu operacyjnego drugiego.
Aby to wszystko lepiej zrozumieć, należy rozważyć, w jaki sposób „pamięć wirtualna” (jak w definicji 2) jest obsługiwana przez procesor i system operacyjny.
Załóżmy, że masz wskaźnik 32-bitowy (punkty 64-bitowe są podobne, ale używają nieco innych mechanizmów). Po włączeniu „pamięci wirtualnej” procesor traktuje ten wskaźnik jako trzy części.
Teraz, gdy procesor próbuje uzyskać dostęp do zawartości wskaźnika, najpierw sprawdza tabelę Page Directory - tabelę składającą się z 1024 wpisów (w architekturze X86 na lokalizację wskazuje rejestr CR3). 10-bitowy wpis katalogu stron jest indeksem w tej tabeli, który wskazuje na fizyczne położenie tabeli stron . To z kolei jest kolejną tablicą zawierającą 1024 wpisy, z których każdy jest wskaźnikiem w pamięci fizycznej i kilkoma ważnymi bitami sterującymi. (Wrócimy do tego później). Po znalezieniu strony ostatnie 12 bitów jest używanych do znalezienia adresu na tej stronie.
Jest o wiele więcej szczegółów (TLB, Large Pages, PAE, Selectors, Page Protection), ale krótkie wyjaśnienie powyżej oddaje istotę rzeczy.
Korzystając z tego mechanizmu tłumaczenia, system operacyjny może używać innego zestawu stron fizycznych dla każdego procesu, dając w ten sposób każdemu procesowi iluzję posiadania całej pamięci dla siebie (ponieważ każdy proces otrzymuje własny katalog stron)
Oprócz pamięci wirtualnej system operacyjny może również dodać koncepcję stronicowania . Jeden z omówionych wcześniej bitów kontrolnych pozwala określić, czy wpis jest „obecny”. Jeśli go nie ma, próba uzyskania dostępu do tego wpisu spowodowałaby wyjątek Błąd strony . System operacyjny może wychwycić ten wyjątek i odpowiednio działać. Systemy operacyjne obsługujące wymianę / stronicowanie mogą więc zdecydować o załadowaniu strony z obszaru wymiany , naprawieniu tabel tłumaczeń, a następnie ponownym uruchomieniu dostępu do pamięci.
W tym miejscu oba terminy łączą się, system operacyjny obsługujący pamięć wirtualną i stronicowanie może dać procesom iluzję posiadania większej ilości pamięci niż jest to faktycznie obecne, poprzez stronicowanie (zamianę) stron w obszarze wymiany i poza nim.
Co do ostatniego pytania (dlaczego mówi się, że 32-bitowy procesor jest ograniczony do 4 GB pamięci wirtualnej). Odnosi się to do „pamięci wirtualnej” z definicji 2 i jest bezpośrednim skutkiem rozmiaru wskaźnika. Jeśli procesor może używać tylko wskaźników 32-bitowych, masz tylko 32 bity do wyrażenia różnych adresów, co daje 2 ^ 32 = 4 GB pamięci adresowalnej.
Mam nadzieję, że to sprawia, że wszystko jest trochę jaśniejsze.
źródło
IMHO strasznie mylące jest używanie koncepcji przestrzeni wymiany jako odpowiednika pamięci wirtualnej. VM to koncepcja znacznie bardziej ogólna niż przestrzeń wymiany. VM umożliwia między innymi odwoływanie się procesów do adresów wirtualnych podczas wykonywania, które są tłumaczone na adresy fizyczne przy wsparciu sprzętu i tablic stron. Tak więc procesy nie dotyczą tego, ile pamięci fizycznej ma system ani gdzie instrukcja lub dane faktycznie znajdują się w fizycznej hierarchii pamięci. Maszyna wirtualna zezwala na to mapowanie. Przywoływana pozycja (instrukcja lub dane) może znajdować się w L1 lub L2 lub w pamięci RAM lub ostatecznie na dysku, w którym to przypadku jest ładowana do pamięci głównej.
Przestrzeń wymiany to po prostu miejsce w pamięci dodatkowej, w którym przechowywane są strony, gdy są nieaktywne. Jeśli nie ma wystarczającej ilości pamięci RAM, system operacyjny może zdecydować o zamianie stron procesu, aby zrobić miejsce na inne strony procesu. Procesor nigdy, przenigdy nie wykonuje instrukcji ani nie odczytuje / zapisuje danych bezpośrednio z przestrzeni wymiany.
Zauważ, że byłoby możliwe posiadanie przestrzeni wymiany w systemie bez maszyny wirtualnej. Oznacza to, że procesy, które mają bezpośredni dostęp do adresów fizycznych, nadal mogą mieć ich fragmenty na dysku.
źródło
Chociaż wątek jest dość stary i został już odebrany. Nadal chciałbym udostępnić ten link, ponieważ jest to najprostsze wyjaśnienie, jakie do tej pory znalazłem. Poniższy link zawiera diagramy dla lepszej wizualizacji.
różnica-między-pamięcią-wirtualną-a-pamięcią-wymiany
źródło
„Pamięć wirtualna” to termin ogólny. W systemie Windows nazywa się to stronicowaniem lub paginacją. W Linuksie nazywa się to Swap.
źródło