Czy pamięć wirtualna jest prawdziwa, czy jest to tylko metoda zarządzania pamięcią

0

Nie jestem pewien, czy pamięć wirtualna jest tak naprawdę składnikiem fizycznym, czy też ludzie określają ją jako metodę optymalizacji procesów pamięci.


źródło
2
Istnieje wiele różnych rzeczy, często nazywanych „pamięcią wirtualną”. Proszę być bardziej precyzyjnym.
Eugene Sh.
1
Pamięć wirtualna jest koncepcją, ale do jej wdrożenia potrzebujesz bardzo realnej części obwodów procesora zwanej MMU . Jest to ogromna rzecz, wymagająca nieruchomości w krzemie, ponieważ ma skrytki i jest dostępna za pośrednictwem kilkunastu dedykowanych instrukcji.
anrieff

Odpowiedzi:

4

Pamięć wirtualna to koncepcja.

Jak mówi Anrieff, systemy obsługujące pamięć wirtualną będą miały MMU, które faktycznie obsługuje mapowanie. Procesor użyje adresów wirtualnych, którymi może być dowolny adres w 32 lub 64-bitowej przestrzeni adresowej, którą obsługuje. Adresy wirtualne nie są ograniczone ilością pamięci fizycznej.

Jak wspomniałem w moim komentarzu, pamięć wirtualna nie musi być mapowana na nic. W grę wchodzą dwa zestawy tabel:

  • z MMU tablice stron , które mogą odwzorowywać do rzeczywistej pamięci fizycznej lub nie w zależności od „obecnego” bit. Możesz mieć strony, które nie są „obecne”; MMU nie wie ani nie dba o to, co może zawierać, ale nie jest odwzorowany na rzeczywistą fizyczną pamięć DRAM. Jeśli spróbujesz uzyskać dostęp do jednego z nich, system generuje błąd strony w systemie operacyjnym.

  • system operacyjny śledzi przydział pamięci dla procesów i siebie oraz bierze odpowiedzialność za obsługę błędów stron. Może zdecydować, co zrobić z nieobecnymi stronami, gdy proces, który uzyskał dostęp do pamięci, jest wstrzymany. Możliwe opcje to:

Zamień: strona jest zamieniona. Przydziel trochę prawdziwej pamięci DRAM i wczytaj z niej dysk, a następnie wróć do procesu.

IO odwzorowane w pamięci: podobne, ale odczyt z określonego pliku.

Przestrzeń PCI / AGP: żądanie przesyła się przez magistralę do np. GPU zamiast do pamięci głównej.

Zeros: albo system operacyjny utrzymuje gotową wstępnie zerowaną pamięć DRAM, albo przestaje zapisywać zera na stronie przed przekazaniem jej tobie.

Nieprawidłowy: wreszcie całkowicie możliwe jest, że system operacyjny w ogóle nie wróci i po prostu zabije proces, który poprosił o tę stronę. Typowym przykładem jest „overcommit” pamięci systemu Linux: procesy mogą żądać i przydzielać więcej pamięci niż dostępna pamięć DRAM + przestrzeń wymiany. Jest w porządku, o ile go nie używają. Jeśli oni nie używają go, a system zabraknie pamięci rzeczywistej, rozpocznie proces zabijania w celu odzyskania systemu. Inne sytuacje kryzysowe mogą obejmować zmapowane we / wy pamięci do pliku w sieci, który zniknął, lub zamianę dysku, który uległ awarii.

Możesz celowo przydzielić nieużywaną stronę (opcja mmap PROT_NONE w systemie Linux). Jest to czasami przydatne do znajdowania określonych rodzajów błędów.

pjc50
źródło
Nie jestem w 100% pewien, ale jeśli IIRC, Linux overcommitit i OOM Killer to dwie różne rzeczy: być może Proces A zażądał strony, która przekroczyła limit pamięci fizycznej + swap; wtedy włącza się zabójca OOM, ale może zdecydować o zabiciu innego procesu, Procesu B, a na końcu A jest wyświetlana poprawna strona („oto strona, o którą prosiłeś; przepraszam, że musiałeś poczekać, byliśmy po prostu zajęci zabijanie innych klientów, abyśmy mogli Ci służyć ”).
anrieff 12.12.18