Il chip MMU (Memory Management Unit) è necessario affinché un processore abbia il supporto della memoria virtuale?


14

Il chip MMU (Memory Management Unit) è necessario affinché un processore abbia il supporto della memoria virtuale?

È possibile emulare la funzionalità MMU nel software? (Sono consapevole che probabilmente avrà un grande impatto sulle prestazioni).


Qualsiasi computer pienamente in grado può emulare qualsiasi altro computer con un impatto sulle prestazioni sufficiente. O emulare qualsiasi hardware. L'unica domanda è l'entità del colpo di prestazione.
Valità,

ogni processore oggi ha bisogno di un TLB, quindi ha un'unità MM integrata.
rastafile,

Risposte:


22

Qualsiasi emulatore di sistema che emula un sistema contenente una MMU emula effettivamente una MMU nel software, quindi la risposta alla tua domanda come dichiarato è "sì". Tuttavia , la memoria virtuale richiede un modo per imporre il controllo dell'accesso alla memoria, o almeno la traduzione dell'indirizzo, quindi ha bisogno dell'emulazione software completa della CPU che esegue il software da controllare o dell'assistenza hardware.

Quindi è possibile costruire un sistema senza MMU, portarlo su QEMU , aggiungere i pezzi mancanti per rendere effettivamente utile la memoria virtuale ( ad esempio , aggiungere il supporto per lo scambio sul sistema host) ed eseguire un sistema operativo che richiede MMU in QEMU, con tutta la protezione che ti aspetteresti nel sistema operativo guest (esclusi i bug QEMU).

Un esempio reale e vecchio di una "emulazione" senza MMU utilizzata per fornire memoria virtuale è la Z-machine , che era in grado di eseguire il paging e lo scambio di codice e dati, su sistemi a 8 bit tra la fine degli anni settanta e l'inizio degli anni ottanta . Questo ha funzionato emulando un processore virtuale sul processore reale sottostante; in questo modo, l'interprete mantiene il pieno controllo del layout di memoria che "vede" il programma in esecuzione.

In pratica, si ritiene generalmente che sia richiesto un MMU per il supporto della memoria virtuale, almeno a livello del sistema operativo. Come indicato kernel senza MMU? , è possibile compilare il kernel Linux in modo che possa funzionare su sistemi senza MMU, ma la configurazione risultante è molto insolita e appropriata solo per casi d'uso molto specifici (senza software ostile in particolare). Potrebbe non supportare molti scenari che richiedono memoria virtuale (scambio, mmap...).


quindi le applicazioni di macchine virtuali hanno anche un componente emulatore MMU?
yoyo_fun,

Sì, non necessariamente come componente separato, ma hanno il supporto necessario nell'emulazione.
Stephen Kitt

7
@JenniferAnderson: alcune moderne CPU hanno funzionalità che consentono all'emulatore (parzialmente) di scaricare l'emulazione MMU sulla stessa MMU. Ad esempio, un programma in esecuzione all'interno di un emulatore utilizzerà esso stesso più pagine di memoria emulate, queste pagine di memoria sono ovviamente "nidificate" nelle pagine di memoria utilizzate dall'emulatore. Entrambe le nuove CPU Intel e AMD di fascia alta hanno il supporto per le tabelle di pagine nidificate, che consentono all'emulatore di esprimere questo annidamento all'interno della stessa MMU, invece di doverlo emulare (costoso).
Jörg W Mittag,

@ Jörg davvero, grazie per il chiarimento. La maggior parte degli hypervisor include comunque un certo livello di emulazione del software, in modo che funzionino senza il supporto hardware aggiuntivo. Sono stato ammiccato dall'aspetto "È possibile" della domanda ;-).
Stephen Kitt

