Co to jest pamięć wirtualna?

27

Dwukrotnie sprawdzałem swoje notatki pod kątem „pamięci wirtualnej”, a definicja w moim podręczniku to:

Proces przydzielania sekcji pamięci dodatkowej do działania jako część pamięci głównej

Gdzie, jak mówi Wikipedia :

Pamięć wirtualna jest techniką systemu komputerowego, która sprawia, że ​​aplikacja ma wrażenie ciągłej pamięci roboczej (przestrzeni adresowej)

i (Wikipedia też mówi)

Pamiętaj, że „pamięć wirtualna” to coś więcej niż „wykorzystanie miejsca na dysku w celu zwiększenia rozmiaru pamięci fizycznej”

Czy ktoś może udzielić wyjaśnień, które z nich są prawidłowe?

Yacoby
źródło
Uważam, że notatka z Wikipedii zawiera pewne zastrzeżenia dotyczące tego, co jest używane w kontekście ciągłości.
JB King,
To pytanie prawdopodobnie uzyska lepszą odpowiedź na temat SO.
Kapitan Segfault,
2
Nie należy mylić pamięci wirtualnej z jej wykorzystaniem. Pierwsze zdanie Wikipedii określa, co to jest. Twoja książka mówi o tym, jak jest zwykle używana. Kiedy ludzie mówią o „stronach”, mówią o konkretnej implementacji pamięci wirtualnej.
Tony Lee,
2
Twój podręcznik jest po prostu zły. Istnieje wiele maszyn z pamięcią wirtualną i bez dodatkowej pamięci. Podobnie kiedyś istniało wiele komputerów, które mogły wykorzystywać pamięć dodatkową jako część pamięci głównej, ale nie obsługiwały pamięci wirtualnej. „Pamięć wirtualna” to coś, co nie jest pamięcią, ale jest dostępne podobnie jak pamięć. Twój podręcznik definiuje zamianę lub stronicowanie.
David Schwartz
1
Podręcznik definiuje to całkowicie niepoprawnie, pamięć dodatkowa nie jest częścią definicji. Nawet oświadczenie Wikipedii o „więcej niż miejscu na dysku” jest mylące, ponieważ może w ogóle nie obejmować dysku - to stwierdzenie brzmi jak „rozszerzenie pamięci na dysk” i coś jeszcze.
Kelvin

Odpowiedzi:

41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Pamięć wirtualna to warstwa abstrakcji dostarczana do każdego procesu. Komputer ma, powiedzmy, 2 GB fizycznej pamięci RAM, adresowanej od 0 do 2G. Proces może zobaczyć przestrzeń adresową 4 GB, którą ma całkowicie dla siebie. Mapowanie adresów wirtualnych na adresy fizyczne jest obsługiwane przez jednostkę zarządzania pamięcią, którą zarządza system operacyjny. Zazwyczaj odbywa się to na „stronach” 4KB.

Daje to kilka funkcji:

  1. Proces nie widzi pamięci w innych procesach (chyba że system operacyjny tego chce!)
  2. Pamięć pod danym adresem wirtualnym może nie znajdować się pod tym samym adresem fizycznym
  3. Pamięć pod adresem wirtualnym może zostać „stronicowana” na dysk, a następnie „stronicowana”, gdy jest ponownie dostępna.

Twój podręcznik definiuje pamięć wirtualną (niepoprawnie) jako po prostu # 3.

