Selreg カーネル・サービス

目的

非同期ポーリングまたは選択要求をカーネルに登録します。

構文

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/poll.h>
int selreg ( corl,  dev_id,  unique_id,  reqevents,  notify)
int corl;
int dev_id;
int unique_id;
ushort reqevents;
void (*notify) ( );

パラメーター

項目 説明
コルル ポーリング要求または選択要求の相関関係子。 コルル パラメーターは、特定の選択制御ブロックに戻されたイベントをプロセスのファイル記述子またはメッセージ・キューと相関させるために、 投票 および 選択 サブルーチンによって使用されます。
デバイス ID 1 次リソース識別値。 デバイス ID パラメーターは、 固有 ID パラメーターとともに、要求されたポーリング・イベントまたは選択イベントが発生することが予期されるリソースを選択制御ブロックに記録するために使用されます。
unique_id 固有のリソース識別値。 固有 ID パラメーターは、 デバイス ID パラメーターとともに、要求されたイベントが発生することが予期されるリソースを示します。 多重化されたデバイス・ドライバーの場合、このパラメーターは、要求されたイベントが発生することが予期されるチャネルの数を指定します。 非多重化デバイス・ドライバーの場合、このパラメーターは 0 に設定する必要があります。
要求イベント 要求されたイベント・パラメーター。 要求イベント パラメーターは、通知が要求されているイベントを示すビット・フラグのセットで構成されます。 これらのフラグの定義は、オブジェクトの select サブルーチンに対する満たされていない呼び出しで events パラメーターによって提供されるイベント・フラグと同じです (定義については、 sys/poll.h ファイルを参照してください)。
注: このパラメーターには POLLSYNC (同期) ビット・フラグを設定しないでください。
notify 通知ルーチンのエントリー・ポイント。 このパラメーターは、ネストされたポーリングおよび選択呼び出しに使用される通知ルーチンを指します。

説明

セルレグ カーネル・サービスは、カーネルの上半分の 選択 ファイル操作によって、満たされていない非同期ポーリングまたは選択イベント要求をカーネルに登録するために使用されます。 この登録により、後でカーネルの下半分のリソースから 自己通知 カーネル・サービスを呼び出して、それらのリソース上のイベントを待機しているプロセスを正しく識別することができます。

イベント要求は、 投票 または 選択 サブルーチンへの呼び出し、プロセスからの呼び出し、または Fp_poll または Fp_SELECT カーネル・サービスへの呼び出しから発生する場合があります。 選択 ファイル操作は、以下の状況で セルレグ カーネル・サービスを呼び出します。

  • ポーリング要求または選択要求は非同期です (要求されたイベントのビット・フラグに対して POLLSYNC (同期) フラグが設定されていません)。
  • ポーリング要求または選択要求は、(基礎となるリソースの ddselect エントリー・ポイントを呼び出すことによって) 要求されたイベントがまだ発生していないことを判別します。

登録済みイベント要求は、選択制御ブロックの形式になります。 選択制御ブロックは、以下を含む構造体です。

  • 要求されたイベント・ビット・フラグ
  • 戻りイベント・ビット・フラグ
  • 1 次リソース ID
  • 固有リソース ID
  • PROC テーブル・エントリーへのポインター
  • ファイル記述子相関関係子
  • 投票 および 選択 サブルーチンへのネストされた呼び出しの場合のみ、NULL 以外の通知ルーチンを指すポインター

セルレグ カーネル・サービスは、呼び出されるたびに選択制御ブロックを割り振り、初期化します。

選択 ファイル操作をサポートするリソースでイベントが発生すると、そのリソースは 自己通知 カーネル・サービスを呼び出します。 自己通知 カーネル・サービスは、1 次 ID と固有 ID がリソースの ID と一致し、要求されたイベント・フラグがリソース上で発生したイベントと一致するすべての選択制御ブロックを見つけます。 次に、一致する制御ブロックのそれぞれについて、 自己通知 カーネル・サービスは、制御ブロックの通知ルーチン・ポインターが非ヌル (ネストされている) かヌル (ネストされていない) かに応じて、以下の 2 つのアクションのいずれかを実行します。

  • 選択 または 投票 サブルーチンに対するネストされた呼び出しでは、通知ルーチンは、1 次および固有のリソース ID、戻されたイベント・ビット・フラグ、およびプロセス ID を使用して呼び出されます。
  • 選択 または 投票 サブルーチンへのネストなし呼び出し (通常のケース) では、ブロック内で識別されたプロセスの SSEL ビットがクリアされ、ブロック内で返されたイベント・ビット・フラグが更新され、プロセスがウェイクアップされます。 この方法でウェイクアップされたプロセスは、スリープしていた 投票 または 選択 呼び出しを完了します。 次に、 投票 または 選択 サブルーチンは、ユーザー・モード・プロセスに戻るために、戻されたイベント・ビット・フラグをプロセスの選択制御ブロックに収集し、制御ブロックを割り振り解除し、ユーザー・プロセスに発生した要求されたイベントの数を戻します。

実行環境

セルレグ カーネル・サービスは、 処理 環境からのみ呼び出すことができます。

戻り値

項目 説明
0 正常終了したことを示します。
EAGAIN セルレグ カーネル・サービスが選択制御ブロックを割り振ることができなかったことを示します。