2011-11-13 12 views
5

Z mojego rozumienia, czytając kilka artykułów, założyłem, że przestrzeń adresu procesowego (PAS) i pamięć wirtualna (VM) są takie same. Czy moje zrozumienie jest błędne? Czy ktoś może rzucić trochę światła na to i en light mnie? Jestem zdezorientowany.Przestrzeń adresu procesu a pamięć wirtualna

Rozumiem przestrzeń adresową procesu nie ma nic wspólnego z pamięcią RAM lub fizyczną.

Ale po prostu mylić o PAS i VM.

Odpowiedz

7

Po pierwsze:"memory" is not equal to "address space". Przestrzeń adresowa to zakres adresów posible. To znaczy. to 4 Gb dla wskaźników 32-bitowych i 16 Eb dla wskaźników 64-bitowych. Z drugiej strony pamięć to ... no cóż, pamięć, której faktycznie możesz użyć (przynajmniej możliwe). Założę się więc, że pytasz, czy "pamięć procesowa" jest równa "pamięci wirtualnej" lub "przestrzeń adresowa procesu" jest równa "wirtualnej przestrzeni adresowej".

Po drugie: Pamięć wirtualna jest jedyną pamięcią, której można używać w trybie użytkownika. Nie masz dostępu do pamięci fizycznej. Pamięć fizyczna dotyczy trybu jądra i sterowników. Aplikacje trybu użytkownika działają tylko z pamięcią wirtualną. Tak więc cała pamięć jest wirtualna w trybie użytkownika. Nie trzeba dodawać "wirtualnego". Jest domyślnie.

Dlatego "Przestrzeń adresu procesu" = "[Wirtualna] przestrzeń adresowa procesu" - tj. Wirtualna przestrzeń adresowa pojedynczego procesu. To samo dotyczy "pamięci": "Process Memory" = "[Virtual] Process Memory".

Po trzecie: Termin "Pamięć wirtualna" odnosi się zwykle do "Systemowej pamięci wirtualnej" (rzeczy globalnej), która jest większa niż tylko jeden proces. Z drugiej strony: ponieważ adresowanie jest specyficzne dla procesu, nie ma czegoś takiego jak "Systemowa wirtualna przestrzeń adresowa" (globalna przestrzeń adresowa wszystkich procesów i jądra).

Więc odpowiedź brzmi:

  1. "Proces przestrzeń adresowa" = "wirtualna przestrzeń adresowa" = "przestrzeń adresowa"
  2. "Memory Process" <> "Pamięć wirtualna"

Przykłady

Na przykład typowy limit przestrzeni adresowej procesu to 4 Gb (dla aplikacji 32-bitowych). Typowy limit pamięci wirtualnej procesów to 2 Gb (można go rozszerzyć do 3 Gb dla maszyn 32-bitowych lub 4 Gb dla maszyn 64-bitowych).

Z drugiej strony, pamięć wirtualna jest większa niż tylko proces. Rozważmy przypadek, w którym przydzielamy pamięć za pomocą funkcji CreateFileMapping. Możesz utworzyć, powiedzmy, 64-bitowy blok pamięci wirtualnej. To prawda, mimo że 64 Gb> 2 Gb. Oczywiście nie można używać wszystkich 64 Gb w tym samym czasie (ponieważ przestrzeń adresowa procesu to tylko 4 GB), ale można to zrobić w porcjach, powiedzmy, na 512 Mb.

Rozważ także przypadek, kiedy mapujesz ten sam blok pamięci wirtualnej na kilka lokalizacji (wiele adresów).

Innymi słowy, nie istnieje odwzorowanie typu "jeden do jednego" między pamięcią wirtualną a adresem wirtualnym.

Powiązane problemy