Nawet bez zamiany, musisz szczególnie pamiętać o pamięci wirtualnej, jeśli piszesz sterownik urządzenia, które obsługuje DMA (bezpośredni dostęp do pamięci). Twój kod sterownika działa na CPU, co oznacza, że ​​jego dostęp do pamięci odbywa się przez MMU (wirtualny). Urządzenie prawdopodobnie nie przechodzi przez MMU, więc widzi surowe adresy fizyczne. Więc jako pisarz sterowników musisz zapewnić:

  1. Wszelkie nieprzetworzone adresy pamięci przekazywane do sprzętu są fizyczne, a nie wirtualne.
  2. Wszelkie duże (wielostronicowe) bloki pamięci, które wysyłasz, są fizycznie ciągłe. Tablica 8K może być praktycznie ciągła (poprzez MMU), ale dwie fizycznie oddzielne strony. Jeśli powiesz urządzeniu, aby zapisało 8 KB danych na adres fizyczny odpowiadający początkowi tej tablicy, zapisze pierwszą 4K tam, gdzie się spodziewasz, ale druga 4K uszkodzi gdzieś pamięć. :-(
Kapitanie Segfault
źródło
4

Spróbuję zacząć powoli, a potem połączę to wszystko dla ciebie. To jest tak:

Pamięć wirtualna, jak się powszechnie stosuje, odnosi się do „stronicowania”. Jak sama nazwa wskazuje, stronicowanie przypomina ludzki notatnik.

Kiedy opracowujesz proste sumy lub uczysz się prostych informacji, robisz to wszystko w swojej głowie: wystarczy załadować wszystkie informacje, przetworzyć je i uzyskać odpowiedź. To jest jak komputer ładujący pliki z dysku twardego - ładuje programy lub zdjęcia lub inne informacje, których potrzebuje do pracy w „prawdziwej pamięci” (lub „pamięci fizycznej”) i działa na nich „mózgiem” ( jego procesor).

Jednak gdy uczysz się złożonych informacji lub pracujesz ze złożonymi sumami, możesz nie być w stanie zmieścić wszystkiego w twojej głowie na raz. Czujesz się zdezorientowany, zaczynasz zwalniać, nie utrzymujesz tego wszystkiego naraz i musisz zapomnieć o czymś innym.

Ludzkim rozwiązaniem jest użycie notatnika. Zapisujemy na stronach wszystkie rzeczy, których nie możemy zapamiętać od razu, ale odnosimy się do nich podczas dokonywania sum. Być może nie będziemy w stanie zapamiętać ogromnej listy wyników sprzedaży za ten miesiąc, ale możemy przeglądać strony, uzyskiwać informacje po kolei i przetwarzać każdy z nich. To tak, jakby komputer „stronicował” swoją pamięć - zapisując strony pełne informacji i umieszczając je w „pamięci wirtualnej” do późniejszego wykorzystania, i uświadamiając sobie, że potrzebuje strony, i ładując tę ​​stronę z pamięci wirtualnej do prawdziwej pamięci. W Linuksie i Uniksie miejsce, w którym te strony są przechowywane, nazywane jest dosłownie „plikiem stronicowania”, a strony danych w pamięci są dosłownie nazywane „stronami”. Różne systemy mają różne nazwy dla tych rzeczy, ale ogólna koncepcja jest prawie taka sama.

Tak naprawdę, stronicowanie jest bardzo proste. Wszystkie strony informacji nie mieszczą się w pamięci, więc niektóre strony są umieszczane na dysku i ładowane ponownie później.

Teraz bardziej skomplikowane jest to, że nowoczesne systemy mają funkcję mapowania pamięci i ochrony pamięci, którą zwykle obsługuje ten sam system sprzętowy w komputerze: jednostka zarządzania pamięcią lub MMU.

Na (nowoczesnym) komputerze wielozadaniowym, który może uruchamiać wiele programów jednocześnie i ma funkcję ochrony pamięci, każdy program jest zwykle oddzielony od innych programów działających w tym samym systemie. W ten sposób jeden program nie może zmienić innego programu, po prostu uzyskując dostęp do jego pamięci - MMU fizycznie oddziela przestrzeń adresową jednego programu od przestrzeni adresowej innych programów. Innymi słowy, programy użytkownika nie widzą programów innych użytkowników ani nawet innych programów. Nie widzą „prawdziwej pamięci” - widzą swoją własną „pamięć wirtualną”.

Ta koncepcja izolacji pamięci i koncepcja pliku stronicowania to dwie koncepcyjnie różne rzeczy i prawdopodobnie dlatego jesteś zdezorientowany. Kluczem jest jednak to, że oba działają przy użyciu MMU - jednostki zarządzania pamięcią, która dzieli pamięć na strony i mapuje strony na wirtualną przestrzeń adresową.

Kiedy więc program prosi o pamięć pod określonym „adresem pamięci”, tak naprawdę dzieje się to, że strony pamięci tego programu i odpowiadające im adresy („przestrzeń adresowa” programu) są wyszukiwane, a strona odpowiadająca ten blok pamięci został znaleziony. Tę stronę można albo załadować gdzieś w prawdziwej pamięci, w którym to przypadku program ma dostęp, albo może zostać przeniesiona na dysk. Jeśli jest stronicowany, wywołuje „błąd strony” - dostęp do dysku i strona zostaje załadowana do pamięci. Tak więc program działa nawet wtedy, gdy nie ma wystarczającej ilości pamięci, ale działa WOLNO, jeśli musi używać dysku do uzyskania normalnie bardzo szybkiego dostępu do pamięci.

Teraz, jeśli nie ma wystarczającej ilości miejsca, aby załadować tę stronę do pamięci, oznacza to problem. W takim przypadku niektóre INNE strony, które są już w pamięci, muszą zostać „zamienione” na dysk, aby można było załadować stronę pierwszego programu. Lub mogą być równie stronami z tego samego programu. Czasem jest to widoczne w programach graficznych, na przykład w mocno obciążonych systemach, gdy część obrazu jest ładowana powoli i szybko rysowana, następnie następna część jest ładowana równie powoli i szybko rysowana, a gdy wracasz do pracy z pierwszym po części, to jest powolne PONOWNIE. Dzieje się tak, ponieważ są ładowane, aby nad nimi pracować, a następnie wymieniane, aby można było pracować nad czymś innym. Oczywiście jest to bardzo powolny sposób pracy, a tak naprawdę potrzebujesz więcej PRAWDZIWEJ pamięci.

Lee B.
źródło
W 100% nie zgadzam się z tą odpowiedzią. Jeśli „pamięć wirtualna” odnosi się do stronicowania, wówczas system, który nie stronicuje (powiedzmy, taki bez włączonej wymiany lub plików stron) nie może obsługiwać pamięci wirtualnej. Ale to oczywiście szalone.
David Schwartz
@DavidSchwartz - Początkowo miałem reakcję podobną do twojej, ale czytając bardziej szczegółowo odpowiedź, nie sądzę, że jest tak źle. Zastanówmy się nad Wikipedią / pamięcią wirtualną / Paged mówi: „Prawie wszystkie implementacje pamięci wirtualnej dzielą wirtualną przestrzeń adresową na strony, bloki sąsiadujących ze sobą adresów pamięci wirtualnej”. Oznacza to, że „stronicowanie” w szerokim znaczeniu nie wymaga pliku strony , ale odnosi się do mapowania adresów wirtualnych na adresy fizyczne.
ToolmakerSteve
1
Hmm, z drugiej strony, Lee mówi: „Wszystkie strony informacji nie mieszczą się w pamięci, więc niektóre strony są zapisywane na dysku i ładowane ponownie później”, więc David ma rację: w tej odpowiedzi brakuje istotnego faktu, że stronicowanie to nie tylko stronicowanie na dysk . Plusem jest to, że Lee wspomina o innych zaletach pamięci wirtualnej (izolacja pamięci). Gdyby tę odpowiedź przeredagować, aby nie zamazać „mapowania stron pamięci wirtualnej” za pomocą „stronicowania na dysk”, byłoby to bardziej przydatne.
ToolmakerSteve
@ToolmakerSteve Problem polega na tym, że jest to bardzo powszechne nieporozumienie i wszystko, co wzmacnia to nieporozumienie, jest, IMO, złą rzeczą. Szczególnie źle jest tutaj, gdy ta odpowiedź próbuje wyjaśnić bardzo podstawowe pojęcia w bardzo prostej sprawie - tam najważniejsze jest, aby nie kłaść podstaw opartych na powszechnym nieporozumieniu!
David Schwartz
@DavidSchwartz - Zgadzam się. Masz rację, on nie definiuje „pamięci wirtualnej”, definiuje „jak działa plik stronicowania”. Na początku myślałem, że problem polegał jedynie na tym, że Lee nie rozróżniał „stronicowania = mapowania stron pamięci z wirtualnego na fizyczny” kontra ”plik stronicowania = mapowanie stron na dysk”, ale po ponownym przeczytaniu naprawdę mówił tylko o mapowaniu na dysk. (Jak widzimy, z cytatu z podręcznika, ze wszystkich innych odpowiedzi oprócz Kapitana i z wyszukiwania w Google, to mieszanie się tych dwóch pojęć jest bardzo rozpowszechnione. Jestem pewien, że byłem winny.)
ToolmakerSteve
0

Wiem, że jest już za późno ... ale nadal uważam, że jest to przydatne.

  • Wszystkie są poprawne w oparciu o różne punkty widzenia.
  • Pamięć wirtualna to technika zarządzania pamięcią, podczas gdy pamięć wymiany była obszarem na dysku. Pamięć wymiany jest ogólnie nazywana przestrzenią wymiany. Miejsce 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
  • Można zapoznać się z poniższym linku więcej szczegółów
sivaramaraju
źródło
-2

Cóż, jeśli rozumiemy słowo wirtualne, myślę, że możemy zrozumieć, jak odnosi się ono do pamięci.

„Wirtualny” zgodnie z definicją w Dictionary.com: „tymczasowo symulowany lub rozszerzany przez oprogramowanie komputerowe: dysk wirtualny w pamięci RAM; pamięć wirtualna na dysku twardym”.

W przypadku pamięci wirtualnej system symuluje pamięć systemową, wykorzystując wolniejsze zasoby pamięci (np. Dysk twardy, pamięć USB itp.). Gdy wymagana jest dodatkowa pamięć, system zamieni dane w pamięci systemowej, które nie są potrzebne dysk lub zasób, który masz skonfigurowany. Zwalnia to pamięć systemową, dzięki czemu aplikacja może kontynuować wykonywane zadanie.

Zamiana jest procesem ciągłym, dlatego jeśli uaktualnisz swoją pamięć, powinieneś zauważyć poprawę wydajności, ponieważ system nie powinien wymagać zamiany na wolniejszą pamięć, jak to często bywa.

Racter
źródło
-2

Pamięć wirtualna to funkcja systemu operacyjnego (OS), która umożliwia komputerowi zrekompensowanie braków pamięci fizycznej przez tymczasowe przenoszenie stron danych z pamięci o dostępie swobodnym (RAM) do pamięci dyskowej.

Oznacza to, że jest jak kopia lustrzana lub przykładowa pamięć używana w maszynie wirtualnej lub wirtualnym urządzeniu do wypróbowania systemów operacyjnych bez formatowania komputera.

Eric Buenaventura
źródło
Nie, to stronicowanie.
David Schwartz
-4

Pamięć wirtualna to blok dysku twardego, który system wykorzystuje jako plik stronicowania oprócz fizycznej pamięci RAM.

To staje się trudne, a czasem powolne, ponieważ system Windows NIE defragmentuje tej części dysku twardego.

Najlepsze 2 wskazówki, jakie mogę zaoferować: 1) Virt Mem powinien być ustawiony zarówno na min, jak i maksimum na około 1,5x twojej fizycznej pamięci. dawny. 2 GB pamięci RAM = 3070 MB Virt. 2) Podczas defragmentacji wyłącz plik stronicowania. Defrag 2x i przywróć pierwotny numer. To daje czysty wycinek dysku i zwiększy prędkość pliku stronicowania.

Anarkie
źródło
1
To nie do końca prawda - nowoczesne menedżery pamięci wirtualizują CAŁĄ pamięć systemową. To pozwala na separację procesów - każdy proces może dotknąć tylko własnej pamięci. Menedżer pamięci jest odpowiedzialny za mapowanie tych wirtualnych stron na rzeczywistą pamięć, a opcjonalnie na stały dysk.
Anthony Giorgio
1
„System Windows NIE defragmentuje tej części dysku twardego”. po prostu nuke pagefile.sys, uruchom ponownie, defragmentuj dysk i włącz ponownie stronicowanie, voilá, świeży i konturowy plik stronicowania! jednak PageDefrag firmy Sysinternals wykonuje lepszą pracę, ponieważ umieszcza plik stronicowania na początku dysku / partycji, aby uzyskać lepszą wydajność.
1
Jeśli ta odpowiedź jest prawidłowa, system Windows bez skonfigurowanych plików stron nie może zapewnić żadnej obsługi pamięci wirtualnej. Ale to oczywiście źle. Taki system mógłby nadal przykładowo mapować pliki na przestrzeń adresową procesu przekraczającą fizyczną pamięć RAM, co jest przykładem pamięci wirtualnej.
David Schwartz