Zum Inhalt springen

Privilegienstufe (CPU)/RISC-V

Aus Foxwiki

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 mideleg und medeleg), 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