最初に、FNC_Get_GLOP_Mapを呼び出してから、それ以外のGLOP関数(FNC_GLOP_Lock、FNC_GLOP_Unlock、FNC_GLOP_Map_Page、FNC_GLOP_Global_Copyなど)を呼び出す必要があります。また、FNC_Get_GLOP_Mapは、それ以外のGLOPルーチンを使用するテーブル関数の各段階の最初に呼び出して、その段階のメモリ ポインタを初期化する必要があります。
この呼び出しが完了した場合、構造体には、外部ルーチンが呼び出される特定のインスタンスに対して外部ルーチンがアクセスする、すべてのGLOPマップ済みデータのアドレスが入ります。GLOP_ptrがNULLの場合、その特定のGLOPデータのマッピングはありません。外部ルーチンは、エントリがセットアップされていると想定することができません。第一に、それがマップされることになっているかどうかを知る方法がありません。第二に、それ以降はマップされない可能性があります。外部ルーチンを動作させるためにマッピングが存在していると見なされているが実際には存在していない場合、外部ルーチンは例外と共に戻されるはずです。確認の方法としては、以下のように必ずマッピングを参照します。
#define SYSTEM_MAP 0 Sysinfo_t SysInfoPtr; GLOP_Map_t *MyGLOP; int glop_stat; . . . glop_stat = FNC_Get_GLOP_Map(&MyGLOP); if (glop_stat) ... process error: Not a member of any GLOP set if ( MyGLOP->GLOP[SYSTEM_MAP].GLOP_Ptr == NULL) { ... process error: System level map does not exist }; SysInfoPtr = MyGLOP->GLOP[SYSTEM_MAP].GLOP_ptr; . . .
以下に考慮すべきいくつかのルールを示します。
- ロール、ユーザー、または外部ルーチンGLOPデータを除く複数のマップ インデックスで、同じGLOPデータをマップできます。この方法では、同じ読み取り専用GLOPデータの異なるページを同時にマップできます。GLOP_Mapテーブルではこの方法でセットアップする必要があります。
- ページはマップ データに従ってマップされます。
- マップ データの初期ページ情報がNULLであり、ページが読み取り専用ページである場合、これは特定のvprocメモリ内にある、最も低い番号で現在マップされているページにマップします。マップされているページがない場合、ページ1がマップされます。
- 読み取り/書き込みGLOPまたはグローバルに変更可能なGLOPは、単一ページにすることしかできません。これは必ずページ1にマップします。
- 複数ページの読み取り専用GLOPデータは、異なる外部ルーチンに同時にマップされた異なるページを持つ場合があります。
- GLOPの特定ページのデータ行が存在しないが、それが範囲内である場合、外部ルーチンがそれをページインするときに、ゼロが埋め込まれたページがマップされます。
- 外部ルーチンは必ず、正しいページが確実に複数ページの読み取り専用GLOPデータにマップされていることを検査する必要があります。