ユーザーモードとカーネルモードの違いは何ですか? [コピー]

ユーザーモードとカーネルモードの違いは何ですか? [コピー]

ユーザースペースが何であるかを正確に知りたいです。私が尋ねた人はみんな「カーネルではなくすべて」と言いました。しかし、それは私には見えません。カーネルがユーザースペースまたはそのような場所でこのドライバを実行できることを読んだときに何が起こるのか想像できません。だから誰かがこれについて私を訂正したら、私は感謝します。

ベストアンサー1

概念的なレベルでは、カーネルはハードウェア保護の「より高い特権」レベルで実行されるすべてです。これはx86プロセッサのリング0、ARMのシステムモード、MIPSのカーネルモード、68xxxのハイパーバイザーモードなどです。カーネルは通常、ソフトウェア割り込み(システムコール)やハードウェア割り込み(ディスクドライブ、ネットワーク割り込みカード、ハードウェアタイマー)などの割り込み駆動方式です。

同じ概念レベルでは、「ユーザースペース」は最小特権モード(x86 CPUのリング3、ARM、MIPSのユーザーモードなど)で実行されます。ユーザーモードは、カーネルがマイナーなハードウェアの違いを軽減し、すべてのプログラムに同じAPIを提供する方法を利用します。例えば、いくつかの無線カードは、追加の制御レジスタを有しているか、他のカードよりも受信パケットのオンボードバッファが多いか少ないかもしれない。ドライバコードはこれらの違いを考慮し(時には高度な機能や珍しい機能を省略する)、すべてのプログラムに同じソケットAPIを提供します。

一部のプロセッサ(x86、VAX、Alpha AXPなど)には3つ以上のモードがありますが、一般的なUnixアーキテクチャは中間モードを使用しません。

Unix、Linux、または* BSDで実行されるプログラムとプロセスはユーザースペースです。プロセスはプリエンプティブなので、実際にカーネルが実行されているのを見ることはできず、read()システムコールのリターンやシグナルハンドラの機能の実行などの副作用のみを見ることができます。

特定の質問に答えるために、Unix、Linux、* BSDでは、「ドライバ」は通常、ネットワークカード、ディスクドライブ、グラフィックカードなど、一部のハードウェアの特定の機能を処理する小さなソフトウェアです。ドライバソフトウェアは、ハードウェア割り込みやハードウェアのマッピングされたメモリなどにアクセスできるように、ほぼ常にリング0/ハイパーバイザモード/カーネル空間で実行する必要があります。ドライバは、特定のハードウェア機能を担当し、そのハードウェアをハードウェアの動作に関するカーネルコードの標準化されたまたは既存の視点に合わせる役割を果たします。したがって、ユーザーモードでドライバを実行するには、カーネルがマップされたメモリ、デバイスレジスタ、割り込み、またはその他の特殊機能をユーザーモードプログラムに公開する必要があります。これは、ユーザープログラムに提供される一般的なUnixスタイルのAPIに簡単に適合しない特別な機能がデバイスに必要になる可能性があるため、難しい場合があります。さらに、ユーザー空間プログラムは通常割り込みにすばやく応答しないため、スケジューリングが問題になります。

おすすめ記事