CPU von Benutzermodus auf Kernel-Modus: Was genau macht sie? Wie funktioniert es diesen Übergang macht?

StackOverflow https://stackoverflow.com/questions/2479118

Frage

CPU Schaltet von Benutzermodus auf Kernel-Modus: Was genau bedeutet das? Wie funktioniert es diesen Übergang macht?

EDIT:

Auch wenn es Architektur abhängig ist mir bitte eine Antwort geben. Die Architektur ist bis zu Ihnen. Sagen Sie mir, für die Architektur, die Sie kennen.

Ich mag eine Vorstellung darüber bekommen, was alles wird daran beteiligt sein.

War es hilfreich?

Lösung

Hinweis: Dies ist meist relevant für x86-Architektur. Hier ist eine etwas vereinfachte Erklärung.

Der Übergang wird in der Regel durch eine der folgenden verursacht:

  • Fehler (zum Beispiel ein Seitenfehler oder eine andere durch die Ausführung eines Befehls verursacht Ausnahme)
  • Interrupt (beispielsweise eine Tastatur-Interrupt oder I / O-Schlichten)
  • Trap (zum Beispiel ein Systemaufruf)

Was normalerweise passiert ist, dass System überprüft die Interrupt Descriptor Table (IDT). Jede Ausnahme (Interrupt, Fehler, etc.) hat eine Reihe damit verbunden, dem Index in diese Tabelle verwendet wird.

Aus dieser Tabelle die CPU den Interrupt-Handler bestimmen kann, ausgeführt werden.

Als Teil des Übergangs folgende Änderungen (in der Regel) wirksam:

  • Wechseln Sie auf Kernel-Stack
  • EFLAGS werden gespeichert
  • Code-Segment-Selektor und EIP werden gespeichert.
  • Stapelsegment Wähler und Stapelzeiger gespeichert
  • Starten Sie den Interrupt-Handler Ausführung
  • Die Universalregister gespeichert (Handler Job)
  • Segmentwähler geändert werden Kernel Einsen (Handler Job)

Sie sind jetzt im Kernel-Modus.

Ich hoffe, das hilft:)

Andere Tipps

Das ist systemabhängig, aber der üblicher Mechanismus ist einiger Userland-Betrieb ein Software-Interrupt verursacht. Das Interrupt macht den Prozessor Schaltmodi und Sprung in der Kernel-Code, der überprüft dann, was das Programm zu tun versucht (Rufsystem?) Und dann tut die angeforderte Aktion und springt auf den Benutzer-Modus-Code zurück. Andere Mechanismen, neben einem Software-Interrupt den Übergang als auch verursachen könnte; zum Beispiel in einem präemptiven Multitasking-System, ein Timer-Interrupt kann den Scheduler auslösen auszuführen.

Mein Verständnis ist, dass jedes Programm, dessen Segmentregister haben die beiden LSBs Null wird in Kernel-Modus ausgeführt werden, während ein Programm, dessen Segmentregister haben die beiden LSBs = 1 wird im Benutzermodus ausgeführt werden. Tatsächlich definieren die beiden LSBs des Segment rgeisters die Priviledge Pegel (0 bis 3 höchste niedrigste)

Also, um einen prgram Lauf im Kernel-Modus machen Sie die Segmentregister einzurichten haben 0010 hex zu sein (glaube ich). Ich bin mir nicht sicher, wie man etwas anderes ohne Überschreiben ein Programm in diesem Speicherplatz platzieren kann - in anderen Worten, wie sie sicherstellen, der Linker das? Auch, wenn Sie den Kernel-Modus-Code von Benutzermodus Code aufrufen wollen, müssen Sie herausfinden, wie Parameter zu übergeben - sie sind nicht die gleichen Speicher soace verwenden, so die Daten nicht durch Speicherreferenz passieren kann. Ich denke, man es in Registern übergeben.

Wenn anynody in den Lücken in der oben füllen kann, wäre ich sehr dankbar.

In Windows, wenn Sie einen Systemcall zu machen, rufen Sie die Bibliotheksroutinen ein Kernel-Einstiegspunkt in dem Betriebssystem-Adressraum befindet. Es wiederum nimmt die CPU in Supervisor-Modus durch eine Anweisung, die für diesen Zweck ausgeführt wird, wie SYSENTER . Was sie tut, setzt im Wesentlichen ein wenig in der Flag-Register. Dies ermöglicht es das O privilegierte Anweisungen zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top