Betriebssystem und Hardware

Was geschieht, wenn der letzte Befehl ecall des obigen RISC-V-Codes ausgeführt wird?

li   a7, 64      # システムコールの番号
li   a0, 1       # 引数1
la   a1, msg     # 引数2
li   a2, 13      # 引数3
ecall
  1. AEs wird an die Adresse der angegebenen Nummer wie bei einem gewöhnlichen Funktionsaufruf im privilegierten Modus verzweigt
  2. BInterrupts werden gesperrt, und die CPU hält an, bis der nächste Interrupt eintrifft
  3. CPer Ausnahme wird in den privilegierten Modus gewechselt, und die Kernel-Verarbeitung wird ausgeführt
Antwort und Erläuterung anzeigen

Antwort: C. Per Ausnahme wird in den privilegierten Modus gewechselt, und die Kernel-Verarbeitung wird ausgeführt

ecall ist ein Befehl, der absichtlich eine Ausnahme auslöst. Die CPU sichert die Adresse des aktuellen Befehls, wechselt in einen Modus höherer Privilegien und springt zum vom Betriebssystem eingerichteten Einstiegspunkt der Ausnahmebehandlung. Der Kernel entscheidet anhand der Nummer in a7, welcher Systemaufruf vorliegt, verarbeitet ihn mit a0 bis a2 als Argumenten und kehrt nach Rückgabe des Ergebnisses in den Benutzermodus zurück. Aus dem Benutzermodus kann nicht direkt zu Kernel-Funktionen verzweigt werden, und die CPU wird durch einen anderen Befehl wie wfi angehalten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Betriebssystem und Hardware

  1. Welche Erklärung des Unterschieds zwischen Interrupt und Ausnahme ist allgemein richtig?
  2. Welches der folgenden Ereignisse ist unabhängig von der Befehlsausführung und tritt asynchron zu einem nicht feststehenden Zeitpunkt auf?
  3. Welcher allgemeine Ablauf ist richtig, wenn die CPU einen Interrupt annimmt?
  4. Welche Aufgabe hat die Interrupt-Vektortabelle?
  5. Welcher Hinweis zum vorübergehenden Sperren (Maskieren) von Interrupts während kritischer Verarbeitung ist richtig?

Vergleiche zu diesem Thema