ユーザー空間からカーネル空間への移行

ユーザー空間からカーネル空間への移行

物理的に(ハードウェア、リング)そして論理的に(ソフトウェア)ユーザー空間からカーネル空間への移行とは何でしょうか?またその逆も同様です。

あるいは、もっと一般的には、「空間」(またはリング) 遷移が起こっているときに何が起きるのでしょうか? また、何がコストがかかるのでしょうか (Minix の主な問題の 1 つ)?

この質問は、以下のコメントに続きますこれ答え。

答え1

オペレーティングシステムの観点から見ると、ユーザー空間はプロセスからのコードの実行であり、カーネル空間はカーネルからのコードの実行です。ユーザー空間からカーネル空間への移行は、システムコールカーネル空間からユーザー空間への移行はシステムコールからの戻りです。

プロセッサの観点から見ると、ユーザー空間とカーネル空間は特権レベルです。「リング 3」と「リング 0」は、Intel x86 プロセッサで使用される名前です (リング 1 と 2 もありますが、あまり使用されないために、ほとんどの unice では使用されません)。他の CPU タイプでは、たとえば ARM のユーザー モードと特権 (またはシステム) モードなど、異なる名前が使用されます。

モード間の遷移は、プロセッサ モードを変更し、別のアドレスにジャンプする命令によって行われます。これらの命令の詳細は、CPU の種類によって大きく異なります。プロセッサ モードの切り替えと別のアドレスへのジャンプに加えて、モード遷移命令は通常、いくつかのレジスタの値のスワップなどの他のタスクも実行します (これも CPU によって大きく異なります)。

ユーザー モードからカーネル モードへの遷移は、カーネルによって設定された固定アドレスにジャンプする必要があります。システムのセキュリティを維持するために、ユーザー モードのコードは、ユーザー モード コードが何をしていたかに関係なく安全に動作するように特別に作成されたコード (システム コール エントリ ポイント) を呼び出す場合を除き、プロセッサをカーネル モードに切り替えることはできません。システム コール エントリ ポイントは、最初にレジスタ値を指定されたメモリ領域に保存し、その他の必要なブックキーピングを実行してから、システム コール パラメータを読み取り、システム コールを適切な関数にディスパッチします。プロセッサの種類によっては、ブックキーピングに次の設定が含まれる場合があります。MMUテーブルを適切に処理します。カーネルは、呼び出しプロセスを一時停止し、別のプロセスをスケジュールすることをいつでも決定できます。

カーネル モードからユーザー モードへの移行は、カーネルが適切と判断する任意の場所で発生する可能性があります。カーネルは、保存されたレジスタ、MMU 構成、その他必要なものをすべて復元し、システム コールの戻り値を書き込み、最後にシステム コール後のプロセス内の命令に戻ります。

関連情報