CPUモード

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

CPUモードの記事では、コンピュータCPUのモードについて、特に、「特権モードと保護モード」などと呼ばれる機能に関係するモードについて説明する。

概要[編集]

コンピュータプロセッサアーキテクチャ)には、モードが無いものもあれば、様々なモードを持つものもある。モードの種類にも、例えばいわゆるバイエンディアンのプロセッサにおいて、どちらのエンディアンで動作するか、といったようなモードなど色々あるが、この記事では、システムの状態を変更したりなどといった「センシティブな命令」の実行が無制限に許される「特権モード」と、そのような命令が制限されており、実行しようとすると例外になる「保護モード」というモードについて説明する(PopekとGoldbergの仮想化要件なども参照のこと)。このようなモードは、CPUのような同一のプロセッサでオペレーティングシステムとユーザープロセスの両方を実行しつつ、論理的には分離するシステムにおいて、そのような分離をハードウェア側で支援するものあるいは実装したもの、と言える。

特権モード(他に「カーネルモード」「スーパーバイザーモード」等)では、全ての操作、すなわち、演算命令などだけではなく、任意の命令、たとえば入出力操作や、任意のメモリ空間へのアクセスが可能である。一方、保護モード(他に「ユーザーモード」等)では、入出力などは禁じられ、メモリ空間へのアクセスも許された空間のみに制限される。[1]

リングプロテクションの概念図

このようなモードを持つアーキテクチャのうち、以上の2つのみのモードを持つものも多いが、より多くの(あるいは、細かく分かれた)モードを持つものも多い。たとえば組込み用プロセッサでは、割込みハンドラ用などのモードを特に別に持つものがある。あるいはIA-32のように4階層の「リングプロテクション」を持つものや、より多い階層を持つものもある。階層化されたリングプロテクションは、例えばハイパーバイザの下でオペレーティングシステムを実行するためとか、デバイスドライバや、マイクロカーネルにおける「サーバ」を隔離するためなどに活用されることがある。

CPUモードとソフトウェアの関係[編集]

多くのCPUハードウェアアーキテクチャは、通常実行しているオペレーティングシステムが利用する以上の柔軟性を有している。複雑なCPUモードの適切な利用はCPUとオペレーティングシステムの密接な協力が必要であり、OSとCPUアーキテクチャを拘束する傾向がある。OSとCPUが相互に相手を意識して設計された場合、問題はない(それでもハードウェア機能の一部は使われないことがある)が、OSが複数の他のCPUでも動作することを考慮して設計された場合、OSはCPUモード機能の大部分を利用しなくなる。例えば、Windows NTは多くのアーキテクチャへの移植性を考慮して設計されたため、ユーザーモードとカーネルモードだけをサポートした。

Multicsは特定のCPUアーキテクチャ(Multicsのために設計された)を意識して設計されたオペレーティングシステムであり、そのCPUモード機能を全て使用した。しかし、これは例外である。今日、OSとハードウェアの密接な相互依存は、セキュリティと安定性という観点では効果があるものの、費用対効果が悪くなる。

CPUの動作モードを区別する最終的な目的は、ソフトウェアによるシステム環境の偶然または故意の破損(と関連するシステムセキュリティ違反)からハードウェアを守ることにある。信頼できるシステムソフトウェアだけが必要なときだけ無制限のカーネルモードで動作することを許される。他の全てのソフトウェアは1つかそれ以上のユーザーモードで実行される。プロセッサがユーザーモードでフォールトや例外を発生しても、多くの場合システムの安定性は影響されない。カーネルモードでフォールトや例外が発生すると、多くのオペレーティングシステムはシステムを停止させる(クラッシュ)。モードの階層があると(リングプロテクション)、ある特権レベルのフォールトや例外は上位特権レベルには影響しないが、下位レベルの方はその限りではない。従って、リング0(最高特権レベルのカーネルモード)でのフォールトはシステム全体のクラッシュを引き起こすが、リング2でのフォールトはリング2以下(リング3など)に影響を与える可能性がある。

走行中スレッドのCPUモードの変更は高い特権レベルから低い特権レベルの場合は自由に行えるが、低い方から高い方への変更はハードウェアが制御するセキュアな「ゲート」を特殊な命令を使って通過することでなされる(または割り込みを受け付けることでも高い特権レベルへのモード変更がなされる)。これがシステムコールである。

マイクロカーネル方式のオペレーティングシステムは特権モードで動作するコード量を最小化することを意図している。それによって性能が低下してもセキュリティは高まると言う人もいる。

[編集]

  1. ^ 実際にはしばしば、保護に「穴」があることがあるのだが(前述の「仮想化要件」を満たさない、と言う)ここではそういったことについては考えない。

関連項目[編集]