Wo ist die mode-bit?
Ich habe gerade gelesen das in "Operating System Concepts" von Silberschatz, S. 18:
Einem bit, das so genannte Modus bit, ist Hinzugefügt, um die hardware des Computers
zu zeigen den aktuellen Modus an: kernel - (0) oder Benutzer(1). Mit dem Modus-bit,
wir sind in der Lage zu unterscheiden zwischen einem task, der ausgeführt wird, im Namen
für das Betriebssystem und eine, ausgeführt im Auftrag des
user.
Wo ist der bit-Modus gespeichert?
(Ist es ein register in der CPU? Können Sie Lesen Sie die mode-bit? Soweit ich es verstehe, hat die CPU in der Lage sein zu Lesen der Modus-bit. Woher weiß er, welches Programm erhält die Betriebsart bit 0? Programme mit einer speziellen Adresse erhalten-Modus-bit 0? Wer kennt das mode-bit /wie ist es eingestellt?)
- Das Betriebssystem setzt es, wenn es funktioniert Kontext-switching
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte beachten Sie, dass Ihre Frage hängt in hohem Maße auf die CPU itselt; aber es ist ungewöhnlich, dass Sie kommen könnte, über bestimmte Prozessoren, wo dieses Konzept der user-level/kernel-Ebene gar nicht gibt.
(Entnommen aus "Understanding the Linux Kernel-3e", Abschnitt 2.2.1)
Beachten Sie auch, das hängt von der CPU, da kann man deutlich sehen, und es wird der Wechsel von einer zur anderen, aber das Konzept, im Allgemeinen hält.
Wer bestimmt es? In der Regel, dass der kernel/cpu und ein Benutzer-Prozess kann es nicht ändern, aber lassen Sie mich erklären hier etwas.
Dies ist eine starke Vereinfachung, nehmen Sie es nicht als es ist
Nehmen wir an, dass der kernel geladen und die erste Anwendung hat gerade erst begonnen(die erste shell), der kernel lädt alles, was für diese Anwendung zu starten, setzt das bit im cs-register(wenn Sie x86) und dann springt der code der Shell-Prozess.
Die shell weiterhin führen Sie alle Ihre Anweisungen in diesem Kontext, wenn der Prozess enthält einige privilegierte Anweisung, die cpu holt und es wird nicht ausgeführt; es gebe eine Ausnahme(hardware-Ausnahme) das sagt der kernel jemand versucht, einen privilegierten Befehl ausführen und hier den kernel-code verarbeitet den Auftrag(die CPU setzt die cs auf den kernel-Modus, und springt auf einen bekannten Speicherort zu behandeln diese Art von Fehler(vielleicht den Prozess beendet, vielleicht etwas anderes).
Also wie kann ein Prozess etwas tun, privilegiert? Im Gespräch mit einem bestimmten Gerät zum Beispiel?
Hier kommt das System Ruft; der kernel wird diesen job für Sie.
Was passiert, ist die folgende:
Sie setzen, was Sie wollen in einem bestimmten Ort(Zum Beispiel können Sie festlegen, dass Sie möchten, um Zugriff auf eine Datei, der Speicherort der Datei x, greifen Sie zum Lesen etc) in einigen Registern(die kernel-Dokumentation wird Sie wissen lassen über diese) und dann(auf x86) Sie rufen
int0x80
Unterricht.Dieser unterbricht die CPU, Stoppt Ihre Arbeit, stellt den Modus auf kernel-Modus, springt die IP-Registers auf einen bekannten-Standort, der den code, dient der Datei-E /a-Anforderungen und bewegt sich von dort.
Sobald Ihre Daten bereit ist, wird der kernel setzen diese Daten in einem Ort, den Sie zugreifen können(Speicher, register, es kommt auf die CPU/Kernel/was Sie anzubieten), setzt die cs-flag in den user-Modus, und springt wieder zurück zu Ihrem Unterricht neben dem es
int 0x80
Unterricht.Schließlich, dies passiert immer dann, wenn ein Schalter passiert, ist der kernel informiert wird, etwas passiert, damit die CPU beendet Ihre aktuellen Instruktion, änderungen der CPU-status und springt auf, wobei der code, der verarbeitet das Ding; der Prozess oben erklärt, grob gesagt, gilt für Sie, wie ein Wechsel zwischen kernel-Modus und Benutzer-Modus passiert.
Es ist ein CPU-register. Es ist nur zugänglich, wenn Sie bereits im kernel-Modus.
Die details, wie das festgelegt wird, hängt von der CPU-design. In den meisten gängigen hardware -, es wird automatisch gesetzt, wenn die Ausführung einer speziellen opcode, der verwendet wird zum durchführen von Systemaufrufen. Es gibt jedoch andere Architekturen, bei denen bestimmte Speicher-Seiten können ein flag gesetzt, das angibt, dass Sie sind "gateways", um die kernel-Aufruf einer Funktion auf diesen Seiten legt die kernel-Modus-bit.
In diesen Tagen ist es gegeben, andere Namen als Supervisor-Modus oder ein Schutz ring.