プロセッサの動作モードについて

 プロセッサは動作モードを切り替えることによってアクセスできるリソースを制限し、動作しているプログラムが他のプログラムの領域を覗いたり破壊することから保護することができる。これがないプロセッサはメモリもI/Oもどのプログラムからもアクセスし放題であり、すべてOSやプログラム側で注意しなければならない。

 特権モード(Supervisor/Privileged mode)とユーザモードのようにすべてがアクセスできるモードとメモリやI/Oアクセスに制限のあるモードの2つを持つものが一般的である。ユーザモードでのメモリアクセスは特権モードで割り当てられたメモリ内に制限される。I/Oアクセスは直接できず、特権モードで動作するデバイスドライバ経由で必要な操作をリクエストする。これらを管理するマルチタスクのOSが前提となる。

 ユーザモードでのアクセス違反はトラップが発生し、特権モードで処理される。ユーザモードで割り当てられたアドレスの範囲内に実際のメモリの割り当てがない場合はページフォルトが発生し、OS側のメモリ管理で使用頻度が低いメモリ空間を退避させ新しいメモリ空間を割り当てて特権モードの割り込み処理からユーザモードに戻ることにより、ユーザモードからは何事もなかったかのように動作を継続できる。

 特権モードはユーザモードの上位でユーザモードと同等以上のリソースにアクセスできる。これを発展させて階層のように保護するのがリングプロテクションである。x86では数値の大きいリングが下位になり、上位のリングへのアクセスは制限される。この保護機構をどう使うかはOS次第となる。TRONCHIPも4階層のリングが定義されている。
リングプロテクション(wikipedia)

 RISC-VではすべてのリソースにアクセスできるMachine mode、メモリ管理を行うSupervisor mode、User modeを持つ。Supervisor modeがあるのはこの上位で仮想化システム(ハイパーバイザ)を導入しやすいよう、OS動作に必要なもの(メモリ管理)を分けてある。これ以外にもDebug modeがある。

Privileged ISA Specification(RISC-V)
第10章 RV32/64特権アーキテクチャ (2)
RISC-Vにおけるprivilege modeの遷移(xv6-riscvを例にして)(私のひらめき日記)

 SPARC V9は特権モード(Privileged mode)とユーザモードを持つが、それ以外にRED modeという状態がある。これはリセット後と深刻なほぼ回復不能な例外が発生した時の状態で、アクセスできるリソースが制限される。これはリセット直後の自己診断やハードウェアの不具合による例外などで異常が発生したときにできるだけ安全に停止させる目的がある。汎用機にあるマシンチェックに似ている。また、割り込みが発生したときに%g1~%g7が作業用として新たに割り当てられるAlternate Global Registerの機能があるが、実装によってはメモリ管理用のセット、他の割り込み用のセットが割り当てられるので特権モードもいくつかに別れているようにみなせるかもしれない。


☆こういう動作モードがあればいいよね。

・すべてにアクセスできる最上位の特権モード
・ハードウェア障害が発生した場合に安全に停止できるモード
・仮想化で扱えるメモリ管理モード
・浮動小数点やSIMDなどが効率よく実行できる保護されたユーザーモード


どーもくん ぬいぐるみS 高さ約16.5cm
どーもくん ぬいぐるみS 高さ約16.5cm

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

かわいい

この記事へのコメント