O ile rozumiem stronicowanie i zamianę, są to zupełnie inne pojęcia. Chociaż zamiana oznacza, że proces znajduje się całkowicie w pamięci fizycznej lub na dysku twardym, przy czym stronicowanie części procesu może znajdować się w pamięci fizycznej, a inne części mogą znajdować się na dysku twardym.
Ale dlaczego Linux wymaga partycji wymiany? Jeśli pamięć fizyczna jest pełna, niektóre procesy zostaną przeniesione na dysk twardy, a nowy proces zostanie zmapowany z pamięci wirtualnej do pamięci fizycznej.
Po prostu nie rozumiem, dlaczego trzeba partycji wymiany (lub wymiany ogólnie)?
Czy to tylko kwestia terminologii i swap partition == virtual memory
?
linux
memory
operating-systems
virtual-memory
paging
JohnnyFromBF
źródło
źródło
Odpowiedzi:
Tak, to tylko kwestia terminologii, w wielu przypadkach partycja wymiany jest używana jako pamięć wirtualna.
Powodem, dla którego UNIX i systemy podobne do UNIX wolą partycje wymiany od plików stronicowania, jest to, że mogą one być ciągłe, co powoduje krótszy czas wyszukiwania w porównaniu z plikiem stronicowania, który może być pofragmentowany.
źródło
Nie wiem, skąd masz pojęcie, że „zamiana oznacza, że proces jest albo całkowicie w pamięci fizycznej, albo na twardym dysku”. To znaczenie nie było używane od kilku dekad. Cytując Wikipedię :
Rzeczywiście, w każdym kontekście związanym z Linuksem (lub innymi systemami unixowymi), stronicowanie i zamiana są w zasadzie synonimami. Oba odnoszą się do wykorzystania pamięci wirtualnej, w której dane strony mogą być przechowywane w pamięci RAM lub na dysku. (Strona ma rozmiar 4 kB na dowolnym urządzeniu, które prawdopodobnie napotkasz). Program korzystający ze strony pamięci nie dba o to, a nawet nie wie, gdzie są przechowywane dane, po prostu używa wirtualnego adresu. Jądro przesyła dane między pamięcią RAM a dyskiem i aktualizuje tabele MMU, tak aby wpis adresu wirtualnego wskazywał na fizyczną stronę w pamięci lub zawierał specjalną wartość, która powoduje, że procesor wykonuje kod jądra który załaduje odpowiednie dane z dysku.
Stronicowanie odnosi się do tego ogólnego procesu. Zamiana odnosi się do przypadku, gdy dane na dysku znajdują się w dedykowanym obszarze: obszarze wymiany (partycja wymiany lub plik wymiany). Stronicowanie można również wykonać między pamięcią RAM a plikiem, w takim przypadku zwykle nie jest to określane jako zamiana . Na przykład podczas wykonywania programu kod musi zostać załadowany do pamięci, aby został wykonany; jeśli strona kodowa musi zostać eksmitowana z pamięci RAM, aby zrobić miejsce na coś innego, nie trzeba zapisywać tej strony w obszarze wymiany, ponieważ można ją ponownie załadować z pliku programu. (Można to zrobić dla wszystkich danych tylko do odczytu, nie tylko kodu programu.)
Jeśli pamięć fizyczna jest (prawie) pełna, jądro szuka strony w pamięci RAM (nie całego procesu), która nie była ostatnio używana. Jeśli ta strona odtwarza zawartość pliku dyskowego (w jądrze znajdują się tabele, które to wskazują), stronę można odzyskać. Jeśli nie, strona jest zapisywana w celu zamiany, a następnie odzyskiwana. Tak czy inaczej, jądro aktualizuje wpis w tablicy pamięci wirtualnej procesu (który staje się tabelą MMU podczas wykonywania procesu), aby oznaczyć go jako inny niż w pamięci RAM, a następnie może ponownie użyć strony fizycznej do czegoś innego (innego programu lub innej strony ten sam program).
źródło
Funkcja pamięci wirtualnej / stronicowania pozwala jądrze „wirtualizować” pamięć do procesów w przestrzeni użytkownika. Jądro może pobierać strony z pamięci fizycznej i układać je za pomocą stronicowania, aby wyglądały na przylegające do procesu przestrzeni użytkownika.
Limit można ustawić w pamięci procesu przestrzeni użytkownika, a jeśli proces wykracza poza to, pojawia się „błąd strony”, który powoduje wyjątek procesora, który wraca do jądra. Zapobiega to bałaganowaniu programu przestrzeni użytkownika pamięcią przydzieloną do jądra lub innych programów bez zgody jądra.
Zazwyczaj programy przestrzeni użytkownika proszą jądro o rozszerzenie tego limitu za pomocą dobrze zdefiniowanych interfejsów (wywoływanych przez funkcje C
malloc()
ifree()
na przykład.). Jądro jest odpowiedzialne za śledzenie ilości i ilości pamięci przydzielonej programowi.Ten mechanizm „błędu strony” może również pozwolić jądrze zamienić stronę, do której proces próbował uzyskać dostęp z dysku z jednego dysku, jeśli jądro jest w stanie przesadzić pamięć (i zarówno Windows, jak i Linux to obsługują), dlatego nazywa się to zamianą. Jeśli dostęp do pamięci był rzeczywiście nieprawidłowy (tzn. Proces próbuje uzyskać dostęp do pamięci, o którą nie poprosił wcześniej), zazwyczaj proces zostanie zabity za pomocą SIGSEGV.
Tak więc „zamiana” jest dodatkową funkcją (w Linuksie możesz ją całkowicie wyłączyć, jeśli chcesz), która zależy od pamięci wirtualnej / stronicowania, ale nie jest wymagana tylko dlatego, że procesor ma pamięć wirtualną / stronicowanie. Pojęcia nie są takie same, ale zamiana zależy od istnienia stronicowania / pamięci wirtualnej.
Ponadto, po dokładniejszym przeczytaniu pytania, „stronicowanie” jest czasem używane jako synomia „zamiany” - ale nigdy nie słyszałem o „zamianie”, co oznacza, że pamięć całego procesu jest zamieniana w porównaniu do „stronicowania”, co oznacza tylko część jest zamieniony.
„Pamięć wirtualna” to pamięć fizyczna, po prostu „odwzorowana”. Sprzęt MMU nie może bezpośrednio mapować na żadnym urządzeniu pamięci masowej. MMU może zgłosić błąd, który informuje jądro, że proces próbował uzyskać dostęp do pamięci, a nie powinien - i jądro może użyć tego mechanizmu, aby zobaczyć, że proces chce odzyskać coś z dysku, który myślał, że jest w pamięci, a następnie wykonać „ zamiana". Chodzi o to, że to system operacyjny decyduje o zapisaniu stron na dysku, aby mógł używać tych stron do innych procesów, a nie sprzętu.
źródło
Ogólnie partycja wymiany nie jest równa pamięci wirtualnej.
Procesy mogą wymagać więcej pamięci niż rzeczywista pamięć fizyczna, dlatego twórcy systemu operacyjnego postanowili założyć, że w systemie jest więcej pamięci, która nazywa się „pamięcią wirtualną”.
Ta pamięć wirtualna jest w zasadzie pamięcią fizyczną i częścią dysku. Ta część dysku nosi nazwę „swap” w systemie Linux.
Również programiści zaproponowali, aby wykorzystanie części pamięci wirtualnej znajdującej się na dysku twardym było jak najmniejsze. Ze względu na to cała pamięć wirtualna została podzielona na małe części zwane „stronami”. Wiele stron jest używanych w niskim tempie, strony te muszą być zapisane w części pamięci wirtualnej na dysku twardym. Ta operacja nazywa się „zamień”. System operacyjny musi śledzić, które strony nie znajdują się w pamięci fizycznej, aby je znaleźć w razie potrzeby. Błąd strony występuje, gdy program chce zapisać / odczytać część pamięci, która została zamieniona.
Aby odpowiedzieć na twoje pytanie: Linux potrzebuje partycji wymiany, aby zamienić niektóre strony pamięci i możesz zobaczyć statystyki wykorzystania pamięci wirtualnej za pomocą
vmstat
:Kolumna „swap” pokazuje zamianę i statystyki. Również ten link wyjaśnia pamięć wirtualną i jej użycie
vmstat
.źródło