web-dev-qa-db-ja.com

CPU特権リング:なぜリング1と2が使用されないのですか?

X86 CPU特権リングに関するいくつかの質問:

  • リング1と2がほとんどのオペレーティングシステムで使用されないのはなぜですか?他のアーキテクチャとのコード互換性を維持するためだけですか、それとももっと良い理由がありますか?

  • これらのリングを実際に使用するオペレーティングシステムはありますか?それとも完全に未使用ですか?

84
Mehrdad

趣味のオペレーティングシステムライターとして、ページング(現代の保護モデルの大部分)は特権(リング0、1、2)と非特権の概念しか持っていないため、リング1と2のメリットは大幅に減少することがわかりました。

リング1とリング2を持つというIntelの意図は、OSがデバイスドライバーをそのレベルに配置することであるため、それらは特権がありますが、カーネルコードの他の部分からいくらか分離されています。

リング1と2は、ある意味で「ほとんど」特権があります。スーパーバイザページにアクセスできますが、特権命令を使用しようとしても、リング3のようにGPFのままです。 Intelが計画したように、それはドライバーにとって悪い場所ではありません...

とは言っても、いくつかのデザインでは間違いなく使用できます。実際、常にOSから直接ではありません。たとえば、 VirtualBox 、a Virtual Machine は、ゲストカーネルコードをリング1に配置します。また、一部のオペレーティングシステムがそれらを使用していると確信しています。現時点では人気のあるデザインだと思います。

87
Evan Teran

OS設計の観点から見ると、複数の特権リングを持つことはx86の奇妙なことです。他のほとんどのCPUには2つのモード(スーパーバイザーとユーザー)しかありません。そのため、すぐに他のCPUに移植されることを防ぐことができます複数の特権モードを必要とするOSを設計します。さらに、最新の仮想化パッケージの多くは、0および3以外の特権レベルを正しくエミュレートしないため、これらのレベルを使用するOSのテストははるかに困難になります。

18
duskwuff

ウィキペディア( http://en.m.wikipedia.org/wiki/Ring_(computer_security) )によると、ドライバー1(リング1)、ゲストOS(リング1 )、およびI/O特権コード(リング2)、ハイパーバイザーは、前述のように1ではなく-1/0(ハイパーバイザーに依存)にあります。

ただし、余分な2つのリングは実際には役に立たなかったため、ほとんど使用されませんでした。 TBH、リング1および2を使用するほとんどのコードは、元の使用(ハイパーバイザーなど)から半再利用されています。最近のほとんどのWindowsコードは、おそらくカーネルランドへの出入りに関連するオーバーヘッドのために、システムを2つのレベル(カーネルとユーザー)のみを持つものとして扱っているようです。

5
Necrolis