3
@JenniferAnderson: Sì, questa funzionalità è stata specificamente introdotta per la para-virtualizzazione. (Si noti che non è una novità, la paravirtualizzazione assistita dall'hardware esiste nel mondo dei mainframe dai primi anni '60.) Tuttavia, si scopre che può essere utilizzato anche per altre applicazioni interessanti, come accelerare la Garbage Collection (vedere il collezionista C4 in Azul's Zing JVM per un esempio). Tuttavia, si noti che tutto ciò funziona in entrambe le direzioni: allo stesso modo in cui l' estensione di MMU con supporto di virtualizzazione non è altro che un'ottimizzazione delle prestazioni e la virtualizzazione ...
Jörg W Mittag

7

Dipende esattamente da ciò che chiami memoria virtuale. Un modello interessante è il vecchio modello Win16 (meglio noto dal vecchio Windows 3.x, non da Windows NT). In quel modello, avevi GlobalLocke GlobalUnlock, LocalLocke LocalUnlockfunzioni. Erano una forma di gestione cooperativa e manuale della memoria virtuale. Dato che ciò avveniva nel software (applicativo), non era necessario un MMU. E la memoria era virtuale, nel senso che la memoria sbloccata poteva essere scambiata su disco.

Tuttavia, nel modello Win16 non esiste protezione tra processi diversi. Se un altro processo ha lasciato i dati in memoria, è possibile sovrascriverli. Questa non è una restrizione fondamentale. Al giorno d'oggi con gli SSD veloci, è possibile rimuovere completamente un processo non in esecuzione dalla memoria e farlo in un tempo ragionevole.


7

Non è necessario disporre di una MMU hardware, se si dispone di software in grado di scambiare i processi da e verso la memoria fisica.

Questa era la modalità operativa dei primi sistemi operativi multi-tasking. Un solo processo è residente in memoria in un dato momento, viene sostituito nella sua interezza quando scade il suo intervallo di tempo (si può vedere che questo diventa problematico con processi di grandi dimensioni). Il contenuto della memoria visto dal processo attualmente in esecuzione non è uguale a quello visto da qualsiasi altro processo e ognuno ha la propria vista dello spazio degli indirizzi.

Un certo supporto hardware è utile: un'idea di un'area di memoria "protetta" per uso proprio del sistema operativo (ad es. Tutti gli indirizzi con MSB set sono accessibili solo in modalità supervisore) e un valore "break" che indica l'indirizzo più alto in uso, ma gestione della memoria l'hardware non è un requisito assoluto per la memoria virtuale; è solo un modo particolarmente efficace per raggiungerlo.


2
Questa non è davvero memoria virtuale, è solo scambio di processo ... (Avremmo davvero bisogno di definire "memoria virtuale" per una risposta adeguata a questa domanda!)
Stephen Kitt,

Ogni processo ha una sua visione dello spazio degli indirizzi - lo modificherò per chiarire la definizione che sto usando.
Toby Speight,

Giusto, ma è la stessa mappatura one-to-one per tutti i processi. (Dal punto di vista dei processi non c'è molta differenza, quindi non c'è un vero argomento lì ...)
Stephen Kitt,

0

Le macchine commerciali originali per fare VM non avevano MMU - avevano VM incorporato nel processore. Il mio pensiero attuale è che le MMU sono solo un ripensamento per mettere la VM al di sopra dei processori non VM. VM è stata sviluppata all'università di Manchester e i progettisti di Burroughs erano convinti che avrebbero dovuto includerla, sebbene all'epoca fossero molto innovativi.

Il Burroughs B5000 (ora macchine MCP Unisys) utilizzava descrittori di memoria che impongono limiti di memoria: esci da un confine e il tuo programma viene scaricato (il rispetto dei confini è la base di una bella società, ma alcuni abusano del privilegio, quindi i limiti devono essere applicati).

I descrittori contengono un indirizzo di memoria, una lunghezza di blocco e un tipo di dati, ma anche l'importante bit P o bit di presenza. Il p-bit indica che il blocco è in memoria. Un p-bit pari a zero indica che il blocco si trova nella memoria di massa e l'indirizzo è l'indirizzo di memoria, nel programma originale (codice o dati) o nella macchina virtuale (dati implementati).

Queste macchine hanno implementato un modello di memoria gerarchica. Le MMU sembrano compensare le carenze della memoria piatta, dovendo mappare gli oggetti utente nella memoria piatta. JK Iliffe ha anche progettato macchine ICL con questo modello:

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

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

La differenza tra queste macchine e la maggior parte di quelle attuali è che si rivolgono all'architettura di sistema completa, non solo a un'architettura CPU.

Quindi sembra che non solo le MMU non siano necessarie, ma i sistemi stanno meglio senza di esse.


-1

La maggior parte dei processori desktop, laptop e server include uno o più TLB nell'hardware di gestione della memoria ed è quasi sempre presente in qualsiasi processore che utilizza memoria virtuale paginata o segmentata .

Translation_lookaside_buffer

E poi, leggi sulla memoria virtuale e su cosa è realmente pensata. L'enorme spazio di indirizzi virtuali non è l'idea principale. L'idea principale è la memorizzazione nella cache / buffering, a molti livelli.

È tutt'altro che semplice, ma questa cache di memoria TLB è un componente hardware importante su cui si basa il sottosistema mm del kernel (altrimenti la VM sarebbe in gran parte overhead).


VM =

memoria virtuale O macchina virtuale. Molto diverso, molto connesso.


Quindi la risposta è no, non è necessario un chip MMU (un'unità separata al di fuori della CPU, sulla scheda madre).

Sì, è necessario un po 'di MMU hardware (nella CPU) per pensare alla VM utile. (È iniziato con questa segmentazione 8086 , per la piattaforma x86)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.