プロセスの実行を処理するには、「カーネルモード」と「ユーザーモード」という2つのモードがあることを読みました。 (Linuxカーネルについて学ぶ、第3版)これはLinux(カーネル/ユーザー)が制御するハードウェアスイッチですか、それともLinuxカーネルが提供するソフトウェア機能ですか?
答え1
カーネルモードとユーザーモードはハードウェア機能、特にプロセッサ機能です。中級および高度なシステム(PC、フィーチャーフォン、スマートフォン、最も単純なネットワークデバイスを除くすべてのデバイス)用に設計されたプロセッサには、この機能が含まれています。カーネルモードは、管理モード、特権モードなど、さまざまな名前を持つことができます。 x86(PCのプロセッサタイプ)では「リング0」と呼ばれ、ユーザーモードは「リング3」と呼ばれます。
プロセッサのレジスタは、カーネルモードかユーザモードかを示す記憶ビットを有する。 (これらのモードが2つ以上のプロセッサでは1ビット以上になることがあります。)特定の操作はカーネルモードでのみ実行できます。特に制御レジスタのレジスタを変更して仮想メモリ構成を変更します。メモリ管理ユニット。さらに、ユーザーモードからカーネルモードに切り替える方法はほとんどなく、すべてカーネルコードによって制御されるアドレスにジャンプする必要があります。これにより、カーネルモードで実行されるコードがユーザーモードで実行されているコードがアクセスできるメモリを制御できます。
Unixファミリーオペレーティングシステム(およびプロセス分離機能を備えた他のほとんどのオペレーティングシステム)は2つの部分に分けられます。
- カーネルはカーネルモードで実行されます。カーネルはすべてを行うことができます。
- プロセスはユーザーモードで実行されます。プロセスはハードウェアにアクセスできず、明示的に共有されていない限り、他のプロセスのメモリにアクセスすることはできません。
したがって、オペレーティングシステムはハードウェア機能(特権モード、MMU)を利用してプロセス間の分離を実行します。
マイクロカーネルオペレーティングシステムに基づくアーキテクチャは、カーネルモードで実行されるコードが少なく、さらに細分化されています。
ユーザーモードコードはシステムコール:カーネルコードから事前定義された位置にジャンプします。
ハードウェアペリフェラルがCPUの注意を要求する必要がある場合は、CPUをカーネルモードに切り替えて、カーネルコードから事前定義された場所にジャンプします。これは…邪魔する。
追加読書
答え2
「Linux」自体はいカーネルのみ。オペレーティングシステムとして「Linux」について話すとき、それはカーネルとすべてその他一緒に配布されるソフトウェアLinuxディストリビューション。
コマンドを生成すると、ユーザーモードとカーネルモードの切り替えが発生します。システムコール、これは次に文書化された関数です。マニュアルセクション2。つまり、そのようなことを言ってman 2 open
結果を得たり、ページタイトルにサフィックスが表示されればシステムコールをman creat
見(2)
ているのです。これはカーネルによって処理されるという意味です。
(ここでは違いはマニュアルセクション3、システムなど、ユーザー空間で完全に実装されている機能に使用されます。標準Cライブラリ.)
システムコールがそれを呼び出したユーザーコードに返されると、プロセスはユーザーモードで返されます。
Linuxカーネルは、ハードウェア機能を使用して実行されるほとんどのプロセッサでカーネルモードとユーザーモードを区別します。インテル保護環境計画これを行う1つの方法です。ただし、次の例外もあります。μCLinuxMMUを持たない小型プロセッサで動作している場合は、保護リングがない可能性があります。非常に古いUnixバージョンは、カーネル/ユーザー保護なしで実行できます。
「ユーザーモードコード」について話すとき、私たちは主にユーザースペースで実行されているコードについて話します。一部システムコールを実行するため、常にカーネルモードで実行されているカーネルを待つのに時間がかかります。