Linuxモジュール/ドライバーはカーネル空間に属しますか、それともユーザー空間に属しますか

Linuxモジュール/ドライバーはカーネル空間に属しますか、それともユーザー空間に属しますか

いくつかの記事では、モジュール/ドライバーはカーネルの形成に関与するためカーネル空間に属すると述べています。(参照:http://www.freesoftwaremagazine.com/articles/drivers_linux

一方、Ring0 (ハードウェアと直接やり取りする) のみがカーネル空間と呼べる (Ring2 にあるモジュール/ドライバーは除外) という意見もあります。(参照:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/

どちらの視点が正しいのか誰か教えてもらえますか?

答え1

AMD64 とそのクローン、および ix86 では、Linux はリング 0 と 3 のみを使用します。他の一般的なアーキテクチャには「リング」がないため、リングを完全に使用すると、移植性がまったくなくなります。さらに、Linux はモノリシックです。リングの全体的なアイデアは、リング 0 でマイクロカーネルを実行し、サービス プロセスをより高いリングで実行してマイクロカーネルを混乱させないようにし、最後に、ユーザー空間を最も高いリングで実行して、それほどダメージを与えないようにすることです。

答え2

参考資料を提供していただけますか? Linux についておっしゃっていると思いますが、Linux では (私の知る限り) リング 0 (カーネル) と 3 (ユーザー) のみが使用されます。

編集:

オペレーティング システムの設計によって異なると思います。たとえば、マイクロカーネル アーキテクチャでは、内部リングを使用する場合があります。特定のシステム (Linux など) についてお尋ねですか? この質問には、特定の OS についてのみ回答できると思います。ただし、ほとんどの場合、x86 ベースの OS では、「カーネル」(0) と「ユーザー」(3) のみが使用されます。

答え3

従来のオペレーティング システム (仮想化環境で実行されていない) の場合、カーネル空間と ring0 は権限の点では同義です。ただし、存在する違いと共通点を強調するために、これらを個別に説明する必要があります。

Kernel space- OS には通常、カーネル空間とユーザー空間の 2 つの実行モードがあります。カーネル空間は、スケジューラやデバイス ドライバーなどの OS の特権コードが存在する場所です。その役割は、システム全体を管理し、安定した動作を確保することです。ユーザー空間には、カーネル空間が提供する機能を使用する Web ブラウザーなどのプロセスが含まれます。

Rings- Intel プロセッサには、4 つの操作権限レベルがあります。これらはリングと呼ばれます。リング 0 は最も権限が高く、リング 3 は最も権限が低いです。コンピュータ メモリのどの領域も、これらのレベルでマークできます。メモリ領域がリング 0 によるアクセス用にマークされている場合、リング 0 にあるコードのみがアクセスでき、リング 3 によるアクセス用にマークされているメモリ領域はすべてのリングからアクセスできます。これにより、信頼性の低いコードを低い権限レベル (高いリング) で実行し、信頼性の高いコードを高い権限レベル (低いリング) で実行する場合、前者が後者に影響を与えることができないメカニズムが提供されます。どのコードをどのリング (権限レベル) で実行するかは、プログラムで設定できます。

設計を簡素化し、コードを移植可能にするため (ARM などの Intel 以外の CPU には 4 リング アーキテクチャがありません)、ほとんどの OS は 4 つのリングのうち 2 つだけを使用します。これらは通常、ring0 と ring3 です。カーネルは ring0 で実行され、カーネル空間を構成します (将来、OS 開発者がカーネルを ring0 ではなく ring1 で実行するようにした場合、ring1 がカーネル空間を構成することに注意してください)。アプリケーション プログラムは ring3 で実行され、ユーザー空間を構成します。

これはほとんどの OS が従う慣例です。ただし、私が OS 開発者であれば、リング アーキテクチャを自由に使用できます。次のシナリオを検討してください。
(KS=カーネル空間、私たち=ユーザースペース、DD=デバイスドライバまたはカーネルモジュール、処方箋= リングX)

  1. KSr0では、私たちr3 では最もよく使用されます。例: Linux、Windows など。
  2. KSr1では、私たちr3 - ハイパーバイザーが ring0 で実行される仮想化セットアップ。
  3. KSr0では、DDr1では、私たちr3 の場合 - 一部の研究プロジェクトでは、バグのあるデバイス ドライバーからカーネルを保護するためにこの構成を使用します。
  4. KSr0では、DDr3では、私たちr3 では、マイクロカーネルはこの構成を使用します。
  5. KSr0では、私たちr0 ではすべてが同じリング内にあります。Microsoft の Singularity などの一部の研究用 OS はこの構成を使用しています。KS は他のメカニズムを使用して US から保護されています。(MS DOS、Windows 98 などの古い OS はこれを使用しました。KS は US から保護されていなかったため、OS クラッシュが頻繁に発生しました。)
  6. KSr3では、私たちr0 の場合 - 不合理です。US にさらに権限を与えると、US が KS を破壊できるようになります。このような構成は見たことがありませんが、そのような OS を書きたい場合、それを止めるものは何もありません。

注: 執筆中に、x86 アーキテクチャを Intel CPU と呼ぶなど、いくつかの簡略化を行いました。今は複雑な点に悩まされる必要はありません。

関連情報