Besturingssysteem en hardware
Wat gebeurt er juist wanneer de laatste ecall-instructie van de bovenstaande RISC-V-code wordt uitgevoerd?
li a7, 64 # システムコールの番号
li a0, 1 # 引数1
la a1, msg # 引数2
li a2, 13 # 引数3
ecall
- AEr wordt als gewone functie-aanroep, nog steeds in bevoorrechte modus, vertakt naar het adres met het opgegeven nummer
- BInterrupts worden uitgeschakeld en de CPU stopt tot de volgende interrupt
- CDoor een exception wordt naar de bevoorrechte modus overgeschakeld en wordt kernelcode uitgevoerd
Antwoord en toelichting tonen
Antwoord: C. Door een exception wordt naar de bevoorrechte modus overgeschakeld en wordt kernelcode uitgevoerd
ecall is een instructie die opzettelijk een exception veroorzaakt. De CPU slaat het adres van de huidige instructie op, schakelt over naar een modus met hogere privileges en gaat naar het door het besturingssysteem ingestelde beginpunt voor exception-afhandeling. De kernel bepaalt aan de hand van het nummer in a7 welke systeemaanroep het is, verwerkt de argumenten in a0 tot en met a2 en keert na het teruggeven van het resultaat terug naar de gebruikersmodus. Vanuit de gebruikersmodus kan niet rechtstreeks naar een kernelfunctie worden vertakt, en de CPU stoppen doet een andere instructie zoals wfi.