以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/05/29/040000より取得しました。


RISC-VのSBI(Supervisor Binary Interface)の仕組みと役割についての調査

最近RISC-VのLinuxサポート周りを調べている中で、「SBI(Supervisor Binary Interface)」という仕組みが要所で登場する。
最初は「ブート時の一時的なインターフェースかな?」と思っていたが、どうやらRISC-Vにおいてはランタイムでも重要な役割を持つ仕組みであることが分かってきた。

ここでは、SBIの基本的な仕組みと役割に加え、x86との対比を通してこの設計の意図を掘り下げる。

SBIとは何か?

SBI(Supervisor Binary Interface)は、RISC-VのSモード(Supervisorモード)で動作するOSと、Mモード(Machineモード)で動作するファームウェア(通常OpenSBI)との間のインターフェース仕様である。

RISC-Vには以下のような特権レベルが定義されている:

モード名 用途 使用者
M-mode 最上位特権。ハード初期化、割り込み、タイマ等の制御 ファームウェア(OpenSBI等)
S-mode OS用特権モード Linuxカーネルなど
U-mode ユーザー空間 アプリケーション

SBIの役割:OSとハードウェアの間を取り持つ

Sモードで動作するLinuxは、Mモードのレジスタ(例:mtimecmp など)に直接アクセスできない。
そのため、Linuxがタイマや割り込みなどのハードウェア機能を使いたいときは、SBIを通じてファームウェアに依頼する必要がある

タイマ割り込みの流れ

Linux(S-mode)
   │
   ├─ sbi_set_timer()
   ↓
OpenSBI(M-mode)
   ├─ mtimecmpに設定
   ↓
ハードウェア
   ├─ 時間到達 → M-mode割り込み
   ↓
OpenSBI
   └─ 割り込みをS-modeに再送
Linux(割り込みハンドラ起動)

x86との比較:設計思想の違い

特権レベルの比較

アーキテクチャ 特権構造 実際に使われるレベル
x86 Ring 0~3 Ring 0(OS)とRing 3(ユーザ)
RISC-V M/S/Uモード(+H) Mモード:ファームウェア
Sモード:OS
Uモード:ユーザ

タイマ・割り込み制御の比較

項目 x86 RISC-V
タイマ設定 OSが直接制御 OSがSBI経由で依頼
割り込み制御 OSがPIC/APICを直接操作 OSはPLIC/CLINTをSBI経由で操作
BIOS後のファームウェア 消える(UEFIなど) OpenSBIが常駐する

OpenSBIとは?

OpenSBIは、SBI仕様に準拠したオープンソースのリファレンス実装である。 起動初期だけでなく、Linux動作中もバックグラウンドでSBIコールの処理、割り込み委譲、タイマ制御などを行っている。

GitHub:https://github.com/riscv-software-src/opensbi

OpenSBI v3.0の新機能

  • FWFT:ファームウェア機能の検出と制御
  • SSE:Supervisorイベント通知
  • svinval命令:TLB無効化の効率化
  • mseal:Supervisor領域の保護
  • vDSO強化:getrandom() などの高速化
  • ベンダー拡張対応(SiFiveなど)

まとめ

SBIはRISC-Vにおけるランタイム抽象化レイヤーとして、OSとハードウェアの橋渡しを行う。 x86とは異なり、OSが全権を握るのではなく、Mモードのファームウェアと協調して動作する設計となっている。

この分離構造により、セキュリティ・移植性・抽象化の利点が得られる一方、設計思想としてはx86とは明確に異なる。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/05/29/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14