uexadd カーネル・サービス用のユーザー・モード例外ハンドラー
目的
カーネル・スレッドがユーザー・モードで実行されているときに発生する例外を処理します。
構文
パラメーター
| 項目 | 説明 |
|---|---|
| exp | この例外ハンドラの登録に使われたexcepth構造体を指す。 |
| MST | プロセスの現在のkmstsave領域を指す。 このポインタを使用してkmstsave領域にアクセスし、例外に関する追加情報を得ることができる。 |
| 項目 | 説明 |
|---|---|
| tid | 例外発生時に実行されていたカーネル・スレッドのスレッド ID を示します。 |
| type | 発生した例外のタイプを示します。 このタイプ値はプラットフォーム固有です。 具体的な値は/usr/include/sys/except.hファイルで定義されている。 |
説明
ユーザーモード例外ハンドラ(超訳'ファンク )は、カーネルスレッドが 'ユーザーモード で実行中に検出された同期例外に対して呼び出される。 カーネル例外ハンドラは、構造体のkmstsave領域に例外情報を保存する。 ユーザーモード例外の場合は、ユーザー例外ハンドラーリストで最初に見つかった例外ハンドラーを呼び出す。 例外ハンドラは、INTPAGERまたはINTIODONEのいずれかの優先度で割り込み環境で実行される。
登録された例外ハンドラーが、例外が処理されたことを示す戻りコードを戻した場合、カーネルは、リストから追加の例外ハンドラーを呼び出さずに例外ハンドラーを終了します。 例外ハンドラーが、例外が処理されなかったことを示す戻りコードを戻した場合、カーネルはリスト上の次の例外ハンドラーを呼び出します。 リスト内の最後の例外ハンドラーは、デフォルトのハンドラーです。 これは通常、スレッドにシグナル通知します。
カーネル例外ハンドラーはページ不在であってはなりません。 また、例外処理アクティビティが例外を引き起こす可能性がある場合は、setjmpxカーネルサービスを使用して例外ハンドラを登録する必要がある。 これは特に、例外ハンドラーが入出力を処理している場合に重要です。 例外ハンドラが例外を処理しなかった場合、リターン・コードには、ユーザー・モード例外処理用のEXCEPT_NOT_HANDLED値が設定されるべきである。
実行環境
uexaddカーネルサービスのユーザーモード例外ハンドラは、INTPAGERまたはINTIODONE優先度で割り込み環境から呼び出される。
戻り値
| 項目 | 説明 |
|---|---|
| 例外処理 | 例外が正常に処理されたことを示します。 |
| 例外が処理されません | 例外が処理されなかったことを示します。 |