ユーザー空間からカーネル空間への切り替え

ユーザー空間からカーネル空間への切り替え

物理(ハードウェア、リング)、論理(ソフトウェア)、ユーザー空間からカーネル空間への変換は何ですか?その逆。

それとも、より一般的に「空間」(またはループ)遷移が発生した場合はどうなりますか?高価な理由は何ですか(Minixの主な問題の1つ)。

この質問は以下のコメントにあります。これ答え。

ベストアンサー1

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

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

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

ユーザーモードからカーネルモードに切り替えるには、カーネルが設定した固定アドレスにジャンプする必要があります。システムのセキュリティを維持するために、ユーザーモードのコードは、状況に関係なく安全に機能するように特別に設計されたコードスニペット(システムコールエントリポイント)を呼び出さない限り、プロセッサをカーネルモードに切り替えることはできません。ユーザーモードコードは常に実行されます。システムコールエントリポイントは、まずレジスタ値を指定されたメモリ領域に保存し、必要なその他の帳簿を実行してからシステムコールパラメータを読み取り、システムコールを適切な関数に渡します。プロセッサの種類によっては、帳簿に設定を含めることができます。メモリ管理ユニット適切に表面を処理します。カーネルはいつでも呼び出しプロセスを中断し、他のプロセスをスケジュールすることを決定できます。

カーネルモードからユーザモードへの移行は、カーネルが適切であると判断するどこでも起こり得る。カーネルは、保存されたレジスタ、MMU 構成、およびその他の必要なすべてを復元し、システムコールの戻り値を書き、最後にシステムコール後にプロセスのコマンドにジャンプします。

おすすめ記事