RISC-V の Privileged Instruction Set の続き。
http://www.eecs.berkeley.edu/Pubs/TechRpts/2015/EECS-2015-49.pdf
第3章はMachine-Level ISAの章になっている。Machine-Levelでアクセスできるシステムレジスタの紹介と、命令セットの紹介。 システムレジスタはまあそんな感じかなという説明が続く。ちょっと面白いと思ったのは、
mstatusレジスタは、現在の権限モードと例外許可ビットを0から4つまで保持することができる。 マシンモードが4つまであるなら、PRV0(=PRV)からPRV3まで保持しており、トラップが発生するとPRV-->PRV0に権限情報を移動していく。 他のアーキテクチャで詳細を調べたことが無いけれども、マシンレベルを容易に移動できるような仕組みになっている。
トラップを発生させる命令はこちら。
- ECALL(environment call) : より高位のマシンモードに繊維する。
- EBREAK (environment break) : デバッガによりブレークポイントを発生させる。
- ERET : 前のマシンモードに戻る。マシンモードに応じて、sepc / hepc / mepc からPC値を書き戻す。
- MRTS (Machine Redirect Trap to Supervisor) : トラップの処理をMモードからSモードに移譲する
- MRTH (Machine Redirect Trap to Hypervisor) : トラップの処理をMモードからHモードに移譲する
あまりOSの知識がないので、これらの命令をどのように活用すれば良いのか分からない...
- WFI (wait for interrupt) : 割り込みの発生を待つ。実装に対するヒントを与える。