カーネルモードからユーザーモードへの割り込み禁止

カーネルモードからユーザーモードへの割り込み禁止

RFE(Return with Exception)は、カーネルモードからユーザーモードに切り替えるのに役立つ特権コマンドであることを読みました。

特権命令であるため、実行中にソフトウェア割り込み(トラップ)が生成されます。

実行中にカーネルが中断されないように、他のすべての割り込みまたは割り込み許可フラグが実行中に無効になるかどうかを知りたいです。ソフトウェア割り込み中に割り込みが禁止されますか?

答え1

免責事項:私はMotorola 68000のOSレベルコードでのみ働きました。この答えは同様の2リングシステムの観点から書かれていますが、概念は現代のマルチリングシステムにうまく変換する必要があります。


ユーザーモードとシステムモードの2つの特権レベルを持つシステムでは、アプリケーションはユーザーモードで実行され、カーネルはシステムモードで実行されます。ユーザーモードアプリケーションが特権コマンドを実行しようとすると、カーネルが状況をどのように処理するかを決定できるようにトラップが発生します。

一方、カーネルには必要なコマンドを実行する権限が既にあるため、トラップは実行されません。

特に、MC680x0では、すべてのトラップハンドラがデフォルトで特権モードで実行されます。したがって、すべてのトラップハンドラは影響を受けず、別のトラップの作成を心配することなく「例外から戻る」を使用できます。ユーザーモードコードでは例外を返すことができないため、これらの命令を使用しないでください。

簡単に言えば、この問題は、「例外を返す」を使用してユーザーモードに切り替えたときにトラップが生成されないという誤った前提に由来します。

答え2

プロセッサモード間の切り替えがどのように機能するかは、プロセッサアーキテクチャによって異なります。ただし、必要に応じてカーネルモードからユーザーモードに切り替えるように指示することが予想されますが、RFEの性質は戻ってモードを変更するよりもジャンプしてモードを変更するのに近いです。これを「ソフトウェア割り込み」と考えることも割り込みハンドラを実行しないため、誤解を招くおそれがあります。

割り込みを禁止するかどうかを尋ねるのはコマンドなので、実際には意味がありません。カーネルがすでに実行を停止することにしたので、この時点の割り込みはカーネルを「中断」しません。ユーザーモードは割り込みを無効にしてはいけませんので、カーネルは常にユーザーモードに戻る前に割り込みを有効にします。これはサービス拒否になります。プロセッサがRFE命令を実行するために複数のサイクルを使用している場合、プロセッサはそのサイクルの一部の間に割り込みをチェックできませんが、これはソフトウェアが観察できないプロセッサアーキテクチャの詳細です(詳細なタイミング測定による場合を除く)。 。

関連情報