uexadd カーネル・サービス用のユーザー・モード例外ハンドラー

目的

カーネル・スレッドがユーザー・モードで実行されているときに発生する例外を処理します。

構文

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/except.h>
int func (exp, type, tid, mst)
struct excepth * exp;
int  type;
tid_t  tid;
struct kmstsave * mst;

パラメーター

項目 説明
exp この例外ハンドラの登録に使われたexcepth構造体を指す。
MST プロセスの現在のkmstsave領域を指す。 このポインタを使用してkmstsave領域にアクセスし、例外に関する追加情報を得ることができる。
項目 説明
tid 例外発生時に実行されていたカーネル・スレッドのスレッド ID を示します。
type 発生した例外のタイプを示します。 このタイプ値はプラットフォーム固有です。 具体的な値は/usr/include/sys/except.hファイルで定義されている。

説明

ユーザーモード例外ハンドラ(超訳'ファンク )は、カーネルスレッドが 'ユーザーモード で実行中に検出された同期例外に対して呼び出される。 カーネル例外ハンドラは、構造体のkmstsave領域に例外情報を保存する。 ユーザーモード例外の場合は、ユーザー例外ハンドラーリストで最初に見つかった例外ハンドラーを呼び出す。 例外ハンドラは、INTPAGERまたはINTIODONEのいずれかの優先度で割り込み環境で実行される。

登録された例外ハンドラーが、例外が処理されたことを示す戻りコードを戻した場合、カーネルは、リストから追加の例外ハンドラーを呼び出さずに例外ハンドラーを終了します。 例外ハンドラーが、例外が処理されなかったことを示す戻りコードを戻した場合、カーネルはリスト上の次の例外ハンドラーを呼び出します。 リスト内の最後の例外ハンドラーは、デフォルトのハンドラーです。 これは通常、スレッドにシグナル通知します。

カーネル例外ハンドラーはページ不在であってはなりません。 また、例外処理アクティビティが例外を引き起こす可能性がある場合は、setjmpxカーネルサービスを使用して例外ハンドラを登録する必要がある。 これは特に、例外ハンドラーが入出力を処理している場合に重要です。 例外ハンドラが例外を処理しなかった場合、リターン・コードには、ユーザー・モード例外処理用のEXCEPT_NOT_HANDLED値が設定されるべきである。

実行環境

uexaddカーネルサービスのユーザーモード例外ハンドラは、INTPAGERまたはINTIODONE優先度で割り込み環境から呼び出される。

戻り値

項目 説明
例外処理 例外が正常に処理されたことを示します。
例外が処理されません 例外が処理されなかったことを示します。