Czy układ MMU (Memory Management Unit) jest niezbędny, aby procesor mógł obsługiwać pamięć wirtualną?

14

Czy układ MMU (Memory Management Unit) jest niezbędny, aby procesor mógł obsługiwać pamięć wirtualną?

Czy można emulować funkcjonalność MMU w oprogramowaniu? (Jestem świadomy, że prawdopodobnie będzie to miało duży wpływ na wydajność).

yoyo_fun
źródło
Każdy w pełni sprawny komputer może emulować dowolny inny komputer o wystarczającej wydajności. Lub emuluj dowolny sprzęt. Jedynym pytaniem jest skala wydajności.
Rzeczywistość
każdy procesor potrzebuje dzisiaj TLB, więc ma wbudowaną jednostkę MM.
rastafile

Odpowiedzi:

22

Każdy emulator systemu, który emuluje system zawierający MMU, skutecznie emuluje MMU w oprogramowaniu, więc odpowiedź na zadane pytanie brzmi „tak”. Jednakże , pamięć wirtualna wymaga jakiś sposób egzekwowania kontroli dostępu w pamięci, lub przynajmniej translacji adresów, więc musi albo pełną emulację oprogramowania CPU uruchomiony program jest kontrolowany, czy potrzebuje pomocy sprzętowej.

Możesz więc zbudować system bez MMU, podłączyć do niego QEMU , dodać brakujące elementy, aby pamięć wirtualna rzeczywiście się przydała ( np. Dodać obsługę wymiany w systemie hosta), i uruchomić system operacyjny wymagający MMU w QEMU, z całą ochroną, jakiej można oczekiwać w systemie operacyjnym gościa (z wyjątkiem błędów QEMU).

Jednym z prawdziwych i starych przykładów „emulacji” bez MMU wykorzystywanej do zapewnienia pamięci wirtualnej jest maszyna Z , która była zdolna do stronicowania i wymiany swojego kodu i danych w systemach 8-bitowych na przełomie lat siedemdziesiątych i osiemdziesiątych . Działa to poprzez emulację wirtualnego procesora na prawdziwym procesorze bazowym; w ten sposób interpreter zachowuje pełną kontrolę nad układem pamięci, który „widzi” uruchomiony program.

W praktyce powszechnie uważa się, że do obsługi pamięci wirtualnej wymagana jest jednostka MMU, przynajmniej na poziomie systemu operacyjnego. Jak wskazano jądro bez MMU? , możliwe jest zbudowanie jądra Linux, aby mogło działać na systemach bez MMU, ale wynikowa konfiguracja jest bardzo nietypowa i odpowiednia tylko w bardzo specyficznych przypadkach użycia (w szczególności bez wrogiego oprogramowania). Może nie obsługiwać wielu scenariuszy wymagających pamięci wirtualnej (zamiana, mmap...).

Stephen Kitt
źródło
więc aplikacje maszyn wirtualnych mają również komponent emulatora MMU?
yoyo_fun
Tak - niekoniecznie jako oddzielny komponent, ale mają one niezbędne wsparcie w emulacji.
Stephen Kitt
7
@JenniferAnderson: Niektóre nowoczesne procesory mają funkcje, które pozwalają emulatorowi (częściowo) odciążyć emulację MMU do samego MMU. Np. Program działający w emulatorze sam użyje wielu emulowanych stron pamięci, te strony pamięci są oczywiście „zagnieżdżone” na stronach pamięci używanych przez emulator. Zarówno nowsze zaawansowane procesory Intel, jak i AMD mają obsługę zagnieżdżonych tabel stron, które pozwalają emulatorowi wyrazić to zagnieżdżenie w samej jednostce MMU, zamiast konieczności (kosztownej) emulacji.
Jörg W Mittag
@ Jörg, naprawdę, dziękuję za wyjaśnienie. Większość hiperwizorów nadal zawiera pewien poziom emulacji oprogramowania, dzięki czemu będą działać bez dodatkowego wsparcia sprzętowego. Mrugnął mnie aspekt pytania „Czy to możliwe” ;-).
Stephen Kitt
3
@JenniferAnderson: Tak, ta funkcja została specjalnie wprowadzona do wirtualizacji. (Należy pamiętać, że nie jest to nic nowego, wspomagana sprzętowo para-wirtualizacja istnieje w świecie komputerów mainframe od wczesnych lat 60. XX wieku). Okazuje się jednak, że można go również wykorzystać do innych interesujących aplikacji, takich jak przyspieszenie Garbage Collection (patrz na przykład kolektor C4 w Zing JVM Azula). Należy jednak pamiętać, że wszystko to działa w obu kierunkach: w ten sam sposób, w jaki rozszerzenie MMU z obsługą wirtualizacji jest niczym więcej niż optymalizacją wydajności i wirtualizacją…
Jörg W Mittag
7

Zależy to dokładnie od tego, co nazywamy pamięcią wirtualną. Ciekawym modelem jest stary model Win16 (najlepiej znany ze starego Windows 3.x, a nie Windows NT). W tym modelu, trzeba było GlobalLocki GlobalUnlock, LocalLocki LocalUnlockfunkcje. Były one formą kooperacyjnego, ręcznego zarządzania pamięcią wirtualną. Ponieważ zostało to zrobione w oprogramowaniu (aplikacyjnym), nie wymagało MMU. Pamięć była wirtualna w tym sensie, że odblokowaną pamięć można było zamienić na dysk.

