Ich lese das Betriebssystembuch von Galvin. Galvin erklärt, was sind Kernel- und Benutzermodi, Befehlsberechtigungen für beide Modi und auch über das Modusbit. Aber ich bin interessiert zu wissen, wie sich der Modus von einem zum anderen ändert. Grundsätzlich möchte ich folgende Frage lösen:
Eine CPU verfügt über zwei Modi: privilegiert und nicht privilegiert. Um den Modus von vorgeprägt auf nicht vorgezeichnet zu ändern
a) Ein Hardware-Interrupt wird benötigt
b) Ein Software-Interrupt wird benötigt.
c) Eine privilegierte Anweisung ist erforderlich.
d) Eine nicht privilegierte Anweisung ist erforderlich.
Von dem, was ich verstehe,
Vom Benutzermodus zum Kernelmodus - Hardware-Interrupt ist erforderlich [wie in Disk I / O]. Wenn das Benutzerprogramm Reifen benötigt, um auf einen Speicher zuzugreifen, der außerhalb seines zulässigen Bereichs liegt, tritt ein Trap auf, bei dem es sich im Grunde um einen Software-Interrupt handelt, der vom Betriebssystem behandelt wird. Jetzt können wir im Benutzermodus keine privilegierten Anweisungen ausführen. Daher kann eine nicht privilegierte Anweisung wie eine E / A-Anforderung den Benutzer in den Kernelmodus versetzen. Also denke ich, um mich zu ändern
von nicht privilegiert (Benutzer) zu privilegiert (Kernel) - H / W-Interrupt, S / W-Interrupt und nicht privilegierte Anweisungen reichen aus.
Kommen wir nun zum Kernel in den Benutzermodus. Das Betriebssystem kann den Kernel in den Benutzermodus ändern. Es wird einfach eine privilegierte Anweisung ausgeführt, um vom Kernel in den Benutzermodus zu wechseln. Es muss weder ein H / W- noch ein S / W-Interrupt generiert werden. Also schließe ich, um mich zu ändern
von vorgezogenen zu nicht vorgezogenen - eine privilegierte Anweisung reicht aus.
Habe ich recht ?
Auch bei der Ausführung im Kernel-Modus werden alle Interrupts deaktiviert, oder? Die Antwort kann also nicht (a) oder (b) sein. Da das Betriebssystem im Grunde eine Software ist, kann es keine H / W-Interrupts erzeugen.
Da das Betriebssystem selbst Interrupts verarbeitet, ist es für mich nicht sinnvoll, warum ein Interrupt generiert (und gewartet) werden muss, um vom Kernel in den Benutzermodus zu wechseln.
Bitte lassen Sie mich wissen, wenn ich irgendwo falsch liege. Jede Hilfe hierzu ist willkommen.