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).
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).
Risposte:
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
...).
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 GlobalLock
e GlobalUnlock
, LocalLock
e LocalUnlock
funzioni. 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.
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.
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.
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 .
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)