ハードウェアによる保護と言語による保護
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 14:38 UTC 版)
「カーネル」の記事における「ハードウェアによる保護と言語による保護」の解説
現代の一般的コンピュータは、ハードウェアが強制した規則を使ってプログラムのデータへのアクセスを許可している。プロセッサは動作を監視し、規則に違反したプログラムを停止させる(例えば、カーネル空間のメモリを読み書きしようとしたユーザプロセスを停止させるなど)。ケイパビリティをサポートしていないシステムでは、プロセスは相互に隔離されたアドレス空間で動作する。ユーザプロセスがカーネルを呼び出すことは、上述したシステムコールの技法を使って統制されている。 代替手法として言語ベースの保護(プロテクション)がある。言語ベースのプロテクションシステムでは、カーネルは信頼されている言語コンパイラが生成したコードのみ実行を許可する。そしてその言語は、セキュリティに違反するようなコードをプログラマが書けないように設計されている。 この方式には次のような長所がある。 アドレス空間を分離する必要がない。アドレス空間の切り替えは低速な操作であり、オーバーヘッドになっているため、現代のOSではその切り替えをなるべく減らすような最適化に多大な労力を費やしている。言語ベースのプロテクションシステムではそのような切り替えが全く不要であり、全コードを同一アドレス空間に置いても安全に運用可能である。 柔軟性がある。プログラミング言語でプロテクション機構を表現できるよう設計すれば、この方式ではそれらを実装することが可能である。言語ベースのプロテクションを実現するのにハードウェアを新たに設計する必要はない。 一方、次のような短所がある。 アプリケーションの起動に時間がかかる。アプリケーションを起動する際に正しいコンパイラで生成されたものか、あるいはソースコードやバイトコードから再コンパイルが必要でないかをチェックする必要がある。 型システムが固定される。従来のシステムでは、アプリケーションは型安全でない操作を頻繁に実行する。言語ベースのプロテクションシステムではそのような操作は許されないので、アプリケーションを書き換える必要があり、場合によっては性能が低下することになる。 言語ベースのプロテクションを採用したシステムとしては、JXやマイクロソフトのSingularityがある。
※この「ハードウェアによる保護と言語による保護」の解説は、「カーネル」の解説の一部です。
「ハードウェアによる保護と言語による保護」を含む「カーネル」の記事については、「カーネル」の概要を参照ください。
- ハードウェアによる保護と言語による保護のページへのリンク