保護(プロテクション)のサポート
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 14:38 UTC 版)
「カーネル」の記事における「保護(プロテクション)のサポート」の解説
カーネル設計において重要な観点として、障害(フォールトトレラント性)と悪意ある動作(セキュリティ)からの保護(プロテクション)サポートがある。この2つは通常明確には区別されず、明確に区別しようとするとリングプロテクションでは対応できなくなる。 カーネルが提供する機構または方針は、いくつかの基準で分類できる。 静的(コンパイル時に決定)か動的(実行時に決定)か プリエンプティブか事後検出か それらが満足する保護原理による分類(デニング) ハードウェアサポートによる保護か言語サポートによる保護か オープンな機構によるものか、方針と密に結合しているか などである。 階層型プロテクションは、一般に「CPUモード」でサポートされる。ハードウェアサポートによる単純で効率的な方法は、MMUにメモリアクセスの度にその妥当性をチェックさせるもので、その機構をケイパビリティベースドアドレッシング(英語版)と呼ぶ。ただし、多くの商用コンピュータアーキテクチャではMMUがケイパビリティをサポートしていない。 代替手法は、階層型プロテクションでケイパビリティをシミュレートするものである。この場合、保護されたオブジェクトはアプリケーションがアクセスできないアドレス空間になければならない。カーネルもそのようなメモリ空間のケイパビリティのリストを保持する。ケイパビリティによって保護されたオブジェクトにアプリケーションがアクセスしたい場合、システムコールを行い、カーネルが実際のアクセスを代行する。これにはアドレス空間の切り替えを必要とするため、オブジェクト間で複雑なやりとりが必要なシステムでは性能が低下するが、現代のOSはアクセス頻度が低いオブジェクトや性能を要求されないオブジェクトについてはこの方式を採用している。保護機構をより高い階層でシミュレートする方式も可能だが(例えば、直接サポートされていないハードウェアについてのページテーブルを操作してケイパビリティをシミュレートするなど)、性能上の問題がある。言語ベースの保護を選択するシステムでは、ハードウェアサポートがなくても問題にならない。 カーネル設計における重要な点として、セキュリティの機構と方針を実装する抽象化レベルの選択がある。カーネルのセキュリティ機構は、高度なセキュリティをサポートする上で重要である。 1つの方式として、ファームウェアとカーネルでフォールトトレラント性をサポートする方式があり、その上に悪意ある動作に対するセキュリティ方針を構築し(必要に応じて暗号機構を追加する)、一部の責任をコンパイラに委任する。コンパイラやアプリケーションレベルへのセキュリティ方針の責任委譲の方式を一般に「言語ベースのセキュリティ」と呼ぶ。 現代の主流のOSの多くは重要なセキュリティ機構が欠如しているため、アプリケーションの抽象化レベルでの適切なセキュリティ方針実装ができないことがある。一般にカーネルサポートがどうであれ、アプリケーションで任意のセキュリティ方針を実装可能だとされているが、間違いである。
※この「保護(プロテクション)のサポート」の解説は、「カーネル」の解説の一部です。
「保護(プロテクション)のサポート」を含む「カーネル」の記事については、「カーネル」の概要を参照ください。
- 保護のサポートのページへのリンク