[ 前のページ ] [ 次のページ ] [ 目次 ] [ DOC Home ]

18 共用メモリ・プログラミング・インタフェース

共用メモリ・グローバル・セクションは,共用コミュニティ内のすべてのインスタンスからアクセスできるメモリをマッピングします。 これらのオブジェクトは Galaxywide共用セクションとも呼びます。 このような各オブジェクトには名前,バージョン,保護属性があります。

18.1 共用メモリの使用

アプリケーション・プログラムは,Galaxywide共用セクションをマッピングすることで共用メモリにアクセスします。 プログラミング・モデルは標準のOpenVMS グローバル・セクションと同じです。つまり,共用メモリを使用する各インスタンスで, その共用メモリを作成,マッピング,アンマッピング, 削除します。共用メモリ・グローバル・セクションには次の属性があります。

プログラマの立場から見ると,共用メモリ・グローバル・セクションはメモリ常駐セクションによく似ています。 メモリ常駐セクションを作成するときに使用するシステム・ サービスと同じサービスを使用して, Galaxywide共用セクションを作成します。フラグSEC$M_SHMGSをセットすると, サービスは共用メモリ・グローバル・セクションに対して動作します。

メモリ常駐セクションと異なり,Galaxywideセクションに対して空間を割り当てるために, 予約メモリ・レジストリは使用されません。SYSMAN RESERVEコマンドは,ノード固有メモリにのみ影響します。通常のOpenVMS ページング操作のために共用メモリは使用されないので,共用メモリを予約する必要はありません。

Galaxywideセクションに対して共用ページ・テーブルを作成しなければならないかどうかを指定するためのユーザ・ インタフェースもありません。 その代わり,Galaxywideセクションに対する共用ページ・テーブルの作成は, セクション・サイズによって決定されます。OpenVMSバージョン7.2では, 共用ページ・テーブルは128ページ(1MB)以上のセクションに対して作成されます。Galaxywide 共用ページ・テーブルはすべてのGalaxyインスタンス間で共用されます。

18.2 システム・サービス

ここでは,共用メモリ・グローバル・セクションをサポートする新しいシステム・ サービスと,変更されたシステム・サービスについて説明します。

18.2.1 強化されたサービス

新しい共用メモリ・グローバル・セクション・フラグSEC$M_SHMGSを認識するように, 次のシステム・サービスが強化されました。

次のシステム・サービスは共用メモリを操作できるように強化されていますが, インタフェースは変更されていません。

18.2.2 新しいセクション・フラグSEC$M_READ_ONLY_SHPT

新しいセクション・フラグSEC$M_READ_ONLY_SHPTは,SYS$CREATE_GDZROとSYS$CRMPSC_GDZRO_64 サービスで認識されます。このビットがセットされている場合は, 読み込みアクセスだけが可能な共用ページ・テーブルをセクション用に作成することをシステムに要求します。 この機能は特に,メモリ常駐セクションやGalaxy 共用セクションが多くのプログラムで読み込まれるものの, 書き込むプログラムは1つしかない環境で役立ちます。

共用ページ・テーブル・セクションが割り当てられているGalaxy共用セクションまたはメモリ常駐セクションをマッピングする場合には, データにアクセスするために次のオプションを使用できます。

共用ページ・テーブル 読み込み専用 読み込みと書き込み
何も作成されない マップ要求にSEC$M_WRTフラグをセットしない。

プライベート・ページ・テーブルは,セクションをマッピングする共用ページ・ テーブル領域を指定した場合でも,常に使用される。

マップ要求にSEC$M_WRTフラグをセットする。

プライベート・ページ・テーブルは,セクションをマッピングする共用ページ・ テーブル領域を指定した場合でも,常に使用される。

書き込みアクセス マップ要求にSEC$M_ WRTフラグをセットしない。

プライベート・ページ・テーブルが使用されることを確認する。セクションをマッピングする共用ページ・ テーブル領域を指定しない。指定すると, エラー状態S$_IVSECFLGが返される。

マップ要求にSEC$M_WRT フラグをセットする。

セクションをマッピングする共用ページ・テーブル領域を指定した場合, マッピングのために共用ページ・テーブル・セクションが使用される。

読み込みアクセス マップ要求にSEC$M_WRT フラグをセットしない。セクションをマッピングする共用ページ・ テーブル領域を指定した場合,マッピングのために共用ページ・ テーブル・セクションが使用される。 マップ要求にSEC$M_WRT フラグをセットする。プライベート・ページ・テーブルが使用されることを確認する。 セクションをマッピングする共用ページ・テーブル領域を指定しない。 指定すると,エラー状態SS$_IVSECFLGが返される。


注意
Galaxy共用セクションの共用ページ・ テーブルもGalaxy共用セクションとして実装されます。このため, このセクションに接続されているすべてのOpenVMSインスタンスで読み込みアクセスが許可されるか, またはすべてのインスタンスで読み込みアクセスと書き込みアクセスが許可されます。 セクションを作成するために, 最初のインスタンスが要求するSEC$M_READ_ONLY_SHPTフラグの設定がすべてのインスタンスで使用されます。

SYS$CRMPSC_GDZRO_64サービスを使用すると,常にSEC$M_WRTフラグがセットされ, 書き込みのためにセクションをマッピングすることが示されます。 このサービスを使用して,読み込み専用アクセスのために共用ページ・ テーブルを使用するセクションを作成する場合は,プライベート・ページ・ テーブルを使用しなければならず,セクションをマッピングする共用テーブル領域を指定することはできません。


18.3 Galaxywideグローバル・セクション

