web-dev-qa-db-ja.com

「カーネルモード」と「ユーザーモード」のハードウェア機能またはソフトウェア機能ですか?

プロセスの実行を処理するために、「カーネルモード」と「ユーザーモード」という2つのモードがあることを読みました。 (Linuxカーネルを理解する、第3版。)それはLinuxによって制御されるハードウェアスイッチ(カーネル/ユーザー)ですか、それともLinuxカーネルによって提供されるソフトウェア機能ですか?

3
DScript

カーネルモードとユーザーモードはハードウェア機能、特にプロセッサの機能です。ミッドエンドからハイエンドのシステム(PC、フィーチャーフォン、スマートフォン、最も単純なネットワークアプライアンスを除くすべてなど)用に設計されたプロセッサには、この機能が含まれています。カーネルモードは、スーパーバイザーモード、特権モードなど、さまざまな名前で使用できます。x86(PCのプロセッサータイプ)では、「リング0」と呼ばれ、ユーザーモードは「リング3」と呼ばれます。

プロセッサは、カーネルモードかユーザーモードかを示すレジスタにビットストレージを持っています。 (これは、そのようなモードが3つ以上あるプロセッサでは1ビットを超える場合があります。)一部の操作は、カーネルモードでのみ実行できます。特に、 [ 〜#〜] mmu [〜#〜] 。さらに、ユーザーモードからカーネルモードに切り替える方法はごくわずかであり、それらはすべて、カーネルコードによって制御されるアドレスにジャンプする必要があります。これにより、カーネルモードで実行されているコードは、ユーザーモードで実行されているコードがアクセスできるメモリを制御できます。

Unixライクなオペレーティングシステム(およびプロセス分離を備えた他のほとんどのオペレーティングシステム)は、次の2つの部分に分かれています。

  • カーネルはカーネルモードで実行されます。カーネルはすべてを行うことができます。
  • プロセスはユーザーモードで実行されます。プロセスはハードウェアにアクセスできず、他のプロセスのメモリにもアクセスできません(明示的に共有されている場合を除く)。

したがって、オペレーティングシステムは、ハードウェア機能(特権モード、MMU)を利用して、プロセス間の分離を強制します。

Microkernel ベースのオペレーティングシステムは、カーネルモードで実行されるコードが少なく、よりきめ細かいアーキテクチャを備えています。

ユーザーモードコードが直接実行できないアクション(ファイルへのアクセス、周辺機器へのアクセス、別のプロセスとの通信など)を実行する必要がある場合、 システムコール :にジャンプします。カーネルコード内の事前定義された場所。

ハードウェア周辺機器がCPUに注意を要求する必要がある場合、CPUをカーネルモードに切り替え、カーネルコードの事前定義された場所にジャンプします。これは 割り込み と呼ばれます。

参考文献

「Linux」本体カーネルのみです。オペレーティングシステムとしての「Linux」について話すとき、それはカーネルとそれとともに配布されるすべてのotherソフトウェアの混同です。 Linuxディストリビューション

ユーザーモードとカーネルモードの切り替えは、 システムコール を実行すると発生します。これは、 手動セクション2 に記載されている関数のいずれかです。つまり、man 2 openのように言って結果を取得した場合、またはman creatのようにページタイトルに(2)サフィックスがある場合は、システムコールを確認しています。つまり、カーネルによって処理されます。

(ここでの違いは 手動セクション です。これは、システムの 標準Cライブラリ など、完全にユーザースペースに実装された関数用です。)

システムコールがそれを呼び出したユーザーコードに戻ると、そのプロセスはユーザーモードに戻ります。

Linuxカーネルは、ハードウェア機能を使用して、実行されるほとんどのプロセッサでカーネルモードとユーザーモードの区別を強制します。 Intel 保護リングスキーム はこれを行う1つの方法です。 µCLinux などの例外があります。これはMMUのない小さなプロセッサで実行され、保護リングがない場合もあります。非常に古いバージョンのUnixも、カーネル/ユーザー保護なしで実行されました。

「ユーザーモードコード」について話すときは、ほとんどすべてのプログラムにsomeが含まれますが、ほとんどの場合ユーザースペースで実行されるコードについて話します。システムコールが発生するため、常にカーネルモードで実行されるカーネルの待機に時間がかかります。

3
Warren Young