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.
MINIX ist eine Unix-Variante, die ursprünglich von Andrew Tanenbaum als Begleiter zu seinem Buch Operating Systems: Design and Implementation entwickelt wurde . Die Originalversionen liefen auf den damaligen PCs, die den virtuellen Speicher nicht unterstützen konnten. (Angesichts Ihrer Interessen empfehle ich, dieses Buch zu lesen, auch eine ältere Ausgabe, wenn das alles ist, was Sie sich leisten können.)
¹ 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.
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.
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.
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).
Antworten:
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:
fork
darin, 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.
vfork
unterstützt) und das Fehlen eines Speicherschutzes. Aber es gibt präventives Multitasking.¹ 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.
quelle
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.
quelle
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.
quelle