Galaxy共用メモリにオブジェクトを作成するには,SHMEM特権が必要です。 既存のセクションにマッピングする権利は,通常のアクセス制御機能によって制御されます。 既存のセクションをマッピングするためにSHMEM は必要ありません。通常のメモリ常駐セクションを作成する場合は, VMS$MEM_RESIDENT_USER識別子が必要ですが,Galaxywideセクションの場合は必要ありません。

Galaxywideメモリ・セクションの作成とマッピングは,メモリ常駐セクションを作成する場合と同じサービスで実行されます。 現在,次のサービスがSEC$M_SHMGS フラグを認識します。


SYS$CREATE_GDZRO
SYS$CRMPSC_GDZRO_64
SYS$MGBLSC_64
SYS$DGBLSC

SYS$CREATE_GDZROとSYS$CRMPSC_GDZRO_64は新しい状態コードを返します。

SS$_INV_SHMEM 共用メモリが不正である。
SS$_INSFRPGS 空き共用ページまたはプライベート・ ページが不足している。
SS$_NOBREAK Galaxyロックが別のノードによって保有されており, 破棄されていない。
SS$_LOCK_TIMEOUT Galaxyロック・タイムアウトが発生した。

$ INSTALL LIST/GLOBALと$ SHOW MEMORYもGlaxywideセクションを認識します。

Galaxywideセクションはそれぞれ独自のネーム・スペースを使用します。 さまざまな所有者UICに対して,システム・グローバル・セクションとグループ・ グローバル・セクションを識別するために常に同じ名前を使用できるのと同様に,Galaxywide システム・グローバル・セクションとGalaxywide グループ・グローバル・セクションで同じ名前を使用できます。

Galaxywideセクションにはそれぞれ,セキュリティ・クラスが割り当てられます。


GLXSYS_GLOBAL_SECTION
GLXGRP_GLOBAL_SECTION

これらのセキュリティ・クラスは$GET_SECURITY,$SET_SECURITYシステム・ サービス,SET/SHOW SECURITY DCLコマンドで使用されます。

これらの新しいセキュリティ・クラスはGalaxy環境でのみ有効です。 Galaxy以外のノードでは認識されません。

Galaxywideグローバル・セクションが共用インスタンスに存在する場合は, そのセキュリティ属性を検索し,影響を与えることだけが可能です。

次の例は,Galaxywideセクションの監査メッセージを示しています。

     %%%%%%%%%  OPCOM  20-MAR-1998 10:44:43.71  %%%%%%%% (from node GLX1 at 20-MAR-1998 10:44:43.85)
     Message from user AUDIT$SERVER on GLX1
     Security alarm (SECURITY) on GLX1, system id: 19955
     Auditable event:          Object creation
     Event information:        global section map request
     Event time:               20-MAR-1998 10:44:43.84
     PID:                      2040011A
     Process name:             ANDY
     Username:                 ANDY
     Process owner:            [ANDY]
     Terminal name:            RTA1:
     Image name:               MILKY$DKA100:[ANDY]SHM_MAP.EXE;1
     Object class name:        GLXGRP_GLOBAL_SECTION
     Object name:              [47]WAY____D99DDB03_0$MY_SECTION
     Secondary object name:    <Galaxywide global section>
     Access requested:         READ,WRITE
     Deaccess key:             8450C610
     Status:                   %SYSTEM-S-CREATED, file or section did not exist;
     has
     been created

"Object name"レコードに注意してください。ここに表示されているオブジェクト名は,OpenVMS Galaxy 内のセクションを一意に識別します。フィールドは次のとおりです。

[47] (グループ・グローバル・セクションの場合のみ) セクションの作成者のUICグループを識別する。
WAY____D99DDB03_0$ 共用コミュニティの識別子。
MY_SECTION ユーザが指定したセクションの名前。

ユーザはセキュリティ・プロファイルを設定または表示するために,要求に対してセクション名とクラスだけを指定できます。UIC は常に現在のプロセスから取得され, コミュニティ識別子はプロセスが実行されているコミュニティから取得されます。

Galaxywideシステム・グローバル・セクションの出力は,"Object class name"と"Objects name"フィールドでのみ異なります。このタイプのセクションのオブジェクト名には, グループ識別フィールドが含まれません。

オブジェクト・クラス名: GLXSYS_GLOBAL_ SECTION
オブジェクト名: WAY____D99DDB03_0$SYSTEM_SECTION


セキュリティに関する重要な注意事項

Galaxywideメモリ・セクションのセキュリティ属性は, それがどのインスタンスで実行されているかとは関係なく,プロセスにとって同一でなければなりません。

この条件は,この共用コミュニティに参加するすべてのインスタンスを, すべてのノードがセキュリティ関連ファイルを共用する「同種」OpenVMS Clusterに参加させることで実現できます。


SYSUAF.DAT, SYSUAFALT.DAT (システム登録ファイル)
RIGHTSLIST.DAT (ライト・データベース)
VMS$OBJECTS.DAT (オブジェクト・データベース)

特に,保護の変更をGalaxywideセクションに自動的に伝達するには,すべての共用インスタンスで同じ物理ファイル(VMS$OBJECTS.DAT) を使用することが必要です。

インストールしたシステムで,これらのファイルがGalaxy全体で共用されない場合は,Galaxywide 共用セクションの作成者は,セクションが各インスタンスで同じセキュリティ属性を持つようにしなければなりません。 このためには,手動の操作が必要です。



[ 前のページ ] [ 次のページ ] [ 目次 ] [ DOC Home ]