È possibile supportare più processi senza supporto per la memoria virtuale?


8

È possibile supportare più processi senza supporto per la memoria virtuale? Mi piacerebbe saperne di più a riguardo in tal caso.


Forse fuori tema? A meno che non si tratti solo di sistemi UNIX.
Maciej Piechotka,

Risposte:


10

È possibile eseguire un sistema operativo multi-processo anche senza supporto hardware (senza MMU ), con tutti i puntatori che rappresentano un indirizzo fisico. Tuttavia, perdi diverse funzionalità chiave di solito fornite tramite MMU:

  • Dato che un puntatore punta sempre a un posto specifico nella RAM, non è possibile effettuare lo scambio (o solo in modo molto limitato). Normalmente, la MMU solleva un'eccezione quando non riesce a trovare una pagina fisica per un determinato indirizzo virtuale e il gestore delle eccezioni fornito dal sistema operativo recupera la pagina dallo scambio.
  • Dal momento che un puntatore non viene verificato senza controllo, ogni processo può accedere alla memoria di altri processi e alla memoria del kernel. Normalmente, la MMU genera un'eccezione quando non riesce a trovare una pagina fisica per un determinato indirizzo virtuale e il gestore delle eccezioni fornito dal sistema operativo termina il processo per tentare un accesso non valido.
  • Poiché lo stesso puntatore ha lo stesso significato in processi diversi, non è possibile implementare facilmente fork . Normalmente, l'effetto di forkè fare una copia¹ della memoria fisica del processo e creare una nuova mappa di memoria virtuale dagli stessi indirizzi virtuali ai nuovi indirizzi fisici.

Esistono sistemi operativi unix-like che funzionano su sistemi senza MMU.

¹ Nei moderni unici, questo di solito viene fatto pigramente (copia su scrittura), che si basa ancora sulla MMU sollevando un'eccezione quando non riesce a trovare una pagina fisica.


Nel secondo punto "quando non riesce a trovare una pagina fisica per un determinato indirizzo virtuale" dovrebbe essere invece qualcosa di simile a "quando si deve negare l'accesso alla pagina corrispondente al dato indirizzo virtuale". La pagina di proprietà del kernel è probabilmente residente.
Ruslan,

@Ruslan Quando una pagina non è mappata in un processo, la MMU di solito contiene informazioni che non sono mappate a una pagina fisica. Può succedere che la MMU contenga l'indirizzo di una pagina fisica a cui il processo non ha accesso, ma questa è l'eccezione piuttosto che la regola, usata per la memoria del kernel se il kernel usa questa funzionalità della MMU (cosa che Linux fa) .
Gilles 'SO- smetti di essere malvagio' il

2

È certamente possibile con alcuni vincoli come la protezione della memoria che sarebbe un problema come già affermato. Ad esempio µClinux http://www.uclinux.org/ supporta più processi senza implementare memoria virtuale. Si noti che alcune CPU come almeno Analog Devices Blackfin forniscono una MPU (Memory Protection Unit) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu . Ciò consente ai sistemi operativi meno memoria virtuale di consentire comunque la partizione della memoria.


0

Ciò dipende da come si definiscono i processi rispetto ai thread in termini di memoria.

Una delle funzioni della memoria virtuale è il partizionamento. Sebbene sia possibile eseguire più processi senza partizionamento, sarebbe più come eseguire più thread che processi, condividendo lo stesso spazio di indirizzi.


Sì e no. È possibile imporre la separazione della memoria senza memoria virtuale. Alcuni microcontrollori hanno protezione della memoria hardware ma non memoria virtuale (vedi la risposta di jlliagre ). E anche senza il supporto hardware, è possibile imporre la separazione della memoria attraverso l'analisi statica (non è facile, ma è fattibile).
Gilles 'SO- smetti di essere malvagio' il
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.