CPUモードについて
CPUモードは、
コンピュータのプロセッサが動作する際の様々な方式を指し、その目的は実行される操作の範囲を制限することにあります。この制限により、ハードウェアの安全性やシステムの安定性が保たれます。
モードの種類
一般的に、
CPUは複数の動作モードを持っており、その中の一つは無制限の操作を許可する「
カーネルモード」として知られています。このモードでは、
CPUはアーキテクチャの全ての命令を実行でき、入出力操作も自由に行えます。また、全てのメモリ空間にアクセスする能力も備えています。
対して、「ユーザーモード」では、特定の命令が制限され、入出力操作やメモリアクセスが制約されます。多くの場合、ユーザーモードは
カーネルモードの機能のサブセットですが、特定の状況下では、ごく異なる機能を持つこともあります。このように、動作モードは
CPUの機能を大きく制御する要素となっています。
特定の
CPUアーキテクチャは、異なる動作モードを持ち、特に「
リングプロテクション」という階層的な構造を有している場合があります。この概念では、
カーネルモードを中心に他のモードが同心円状に配置されます。この設計は、特にMulticsという
オペレーティングシステムで広く使われ、その後の様々なハードウェアプラットフォームにも影響を与えました。Intelの80286や
Itaniumなどもこの考えに基づいています。
リングプロテクションによって、異なる特権レベル間での役割分担が可能になり、
ハイパーバイザの周りで
オペレーティングシステムが実行されたり、
デバイスドライバやマイクロ
カーネルが特権レベルを隔離したりすることができます。
CPUモードとソフトウェアの関係
多くの
CPUアーキテクチャは、
オペレーティングシステムが直接利用する以上の柔軟性を備えています。しかし、これを適切に使用するには、
CPUとOSの緊密な連携が求められます。OSが複数の
CPUに対応できるように設計されると、
CPUモードの複雑な機能の多くが活かされなくなることがあります。例えば、Windows NTは、さまざまなアーキテクチャに柔軟に対応できるように設計され、ユーザーモードと
カーネルモードの二つだけをサポートしているのです。
逆に、特定の
CPU設計を意識した
オペレーティングシステム(例:Multics)は、そのすべての
CPUモード機能を活用しました。このような密接な相互依存は、セキュリティや安定性に寄与しますが、時にはコストがかかることともなります。
CPU動作モードを区別する目的は、ソフトウェアによるシステム環境の故意または偶発的な破損からハードウェアを保護することにあります。必要な場合にのみ、信頼できる
システムソフトウェアのみが
カーネルモードで動作することが許され、その他のソフトウェアはユーザーモードで実行されます。これにより、ユーザーモードで発生したエラーはシステム全体に影響を及ぼさない場合が多いですが、
カーネルモードでのフォールトは、システムがクラッシュする原因となることが多いのです。
スレッドのCPUモード変更
走行中のスレッドが
CPUモードを変更する際、特権レベルが高いものから低いものへの変更は自由に行えますが、逆に低い特権レベルから高い特権レベルへは、特別な命令や割り込み処理を介して行われる必要があります。この
プロセスは「
システムコール」と呼ばれ、重要な役割を果たします。
また、マイクロ
カーネルアーキテクチャを採用したOSは、特権モードで動作するコードの量を最小限に抑えることで、セキュリティを向上させることを目指します。この点では、性能が低下することがあるものの、セキュリティ強化の観点からは期待される効果が得られるといえるでしょう。