スーパーバイザモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/16 14:00 UTC 版)
「PDP-10」の記事における「スーパーバイザモード」の解説
動作モードとしては、スーパーバイザモードとユーザーモードの2つがある。メモリ参照に上述の差異がある他に、スーパーバイザモードでは入出力操作が可能である。 ユーザーモードからスーパーバイザモードへの移行には、未実装ユーザー命令 (UUO) を使用して例外を発生させ、スーパーバイザがそれをトラップして処理を行うようになっていた。安価な機種でハードウェア実装を省略した場合も同様の機構でスーパーバイザによるエミュレーションを行っていた。
※この「スーパーバイザモード」の解説は、「PDP-10」の解説の一部です。
「スーパーバイザモード」を含む「PDP-10」の記事については、「PDP-10」の概要を参照ください。
スーパーバイザモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/19 15:36 UTC 版)
「リングプロテクション」の記事における「スーパーバイザモード」の解説
スーパーバイザモード (supervisor mode) という用語は、システムレベルのソフトウェアで動作するコードが変更できるハードウェアで実装されたフラグを意味する。システムレベルのタスクやスレッドが動作中はこのフラグがセットされており、ユーザ空間のアプリケーションが動作中はセットされていない。このフラグは、制御用のレジスタを書き換えたり、割り込みをマスクしたりといった特権命令を実行できるかどうかを決定する。2つの異なるモードを持たせるという考え方は「より多くの制御を得ると、より多くの責任も生じる」という考え方から来ている。特権命令を間違って使用するとシステム全体のクラッシュにつながる可能性があるので、スーパーバイザモードのプログラムは決して間違わないものとして信頼されている。 スーパーバイザモードは、「特権命令を含む全命令の実行を可能にする一部プロセッサが持つ実行モード。また、異なるアドレス空間へのアクセスを可能とされたり、メモリ管理ユニットや他の周辺機器へのアクセスも可能とされることもある。通常、オペレーティングシステムはこのモードで動作する。」と定義されている。 モノリシックカーネルのOSは、カーネルがスーパーバイザモードで動作し、アプリケーションがユーザーモードで動作する。マイクロカーネルなどでは、必ずしもこのような住み分けではない。 LinuxとWindowsはスーパーバイザモードとユーザーモードを使用している。ユーザーモードのコードが何らかの特別な機能を使いたい場合、システムコールによってスーパーバイザモードに移行し、カーネル空間にあるOSの信頼されているコードで処理を行い、結果をユーザ空間に返す。DOS(少なくともEMM386のような386のメモリマネージャをロードしていない場合)や他の単純なOSと同様、多くの組み込みシステムは常にスーパーバイザモードで動作しており、デバイスドライバとユーザプログラムのプログラミングに差がない。 多くのプロセッサは少なくとも2種類のモードを持つ。x86プロセッサは4つのモードを持ち4層のリングプロテクションになっている。リング0で動作するプログラムはあらゆることができ、リング3で動作するコードで障害が発生してもシステムの他の部分に影響を与えない。リング1とリング2は滅多に使われないが、それぞれ異なるアクセスレベルを構成できる。 ユーザーモードからカーネルモードへの切り替えは、多くのシステムで非常に高くつく。基本的なシステムコールであるgetpidを実測してみると、多くのマシンで1000から1500サイクルかかる。そのうち約100サイクルが実際のモード切替(ユーザからカーネル空間へは70サイクル、戻るのに40サイクル)で、残りはいわゆる「カーネルオーバーヘッド」である。L3 microkernel では、このオーバーヘッドを最小化しており、全体のコストは約150サイクルとなっている。 モーリス・ウィルクスは次のように記している。 … リングが提供する階層型プロテクションは、システムプログラマの要求とは正しくマッチしておらす、2つのモードだけを持つ単純なシステムにとってはほとんど全く改良にならなかったことが明らかとなった。リングプロテクションはハードウェアでの効率的実装に適していたが、それ以外に特に言うべきことはない。(中略)リングプロテクションが答えを提供しないことが明らかになった後でも、きめ細かいプロテクションという概念は魅力的だった。(中略)これはまた袋小路を裏付けた … 性能と決定性を向上させるため、一部システムはデバイスドライバ以外のアプリケーションのような機能をカーネルモードで提供している。例えば、セキュリティ関連機能(アクセス制御、ファイアウォールなど)やOSモニターなどがある。データベース管理システムをカーネルモードで実装してコンテキストスイッチを減らすという試みがなされた例もある。 また、逆方向の対処法もある。例えばLinuxカーネルは VDSO を使い、通常ならシステムコールで(リング間遷移を伴って)呼び出すような機能をプロセス側に持たせることができる。カーネルが提供する静的データを使い、リング間の遷移をすることなく軽量にシステムコールを実行できる。例えば gettimeofday はそのように提供できる。
※この「スーパーバイザモード」の解説は、「リングプロテクション」の解説の一部です。
「スーパーバイザモード」を含む「リングプロテクション」の記事については、「リングプロテクション」の概要を参照ください。
- スーパーバイザモードのページへのリンク