ukey_enable サブルーチン

目的

プロセスでユーザー・キーを使用可能にします。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <sys/ukeys.h>

int ukey_enable (void)

説明

ukey_enableサブルーチンは、ユーザー・キーのメモリー保護機能へのアクセスをプロセスに許可する。 プロセスは、他のユーザー・キー固有のAPIを試す前に、ukey_enableサブルーチンの呼び出しに成功し、ユーザー・キーを有効にしなければならない。 以下は、プロセスのユーザー・キーを使用可能にするために必要な条件です。
  1. 64 ビット・カーネルを使用して実行する。 ユーザー・キーは 32 ビット・カーネルではサポートされません。
  2. ストレージ・キーおよびユーザー・キーをサポートするハードウェアでの実行は、明示的に使用不可にされていません。 デフォルトでは、ユーザー・キーは、プラットフォームでサポートされている場合は有効になっています。 sysconf (_SC_AIX_UKEYS)サブルーチンは、利用可能なユーザー・キーの数を返す。
  3. マルチスレッドの場合、プロセスは 1: 1 モードなどのシステム・スコープで実行する必要があります。
  4. Load Levelerでディスパッチされたジョブでは、プロセスをチェックポイントできません。

ユーザー・キーが有効なプロセスのすべてのスレッドは、デフォルトのユーザー・キーであるUKEY_PUBLICに割り当てられたメモリ・ページへの読み取りと書き込みの両方のアクセスのみを許可するアクティブなユーザー・キー・セットで初期設定されます。 個々のスレッドは、ユーザー・キー API を呼び出してユーザー・キー・セットを構成し、アクティブにすることにより、アクティブ・ユーザー・キー・セットを変更することができます。

ユーザーキー入力可能プロセスのシグナルコンテキスト:

ユーザー・キー使用可能プロセスのデフォルトのシグナル・コンテキストは、今後受信されるすべてのシグナルに対して変更されます。 ucontext_t構造体は、中断されたスレッドのアクティブなユーザー・キー・セットを含むように拡張される。 これは、シグナル・ハンドラーに提供されます。

注: sigactionサブルーチンのドキュメントにあるように、シグナル・ハンドラはsigcontext_tへのポインタを取りますが、実際にスタック上に構築される構造体はucontext_t構造体であり、これはsigcontext_tのスーパーセットであり、その初期部分で一致します。 ucontext_tポインタでシグナルコンテキストを指すことで、シグナルハンドラは拡張データにアクセスできる。

以下のフィールドが設定されます。

ucontext_t.__extctx.__flags |= __EXTCTX_UKEYS 	 
ucontext_t.__extctx.__ukeys[2] = active user-key-set

ユーザー・キー拡張コンテキストは VMX コンテキストから独立しており、ユーザー・キー対応のすべてのプロセス用に作成されます。

さらに、ストレージキーの例外が発生した場合、拡張コンテキストでそれを示すために例外タイプフィールドが設定される:

ucontext_t.uc_mcontext.jmp_context.excp_type = EXCEPT_SKEY.

拡張コンテキスト情報の詳細レイアウトは、sys/context.h ヘッダ ー・ファイルを参照してください。

戻り値

成功すると、ukey_enableサブルーチンは利用可能なユーザーキーの数を返す。 そうでない場合は-1を返し、エラーを示すグローバル変数errnoをセットする。

エラー・コード

項目 説明
ENOSYS ユーザー・キーはサポートされていません。

関連情報

ukey_setjmpサブルーチン。

ukeyset_initサブルーチン。

ukeyset_add_key, ukeyset_remove_key, ukeyset_add_set, ukeyset_remove_setサブルーチン。

ukeyset_activateサブルーチン。

ukeyset_ismemberサブルーチン。

pthread_attr_getukeyset_np または pthread_attr_setukeyset_npサブルーチン。

AIX®ベクトル・プログラミング一般的なプログラミングの概念:プログラムの記述とデバッグ.