Jednak w modelu Win16 nie ma ochrony między różnymi procesami. Jeśli inny proces pozostawił dane w pamięci, możesz je zastąpić. To nie jest podstawowe ograniczenie. Dzięki szybkim dyskom SSD możesz całkowicie usunąć niedziałający proces z pamięci i zrobić to w rozsądnym czasie.

MSalters
źródło
7

Sprzętowe MMU nie jest konieczne, jeśli masz oprogramowanie, które może zamieniać procesy do iz pamięci fizycznej.

Był to tryb działania wczesnych wielozadaniowych systemów operacyjnych. W danym momencie w pamięci znajduje się tylko jeden proces, jest on zamieniany w całości po upływie przedziału czasu (widać, że staje się to problematyczne w przypadku dużych procesów). Zawartość pamięci widziana przez aktualnie działający proces nie jest taka sama jak widziane przez jakikolwiek inny proces i każdy ma swój własny widok przestrzeni adresowej.

Pomocna jest część wsparcia sprzętowego - pojęcie „chronionego” obszaru pamięci na własny użytek systemu operacyjnego (np. Wszystkie adresy z ustawionym zestawem MSB są dostępne tylko w trybie superwizora) oraz wartość „przerwy” wskazująca najwyższy używany adres, ale zarządzanie pamięcią sprzęt nie jest bezwzględnym wymogiem dla pamięci wirtualnej; to tylko wyjątkowo skuteczny sposób na osiągnięcie tego.

Toby Speight
źródło
2
To nie jest tak naprawdę pamięć wirtualna, to po prostu zamiana procesów ... (Naprawdę musielibyśmy zdefiniować „pamięć wirtualną”, aby uzyskać właściwą odpowiedź na to pytanie!)
Stephen Kitt
Każdy proces ma swój własny widok przestrzeni adresowej - dokonam edycji, aby wyjaśnić definicję, której używam.
Toby Speight
Tak, ale jest to to samo mapowanie jeden do jednego dla wszystkich procesów. (Z punktu widzenia procesów nie ma dużej różnicy, więc nie ma prawdziwych argumentów ...)
Stephen Kitt
0

Oryginalne maszyny komercyjne do wykonywania VM nie miały MMU - miały wbudowaną VM w procesor. Moje obecne myślenie jest takie, że MMU to tylko refleksja, aby umieścić VM na procesorach innych niż VM. VM został opracowany na Uniwersytecie w Manchesterze, a projektanci Burroughs byli przekonani, że powinni go uwzględnić - choć w tamtym czasie bardzo innowacyjni.

Burroughs B5000 (obecnie maszyny Unisys MCP) używał deskryptorów pamięci, które wymuszają granice pamięci - wychodzą poza granice, a twój program zostaje zrzucony (przestrzeganie granic jest podstawą ładnego społeczeństwa, ale niektórzy nadużywają przywileju, więc granice muszą być egzekwowane).

Deskryptory przechowują adres pamięci, długość bloku i typ danych, ale także najważniejszy bit P lub bit obecności. Bit p oznacza, że ​​blok jest w pamięci. P-bit zero oznacza, że ​​blok jest w pamięci masowej, a adresem jest adres pamięci, albo w oryginalnym programie (kod lub dane), albo w maszynie wirtualnej (dane rozwijane).

Te maszyny zaimplementowały hierarchiczny model pamięci. MMU wydają się uzupełniać braki w płaskiej pamięci, ponieważ muszą mapować obiekty użytkownika w płaską pamięć. JK Iliffe zaprojektował również maszyny ICL z tym modelem:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

Różnica między tymi maszynami a większością dzisiejszych polega na tym, że dotyczą one pełnej architektury systemu, a nie tylko architektury procesora.

Wygląda więc na to, że MMU nie tylko nie są konieczne, ale bez nich lepiej jest mieć systemy.

użytkownik3717661
źródło
-1

Większość procesorów do komputerów stacjonarnych, laptopów i serwerów zawiera jedną lub więcej TLB w sprzęcie do zarządzania pamięcią i prawie zawsze jest obecna w każdym procesorze wykorzystującym pamięć wirtualną stronicowaną lub segmentowaną .

Translation_lookaside_buffer

Następnie przeczytaj o pamięci wirtualnej i jej przeznaczeniu. Ogromna wirtualna przestrzeń adresowa nie jest główną ideą. Główną ideą jest buforowanie / buforowanie na wielu poziomach.

Nie jest to wcale proste, ale ta pamięć podręczna TLB jest ważnym sprzętem, na którym opiera się podsystem mm jądra (w przeciwnym razie VM byłby w dużej mierze narzutem).


VM =

pamięć wirtualna LUB maszyna wirtualna. Bardzo różne, bardzo powiązane.


Więc odpowiedź brzmi: nie znaczy, MMU Chip (oddzielna jednostka poza CPU na płycie głównej) nie jest konieczne.

Tak, niektóre sprzętowe MMU (w CPU) są konieczne, aby w ogóle pomyśleć o użytecznej maszynie wirtualnej. (Zaczęło się od tej segmentacji 8086 , dla platformy x86)

rastafile
źródło