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
- AEs wird an die Adresse der angegebenen Nummer wie bei einem gewöhnlichen Funktionsaufruf im privilegierten Modus verzweigt
- BInterrupts werden gesperrt, und die CPU hält an, bis der nächste Interrupt eintrifft
- 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.