Jaka jest różnica między „pamięcią wirtualną” a „przestrzenią wymiany”?

85

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?

algo-geeks
źródło
@startblue jak podany przez Ciebie link jest odpowiedzią na moje pytanie ..
algo-geeks
@ algo-geeks - Owszem, nie jest to odpowiedź, ale myślę, że prowadzi do odpowiedzi, która może być całkiem przydatna w tym temacie. I jest napisane w komentarzu, dokładnie tam, gdzie powinno być, imho. :)
Muhamed Huseinbašić

Odpowiedzi:

113

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 :

Z definicji, 32-bitowy procesor używa 32 bitów do określania lokalizacji każdego bajtu pamięci. 2 ^ 32 = 4,2 miliarda, co oznacza, że ​​adres pamięci o długości 32 bitów może odnosić się tylko do 4,2 miliarda unikalnych lokalizacji (tj. 4 GB).

Viral Shah
źródło
1
Czy rzeczywista pamięć RAM = wirtualna - zamiana?
user48956
4
Ta odpowiedź jest całkowicie błędna. Osoba może 100 razy zamapować plik 1 GB w pamięci i użyć 100 GB pamięci wirtualnej na komputerze z zaledwie 1 GB pamięci RAM. Nie ma możliwości dodania pamięci RAM i miejsca na dysku, aby uzyskać 100 GB pamięci wirtualnej, która byłaby w użyciu.
David Schwartz,
@DavidSchwartz nie bardzo. Mapowanie pamięci pliku nie ładuje go do pamięci. W związku z tym 100-krotne skopiowanie pliku o rozmiarze 1 GB nie spowoduje wykorzystania 100 GB.
Felix
1
@Felix Mylisz się. Kiedy mówisz, że „nie ładuje go do pamięci”, używasz słowa „pamięć” na oznaczenie pamięci fizycznej, czyli RAM. Mówimy o pamięci wirtualnej , a nie fizycznej. Pamięć wirtualna jest zwykle tworzona w razie potrzeby i w razie potrzeby, a nie pobierana ze stałej puli, jak pamięć fizyczna.
David Schwartz
Więc to tylko pytanie dotyczące raportowania? Czy kiedykolwiek ma sens nawet policzyć, ile pamięci jest zmapowane? Ponieważ nigdy nie będziesz tak dużo używać, czy to w pamięci RAM, czy w zamian.
Felix
60

Istnieje pewne zamieszanie w odniesieniu do terminu „pamięć wirtualna” i faktycznie odnosi się do dwóch bardzo różnych koncepcji

  1. Używanie stron dyskowych do rozszerzania koncepcyjnej ilości pamięci fizycznej komputera - poprawnym terminem jest w rzeczywistości stronicowanie
  2. Abstrakcja używana przez różne systemy operacyjne / procesory w celu stworzenia iluzji każdego procesu działającego w oddzielnej, ciągłej przestrzeni adresowej.

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.

  • Najwyższe 10 bitów to pozycja katalogu stron
  • Następujące 10 bitów to wpis w tablicy stron
  • Ostatnie 12 bitów tworzy przesunięcie strony

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.

Yonatan
źródło
12

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.

SavorALinux
źródło
5

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.

Kluczowa różnica: Pamięć wirtualna jest abstrakcją pamięci głównej. Rozszerza dostępną pamięć komputera poprzez przechowywanie nieaktywnych części zawartości pamięci RAM na dysku. Zawsze, gdy zawartość jest wymagana, pobiera ją z powrotem do pamięci RAM. Pamięć wymiany lub przestrzeń wymiany to część dysku twardego używana jako pamięć wirtualna. Dlatego oba są również używane zamiennie.

Cicha pamięć wirtualna różni się od pamięci fizycznej. Programiści uzyskują bezpośredni dostęp do pamięci wirtualnej zamiast fizycznej. Pamięć wirtualna to abstrakcja pamięci głównej. Służy do ukrywania informacji o rzeczywistej fizycznej pamięci systemu. Rozszerza dostępną pamięć komputera, przechowując nieaktywne części zawartości pamięci RAM na dysku. Gdy zawartość jest wymagana, pobiera ją z powrotem do pamięci RAM. Pamięć wirtualna tworzy iluzję całej przestrzeni adresowej z adresami zaczynającymi się od zera. Jest preferowany głównie ze względu na funkcję optymalizacji, dzięki której zmniejsza zapotrzebowanie na miejsce. Składa się z dostępnej pamięci RAM i miejsca na dysku.

Pamięć wymiany jest ogólnie nazywana przestrzenią wymiany. Przestrzeń wymiany odnosi się do części pamięci wirtualnej, która jest zarezerwowana jako tymczasowe miejsce przechowywania. Przestrzeń wymiany jest wykorzystywana, gdy dostępna pamięć RAM nie jest w stanie sprostać wymaganiom pamięci systemowej. Na przykład w systemie pamięci Linux jądro lokalizuje każdą stronę w pamięci fizycznej lub w przestrzeni wymiany. Jądro utrzymuje również tabelę, w której przechowywane są informacje dotyczące zamienionych stron i stron w pamięci fizycznej. Strony, do których nie było dostępu od dłuższego czasu, są wysyłane do obszaru wymiany. Proces ten nazywany jest wymianą. Jeśli wymagana jest ta sama strona, jest ona zamieniana w pamięci fizycznej przez wymianę innej strony. A zatem,

różnica-między-pamięcią-wirtualną-a-pamięcią-wymiany

ram619
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
płaszcza
Dzięki, poprawiłem post.
ram619
0

„Pamięć wirtualna” to termin ogólny. W systemie Windows nazywa się to stronicowaniem lub paginacją. W Linuksie nazywa się to Swap.

Hemanth Kumar R.
źródło