Ist es möglich, mehrere Prozesse ohne Unterstützung des virtuellen Speichers zu unterstützen?

8

Ist es möglich, mehrere Prozesse ohne Unterstützung des virtuellen Speichers zu unterstützen? Ich würde gerne mehr darüber wissen, wenn ja.

Sen.
quelle
Möglicherweise nicht zum Thema? Es sei denn, es geht nur um UNIX-Systeme.
Maciej Piechotka

Antworten:

10

Sie können ein Multiprozess-Betriebssystem auch ohne Hardware-Unterstützung (ohne MMU ) ausführen , wobei alle Zeiger eine physische Adresse darstellen. Sie verlieren jedoch einige wichtige Funktionen, die normalerweise über die MMU bereitgestellt werden:

  • Da ein Zeiger immer auf eine bestimmte Stelle im RAM zeigt, können Sie nicht (oder nur in sehr begrenztem Umfang) tauschen. Normalerweise löst die MMU eine Ausnahme aus, wenn sie für eine bestimmte virtuelle Adresse keine physische Seite finden kann und der vom Betriebssystem bereitgestellte Ausnahmebehandler die Seite vom Swap abruft.
  • Da ein Zeiger ohne Prüfung dereferenziert wird, kann jeder Prozess auf den Speicher anderer Prozesse und den Kernelspeicher zugreifen. Normalerweise löst die MMU eine Ausnahme aus, wenn sie keine physische Seite für eine bestimmte virtuelle Adresse finden kann, und der vom Betriebssystem bereitgestellte Ausnahmebehandler beendet den Prozess für den Versuch eines ungültigen Zugriffs.
  • Da derselbe Zeiger in verschiedenen Prozessen dieselbe Bedeutung hat, können Sie Fork nicht einfach implementieren . Normalerweise besteht der Effekt forkdarin, eine Kopie¹ des physischen Speichers des Prozesses zu erstellen und eine neue virtuelle Speicherzuordnung von denselben virtuellen Adressen zu den neuen physischen Adressen zu erstellen.

Es gibt Unix-ähnliche Betriebssysteme, die auf Systemen ohne MMU funktionieren.

¹ In modernen Unices erfolgt dies normalerweise träge (Copy-on-Write), was wiederum darauf beruht, dass die MMU eine Ausnahme auslöst, wenn sie keine physische Seite findet.

Gilles 'SO - hör auf böse zu sein'
quelle
Im zweiten Aufzählungspunkt sollte "wenn keine physische Seite für eine bestimmte virtuelle Adresse gefunden werden kann" stattdessen so etwas wie "wenn der Zugriff auf die Seite, die der angegebenen virtuellen Adresse entspricht, verweigert werden soll". Die kerneigene Seite ist höchstwahrscheinlich resident.
Ruslan
@Ruslan Wenn eine Seite in einem Prozess nicht zugeordnet ist, enthält die MMU normalerweise Informationen, die keiner physischen Seite zugeordnet sind. Es kann vorkommen, dass die MMU die Adresse einer physischen Seite enthält, auf die der Prozess keinen Zugriff hat. Dies ist jedoch eher die Ausnahme als die Regel, die für den Kernelspeicher verwendet wird, wenn der Kernel diese Funktion der MMU verwendet (was Linux tut). .
Gilles 'SO - hör auf böse zu sein'
2

Es ist sicherlich mit einigen Einschränkungen wie dem Speicherschutz möglich, die, wie bereits erwähnt, ein Problem darstellen würden. Beispielsweise unterstützt µClinux http://www.uclinux.org/ mehrere Prozesse, ohne virtuellen Speicher zu implementieren. Beachten Sie, dass einige CPUs wie mindestens die Analog Devices Blackfin eine MPU (Memory Protection Unit) http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu bereitstellen . Auf diese Weise können Betriebssysteme ohne virtuellen Speicher weiterhin die Partitionierung des Speichers ermöglichen.

jlliagre
quelle
0

Dies hängt davon ab, wie Sie den Prozess im Vergleich zu Threads in Bezug auf den Speicher definieren.

Eine der Funktionen des virtuellen Speichers ist die Partitionierung. Es ist zwar möglich, mehrere Prozesse ohne Partitionierung auszuführen, dies entspricht jedoch eher der Ausführung mehrerer Threads als der Ausführung von Prozessen, die denselben Adressraum verwenden.

Sybreon
quelle
Ja und nein. Es ist möglich, eine Speichertrennung ohne virtuellen Speicher zu erzwingen. Einige Mikrocontroller verfügen über einen Hardware-Speicherschutz, jedoch keinen virtuellen Speicher (siehe Antwort von jlliagre ). Und auch ohne Hardwareunterstützung können Sie die Speichertrennung durch statische Analyse erzwingen (es ist nicht einfach, aber machbar).
Gilles 'SO - hör auf böse zu sein'