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.
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.
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ć ”).
Odpowiedzi:
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.
źródło