この章の目次にもどる
前頁:1.3 プロセス/タスク間同期通信管理にもどる
次頁:1.5 メモリ管理にすすむ

1.4 グローバル名管理

1.4.1 グローバル名データ

グローバル名データ管理機能は、 プロセス間で共有的に使用されるデータを任意の名前により生成する機能、 および生成された名前によるデータの参照機能を提供している。 このように名前付けられて生成された共有データをグローバル名データと呼ぶ。

生成されるデータは 1 つの 32 ビットデータ ( W ) であり、 データに付けられる名前は最大 8 文字である。 名前としては通常、 文字コードとして意味のあるものが使用されるが特に制限はなく、 TNULL(0) までの最大 8 文字分 (16 バイト ) の任意のデータが名前とされる。

生成されたグローバル名データは、 すべてのプロセスから参照 / 変更可能である。

グローバル名データとしては、 生成 / 変更したプロセスの存在とは無関係に存在し続けるものと、 生成 / 変更したプロセスが終了した場合に自動的に削除されるものの 2 種類があり、 グローバル名データの生成/変更時に指定できる。 前者の場合はグローバル名データが不要となった時点で明示的に削除する必要がある。

この機能は、 主にある種のデータを不特定多数のプロセスから参照可能とするために使用され、 例えば、以下に示すようなデータを対応する固定的な名前により生成し、 参照することが考えられる。

グローバル名データの操作
図 5 : グローバル名データの操作

1.4.2 データ / 定数の定義

□ グローバル名管理

#define N_CREATE	0x0000		/* グローバル名データの新規生成 */
#define N_MODIFY	0x0001		/* グローバル名データの変更     */
#define N_FORCE		0x0002		/* グローバル名データの強制生成 */

1.4.3 システムコール

cre_nam
 
グローバル名データ生成

【形式】

WERR    cre_nam(TC* name, W data, W opt)

【パラメータ】

TC* name    対象グローバル名(先頭8文字(16バイト)までが有効)
W   data    登録するデータ
W   opt     グローバル名属性
            ( N_CREATE ‖ N_MODIFY ‖ N_FORCE ) | [ DELEXIT ]
N_CREATE :

指定した名前のグローバル名データが存在していない場合に生成する (すでに存在している場合はエラー)。

N_MODIFY :

指定した名前のグローバル名データが存在している場合にそのデータを変更する (存在していない場合はエラー)。

N_FORCE :

指定した名前のグローバル名データが存在していない場合は新規に生成し、 すでに存在している場合はそのデータを変更する。

DELEXIT :

生成したプロセス、 または最後にデータを変更したプロセスの終了時にグローバル名データを自動削除する。 既に他のプロセスから DELEXIT 指定が行なわれていた場合でも、 DELEXIT 指定により本システムコールを最後に実行したプロセスが対象となる。

【リターン値】

=0    正常
<0    エラー(エラーコード)

【解説】

name で指定した名前のグローバル名データを生成または変更する。

【エラーコード】

ER_ADR      : アドレス(name)のアクセスは許されていない。
ER_EXS      : 名前(name)は既に存在している(N_CREATEの時)。
ER_NOEXS    : 名前(name)は存在していない(N_MODIFYの時)。
ER_NOSPC    : システムのメモリ領域が不足した。
ER_PAR      : パラメータが不正である(optが不正,nameが空)。
del_nam
 
グローバル名データ削除

【形式】

ERR del_nam(TC* name)

【パラメータ】

TC* name    対象グローバル名(先頭8文字(16バイト)までが有効)

【リターン値】

=0    正常
<0    エラー(エラーコード)

【解説】

name で指定したグローバル名データを削除する。

【エラーコード】

ER_ADR      : アドレス(name)のアクセスは許されていない。
ER_NOEXS    : 名前(name)は存在していない。
ER_PAR      : パラメータが不正である(nameが空)。
get_nam
 
グローバル名データ取得

【形式】

ERR get_nam(TC* name, W* data)

【パラメータ】

TC* name    対象グローバル名(先頭8文字(16バイト)までが有効)
W*  data    取得データ格納領域

【リターン値】

=0   正常
<0   エラー(エラーコード)

【解説】

name で指定したグローバル名データを取得する。

【エラーコード】

ER_ADR      : アドレス(name,data)のアクセスは許されていない。
ER_NOEXS    : 名前(name)は存在していない。
ER_PAR      : パラメータが不正である(nameが空)。

この章の目次にもどる
前頁:1.3 プロセス/タスク間同期通信管理にもどる
次頁:1.5 メモリ管理にすすむ