Privilegienstufe (CPU)/RISC-V
Erscheinungsbild
RISC-V
Der Privilege Mode, oft einfach Mode, von RISC-V hat drei Stufen, genannt U-Mode, S-Mode und M-Mode
- Dabei müssen nicht alle Modi implementiert sein; die folgenden Konfigurationen sind möglich:
| Implementierte Modi | Vorgesehen für |
|---|---|
| M | einfache Embedded-Systeme |
| M, U | sichere Embedded-Systeme |
| M, S, U | übliche Betriebssysteme |
Dazu kommt die Hypervisor-Erweiterung, die U- und S-Mode in VU, HU, VS und HS aufteilt
- Die virtuellen Modi werden von virtualisierten Betriebssystemen genutzt, während die Hypervisor-Modi vom Hypervisor-Betriebssystem und seinen Anwendungsprogrammen genutzt wird
- Auch der Debug-Modus einer debugbaren Implementierung ist streng genommen ein eigener Privilegienmodus, der Zugriff auf Register und Speicherbereiche hat, die aus dem M-Mode nicht benutzt werden können
Die Kommunikation zwischen den Modi geschieht mittels Umgebungsaufrufen durch den ecall-Befehl, was jeweils eine Anfrage an den nächstniedrigeren Modus stellt
- Ein Umgebungsaufruf vom U-Mode an den S-Mode ist also ein Systemaufruf, ein Umgebungsaufruf vom S-Mode an den M-Mode ein Aufruf an die Firmware, und ein Umgebungsaufruf vom VS-Mode an den HS-Mode ein Aufruf an virtuelle Firmware, also ein Hypercall bzw. Hypervisor-Aufruf
- Außerdem werden Interrupts von höheren Modi behandelt
- Standardmäßig behandelt M-Mode alle Interrupts, die Behandlung einzelner Interrupts kann von dort an S-Mode abgegeben werden
U-Mode
Der U-Mode (User/Application) ist für Anwendungsprogramme gedacht, was auch die Anwendungssoftware in sicheren Embedded-Systemen einschließt
- U-Mode hat keinen Zugriff auf Kontroll- und Statusregister (CSRs), die Hardwarefunktionen konfigurieren, und unterliegt (falls implementiert) der virtuellen Speicherverwaltung, sodass der Zugriff auf Speicherbereiche eingeschränkt ist
- Es ist nicht möglich, Interrupts im U-Mode zu behandeln
S-Mode
S-Mode (Supervisor) ist für Betriebssysteme gedacht
- S-Mode kann jeden Speicher aller Programme lesen und schreiben, einen Großteil des Systems konfigurieren, sofern M-Mode dies zulässt, und Traps (Interrupts und Ausnahmen) behandeln
- Auch ein Hypervisor wird im S-Mode ausgeführt, dieser kann zusätzlich auf die CSRs zur Konfiguration der virtualisierten Systeme zugreifen und ihren Speicher lesen
- S-Mode hat keinen Zugriff auf PMP (Physical Memory Protection), was es M-Mode erlaubt, bestimmte Speicherbereiche auch vor dem Betriebssystem abzusichern
M-Mode
M-Mode (Machine) ist für Firmware gedacht, bzw. für die Software in sehr einfachen Embedded-Systemen oder Mikrocontrollern, die effektiv keine Privilegienmodi besitzen
- M-Mode hat als einziger Modus uneingeschränkt Zugriff auf alle Speicherbereiche und CSRs
- Eine CPU wird im M-Mode gestartet, und die Firmware übergibt im Laufe des Bootprozesses die Kontrolle an ein Betriebssystem im S-Mode
- Standardmäßig werden alle Traps im M-Mode behandelt, was z. B
- die Emulation fehlender Befehle oder Hardwarefunktionen in Firmware erlaubt
- M-Mode kann allerdings bestimmte Traps an S-Mode-Software delegieren (mittels
midelegundmedeleg), beispielsweise für die virtuelle Speicherverwaltung - In der Regel ist der Code, der im M-Mode ausgeführt wird, nicht veränder- oder beeinflussbar, ähnlich wie IME oder PSP