リングプロテクション(Ring Protection または Protection Ring)は、複数の特権レベルの階層構造を持ったコンピュータアーキテクチャの一種。単にリングとも言う。また、階層保護ドメイン (hierarchical protection domains) とも呼ぶ[1][2]。データや機能を障害から保護し(フォールトトレラント性)、悪意ある行為から保護する(コンピュータセキュリティ)。capability-based security とは対極の考え方に基づく。 コンピュータのオペレーティングシステムは個々のリソースに対して様々なアクセスのレベル(アクセス権)を提供する。 リングとは図に示すように、円形の階層構造を示しており、各階層がアクセス権を示している。 リングプロテクションは、コンピュータ・アーキテクチャ内の権限
目次
1 概要
2 実装
3 スーパーバイザモード
4 ハイパーバイザモード
5 CPUとOSの抽象化レベルの間の相互運用
6 脚注
7 参考文献
8 関連項目
概要
リング間には特別なゲート(門)があり、外側のリングから内側のリングのリソースに予め決められた方法でアクセスすることを可能にしており、任意の使用を許すことはない。ゲートによるリング間の正しいアクセスにより、あるリングのプログラムが別のリングのプログラム用のリソースを悪用することを防ぎ、セキュリティを強化することができる。例えば、ハードウェアアクセスはリング1のデバイスドライバで行う必要があり、ユーザプログラムとしてリング3で動作しているスパイウェアがユーザーに知られずにウェブカメラをONにすることはできない。より大きな番号のリングで動作するウェブブラウザなどのプログラムは、より小さい番号のリングからしかアクセスできないリソースであるネットワークへのアクセスを所定の方法で要求しなければならない。 ハードウェアのサポートするリングプロテクションはMulticsオペレーティングシステム(UNIX系OSの先祖)の導入した様々な革新的コンセプトの中でも最も先進的であった。しかし、今日最も一般的なOSは2レベルのリングしか使っておらず、ハードウェアの提供するCPUモードの一部しか使用していないことが多い。例えば Windows XP およびそれ以降のOSは2つのリングしか使っていない。カーネルモードに対応するリング0とユーザーモードに対応するリング3である[3]。 多くの最近のCPUアーキテクチャ(インテルx86アーキテクチャなど)は何らかのリングプロテクション機構を持っている。しかし、Windows NT 系OSもUnix系OSもそれを完全には利用していない。OS/2では3つのリングを使っていた[4]。リング0はカーネルとデバイスドライバ、リング2は特権コード(I/Oアクセス特権を持ったユーザープログラム)、リング3は特権のないコード(ほぼ全てのユーザープログラム)となっていた。DOSでは、カーネルもドライバもアプリケーションもリング3で動作することが多く、EMM386などの386のメモリマネージャがリング0で動作していた。さらに、DR-DOSの EMM386 3.xx はオプションで一部モジュール(DPMS
実装
最近でもリングプロテクションに関して新たな動きがあった。XenのVMMソフトウェア、モノリシックカーネルとマイクロカーネルに関する議論、マイクロソフトのNGSCBイニシアティブによる「Ring-1」設計構造、Intel VT-x などのファームウェア組み込みのハイパーバイザなどである。
Multicsでは8レベルのリングを持っていたが、最近のシステムではもっと少ない。ハードウェアは現在走行中のスレッドが実行している命令列のリングレベルを特別なレジスタで監視している。システムによっては、仮想空間の一部領域とリング番号割り当てがハードウェアで連動している。例えば、データゼネラルの Eclipse MV/8000 では、プログラムカウンタ (PC) の最上位3ビットがリングレジスタを兼ねている。