Welcher Adressraum wird bei Systemaufrufen verwendet? körperlich? oder virtuell?

672
user2284570

Erläuterung

Es gibt zwei Arten von virtuellen und physischen Adressräumen. In dem physischen Modell (normalerweise vom Kernel verwendet) ist der Speicher begrenzt und jede Adresse entspricht den physischen.

Der virtuelle wird von Prozessen verwendet. Es gibt keine Begrenzung (außer der aufgrund der Zeigergröße) . Um mehr Speicherplatz zu erhalten, fordern Sie das Programm einfach an (ignorieren, welcher Betrag angefordert werden kann) . Jede Adresse ist unterschiedlichen physischen Adressen zugeordnet.
So ist der Prozess auf das beschränkt, was er von RAM lesen kann.

Das Problem

Der Grund dafür ist, dass Systemaufrufe Ring0 verwenden, aber gleichzeitig (zumindest bei Linux) wird der Prozessstatus auf unterbrechbar aktualisiert, sodass Systemaufrufe den virtuellen Adressraum verwenden.
Soweit ich weiß, handelt es sich bei CPU-Ringen um privilegierte Anweisungen, nicht um den Adressraum (da es sich um MMU handelt) .

Wenn also ein uneingeschränkter Lesevorgang (aufgrund einer Sicherheitsanfälligkeit) während der Ausführung eines Systemaufrufs im Kernelcode auftritt. Kann es Speicher von anderen Prozessen zurückgeben?

0

2 Antworten auf die Frage

0
Jamie Hanrahan

Kernelmodus-Code kann so ziemlich alles tun, was er möchte, einschließlich der Suche nach den Adressräumen verschiedener Prozesse.

Ja, der Kernelmoduscode verwendet einen virtuellen Adressraum. Der Kernel verwaltet den physischen Adressraum, wird jedoch nicht im physischen Adressraum ausgeführt.

Der Benutzermodus kann nichts aus dem RAM lesen, da er keine physischen Adressen durchsetzen kann.

Da der Kernelmodus mit aktivierter Adressübersetzung läuft, kann der Kernelmoduscode auch nur virtuelle Adressen aktivieren. Mit dem K-Modus-Code können jedoch Seitentabelleneinträge eingerichtet werden, um virtuelle Adressen zu definieren, die in beliebige physische Adressen übersetzt werden, auf die sie zugreifen möchten.

-1
Mahadev Patil

Diese vom Kernel aufgerufenen Systemaufrufe verwenden einen physischen Adressraum.
Diese von Prozessen aufgerufenen Systemaufrufe verwenden einen virtuellen Adressraum.

Sorry, aber das ist falsch. Sobald das Betriebssystem hochgefahren ist und das Paging aktiviert ist, bleibt es für die gesamte Bootdauer aktiviert. Daher verwenden Sie virtuelle Adressen sowohl im Benutzer- als auch im Kernelmodus. Jamie Hanrahan vor 6 Jahren 0