x86 CPU特権リングに関するいくつかの質問:
リング1と2がほとんどのオペレーティングシステムで使用されないのはなぜですか?それは他のアーキテクチャとのコードの互換性を維持するためだけですか、それとももっと良い理由がありますか?
これらのリングを実際に使用するオペレーティングシステムはありますか?それとも完全に未使用ですか?
x86 CPU特権リングに関するいくつかの質問:
リング1と2がほとんどのオペレーティングシステムで使用されないのはなぜですか?それは他のアーキテクチャとのコードの互換性を維持するためだけですか、それとももっと良い理由がありますか?
これらのリングを実際に使用するオペレーティングシステムはありますか?それとも完全に未使用ですか?
回答:
趣味のオペレーティングシステムライターとして、ページング(現代の保護モデルの主要部分)には特権(リング0、1、2)と非特権の概念しかないため、リング1と2のメリットが大幅に減少することに気付きました。
リング1と2を使用するというIntelの意図は、OSがそのレベルでデバイスドライバーを配置することです。そのため、これらのドライバーには特権がありますが、カーネルコードの他の部分とは多少異なります。
リング1と2は、ある意味で「ほぼ」特権が与えられています。スーパーバイザーページにアクセスできますが、特権命令を使用しようとした場合でも、リング3のようにGPFを使用できます。したがって、Intelが計画したように、ドライバーにとって悪い場所ではありません...
そうは言っても、それらは確かにいくつかのデザインで使用されています。実際、常にOSによって直接行われるわけではありません。たとえば、仮想マシンであるVirtualBoxは、ゲストカーネルコードをリング1に配置します。一部のオペレーティングシステムがそれらを使用していることも確かです。現時点では、これが人気のあるデザインであるとは思いません。
OS設計の観点から見ると、複数の特権リングを持つことはx86の奇妙な点です-他のほとんどのCPUには2つのモード(スーパーバイザーとユーザー)しかない。そのため、複数の特権モードを必要とするようにOSを設計すると、他のCPUへの移植がすぐに阻止されます。さらに、最新の仮想化パッケージの多くは0と3以外の特権レベルを正しくエミュレートしないため、これらのレベルを使用するOSのテストははるかに困難です。
ウィキペディアのRing Securityに関するページによると、リング1と2はドライバー(リング1)、ゲストオペレーティングシステム(リング1)、およびI / O特権コード(リング2)に使用され、ハイパーバイザーは-1/0に配置されます(ハイパーバイザー)私が以前言ったように1ではありません。
ただし、余分な2つのリングは実際には効果がなかったため、ほとんど使用されませんでした。TBH、リング1と2を使用するほとんどのコードは、これらを元の使用(ハイパーバイザーなど)から半再利用しました。最近のほとんどのWindowsコードは、システムを2つのレベル(カーネルとユーザー)しかないものとして扱っているようです。これは、おそらくカーネルランドへの出入りに関連するオーバーヘッドが原因です。
-
どこかを見逃したと思います。ハイパーバイザーはリング1を使用しますか?