﻿
		IPRPC - Inter Process Remote Procedure Call


							　　2013.01.08   V.0.5.0
							　　2013.01.14   V.0.6.0
							　　2013.01.19   V.0.8.0
							　　2013.01.22   V.0.8.1
							　　2013.02.07   V.0.8.2
							　　2013.02.08   V.0.8.3
							　　2013.03.08   V.0.8.4
							　　2013.03.13   V.0.8.5
							　　2013.04.20   V.0.8.6

■　BUILD THE LIBRARY

　このライブラリを生成するには以下の手順で行う。

　　　$ ./configure prefix=/usr/local USE_HASH=YES OS_TYPE=LINUX
　　　　　　...
　　　$ make
　　　　　　...

　この時点で上記コマンドを実行したディレクトリにライブラリが生成される。ライブラ
リはstaticなものとsharedなもの両方が生成される。
　この後、インストールのために以下のコマンドを実行する。

　　　$ make install
　　　　　　...

　これで、configureコマンドで指定したディレクトリ（指定しなかった場合は通常/usr/
local/下）にライブラリがインストールされる。但し、installは一旦rootになって実行
した方がよいかもしれない。



■　CONFIGURATION

　このライブラリのコンフィグレーションとして、configureコマンド実行時に設定する
ものと、プログラムのヘッダファイルで設定するものの2種類ある。

　１：configure
　configureコマンドで設定するものとしては以下のものがある。但しconfigureで一般的
に設定する項目、たとえがCコンパイラの設定など、についてはここでは述べない。
なお下記記述で[]で示された値がデフォルトとなる。

　　　OS_TYPE：[LINUX]/...：システムのOSを設定する。
　　　USE_DOUBLE_COND：[YES]/NO：メッセージキューの制御のためにモニターの条件変数
　　　　　　を２つ（emptyとfull）使うかどうかのフラグ。使用する場合はYESを、使用
　　　　　　しない場合はNOを設定する。NOを設定した場合は、条件変数は１つでインス
　　　　　　トールされる。条件変数が１つの場合はメッセージキューの実行効率が落ち
　　　　　　るケースがある。
　　　USE_DOUBLE_TASK_CNTL：[YES]/NO：ランデブの送信側と受信側のタスクの制御のた
　　　　　　めにタスク制御用のアイテムを２つ（送信側制御用と受信側制御用）使うか
　　　　　　どうかのフラグ。使用する場合がYESを、使用しない場合はNOを設定する。
　　　　　　NOを設定した場合は、タスク制御用のアイテムは１つとなり、送信制御用と
　　　　　　受信制御用で共通で使用される。なおここでタスク制御用のアイテムは、
　　　　　　mutex/cond又はセマフォーを使って実装されている。１つしか使用しない場
　　　　　　合は、タスクの制御を確実に行う必要があるためタスクのスリープを入れて
　　　　　　おり、実行効率が落ちるので注意する。
　　　USE_CANCEL_TASK：YES/[NO]」スレッドのキャンセル機能（スレッドをexitやメイ
　　　　　　ンルーチンの終了以外で終了させる）を使用するかどうかのフラグ。
　　　　　　スレッドのキャンセル機能はダイナミックに割り当てられたリソースのリー
　　　　　　クや、初期化し忘れなどによるシステムのクラッシュが発生する可能性が高く
　　　　　　なるので使用しない方がよい。このシステムではスタブの関数呼出し時、
　　　　　　RENDEZVOUS実行時にはキャンセルができないように設定してある。
　　　　　　スケルトン実行タスク（スレッド）、スタブのコールバック実行タスクを
　　　　　　キャンセルしてはいけない。
　　　USE_SEMAPHORE：[YES]/NO：STUBおよびランデブの制御においてセマフォを使って
　　　　　　スレッドの動作制御をするかどうかのフラグ。使用する場合はYESを、使用し
　　　　　　ない場合はNOを設定する。セマフォーを使用しない場合は、MutexとCondでス
　　　　　　レッドの動作制御をする。
　　　USE_HASH：YES/[NO]：メッセージキューおよびランデブの検索にハッシュ関数を使
　　　　　　用するかどうかのフラグ。使用する場合はYESを、使用しない場合はNOを設定
　　　　　　する。
　　　CHECK_BYPTEORDER：YES/[NO]：マーシャリング時に数値のバイトオーダーをネット
　　　　　　ワークバイトオーダー（ビッグエンディアン）に変換するかどうかのフラグ。
　　　　　　ネットワークバイトオーダーに変換する場合はYESを、変換しない場合はNO
　　　　　　を設定する。
　　　　　　このライブラリをデバイス内でのRPCでしか使用しない場合はNOに設定する。
　　　USE_MULTICAST：YES/[NO]：マルチキャストIPRPCを使用するかどうかのフラグ。使
　　　　　　用する場合はYESを、使用しない場合はNOを設定する。
　　　USE_RENDEZVOUS：YES/[NO]：ランデブ機能をインストールするかどうかのフラグ。
　　　　　　インストールする場合はYESを、インストールしない場合はNOを設定する。
　　　DEBUG：YES/[NO]：デバッグフラグ。YESにするとコンパイル時に"-g"オプションが
　　　　　　付加される。またデバッグ用の各種テストルーチンもインストールされる。

　２：ipcConf.h
　プログラムのヘッダファイルで設定するものは以下のものがある。以下の設定情報はす
べてipcConf.hに定義されている。

/* ----- SHM ----- */
#define	IPC_MARSHAL_SHARED_MEM_NAME				"/IpcMarshal"
/* マーシャリングのための共有メモリ領域の名前 */
#define	IPC_DATABASE_SHARED_MEM_NAME				"/IpcDatabase"
/* データベースのための共有メモリ領域の名前 */
#define	IPC_MSG_QUE_SHARED_MEM_NAME				"/IpcMsgQue"
/* メッセージキューのための共有メモリ領域の名前 */

#define	IPC_MARSHAL_SHARED_MEM_REAL_SIZE			(1024*1024)	/* 1MB  FOR EXT DATA */
/* マーシャリングのための共有メモリ領域のサイズ */
#define	IPC_DATABASE_SHARED_REAL_MEM_SIZE			(1024*100)	/* 100KB FOR DATABASE */
/* データベースのための共有メモリ猟奇のサイズ */
#define	IPC_MSG_QUE_SHARED_REAL_MEM_SIZE			(1024*100)	/* 100KB FOR MSG QUE */
/* メッセージキューのための共有メモリ領域のサイズ */

#define	IPC_SHM_MIN_FREE_SIZE					64	/* MIN FREE SIZE */
/* 共有メモリ領域でアロケーションする最小単位 */
#define	IPC_DEVIDE_MAX_ALLOC_SIZE				4
/* 共有メモリ領域でアロケーションできる最大のサイズ、共有メモリ領域からこの値で割った値が最大値 */

#define	IPC_MSG_QUE_SHARED_MEM_ADDR				0xB8000000
/* メッセージキューのための共有メモリ領域のアドレス */
#define	IPC_DATABASE_SHARED_MEM_ADDR				0xB8100000
/* データベースのための共有メモリ領域のアドレス */
#define	IPC_MARSHAL_SHARED_MEM_ADDR				0xB8200000
/* マーシャリングのための共有メモリ領域のアドレス */


/* ----- QUE ----- */
#define	IPC_MSG_QUE_MAX_QUE_SIZE				256
/* メッセージキューのキューの最大値 */
#define	IPC_MSG_QUE_DEFAULT_TIMEOUT				10*1000	/* msec */
/* メッセージキューのデフォルトのタイムアウト値 */

#define	IPC_SHM_MSG_QUE_MEM_SIZE				IPC_MSG_QUE_SHARED_REAL_MEM_SIZE
#define	IPC_SHM_MSG_QUE_NUM_OF_DEV				1
/* メッセージキューのための共有メモリの分割管理数 */
#define	IPC_SHM_MSG_QUE_MIN_SIZE				64	/* DUMMY */
#define	IPC_SHM_MSG_QUE_RATE_OF_MAGNIFY				2	/* DUMMY */

#ifdef	USE_HASH_IN_IPC
#define	IPC_USE_HASH_FUNC_FOR_MSG_QUE

#define	IPC_GLOBAL_MSG_QUE_HASH_TABLE				256
/* 共有メモリ上でのメッセージキューで使用するハッシュ用のテーブルのサイズ */
#define	IPC_LOCAL_MSG_QUE_HASH_TABLE				25
/* ローカルメモリ上でのメッセージキューで使用するハッシュ用テーブルのサイズ */
#endif	/* USE_HASH_IN_IPC */


/* ----- SHM DB ----- */
#define	IPC_SHM_DATABASE_MEM_SIZE				IPC_DATABASE_SHARED_REAL_MEM_SIZE
#define	IPC_SHM_DATABASE_NUM_OF_DEV				1
/* データベースのための共有メモリの分割管理数 */
#define	IPC_SHM_DATAABSE_MIN_SIZE				64	/* DUMMY */
#define	IPC_SHM_DATABASE_RATE_OF_MAGNIFY			2	/* DUMMY */

#define	IPC_HASH_RAND_NUM_SIZE_OF_TBL_NUM			4
/* ハッシュ値計算用の乱数表の数 */
#define	IPC_HASH_RAND_NUM_SIZE_OF_TABLE				256
/* ハッシュ値計算用の１つの乱数表のサイズ */

#define	IPC_SHM_DATABASE_FUNC_DB_HASH_TABLE			512
/* データベースのためのハッシュテーブルのサイズ */


/* ----- MARSHAL ----- */
#define	IPC_MARSHAL_DATA_SHARED_MEM_NAME			IPC_MARSHAL_SHARED_MEM_NAME
#define	IPC_SHM_MARSHAL_NUM_OF_DEV				6
/* マーシャリングのための共有メモリの分割管理数 */
#define	IPC_SHM_MARSHAL_MIN_SIZE				64
/* マーシャリングのための共有メモリの最小分割管理のサイズ */
#define	IPC_SHM_MARSHAL_RATE_OF_MAGNIFY				2
/* マーシャリングのための共有メモリの分割管理サイズの逓倍数 */


/* ----- SKELTON ----- */
#define	IPC_SKELTON_MANAGE_QUE_SIZE				32
/* スケルトン管理用メッセージキューのサイズ */
#define	IPC_SKELTON_MANAGE_TASK_SCHED_POLICY			SCHED_FIFO
/* スケルトン管理用タスク（スレッド）のスケジュールポリシー */
#define	IPC_SKELTON_MANAGE_TASK_PRIORITY			RPC_SCHED_PRIO_MID_H
/* スケルトン管理用タスク（スレッド）のプライオリティ */
#define	IPC_SKELTON_MANAGE_TASK_DETACH_STATE			PTHREAD_CREATE_DETACHED
/* スケルトン管理用タスク（スレッド）のデタッチステート */
#define	IPC_SKELTON_MANAGE_TASK_STACK_SIZE			(64 * 1024)
/* スケルトン管理用タスク（スレッド）のスタックサイズ */

#define	IPC_SKELTON_START_NUM_OF_TASK_RESOURCE			5
/* スケルトン実行用タスク（スレッド）の初期化時の数 */
#define	IPC_SKELTON_START_NUM_OF_QUE_RESOURCE			IPC_SKELTON_NUM_OF_TASK_RESOURCE
/* スケルトン実行用メッセージキューの初期化時の数 */
#define	IPC_SKELTON_QUE_SIZE					16
/* スケルトン実行用メッセージキューの数 */
#define	IPC_SKELTON_TASK_SCHED_POLICY				SCHED_FIFO
/* スケルトン実行用タスク（スレッド）のスケジュールポリシー */
#define	IPC_SKELTON_TASK_PRIORITY				IPC_SCHED_PRIO_LOW_L
/* スケルトン実行用タスク（スレッド）のプライオリティ */
#define	IPC_SKELTON_TASK_DETACH_STATE				PTHREAD_CREATE_DETACHED
/* スケルトン実行用タスク（スレッド）のデタッチステート */
#define	IPC_SKELTON_TASK_STACK_SIZE				(1024 * 1024)
/* スケルトン実行用タスク（スレッド）のスタックサイズ */

#define	IPC_SKELTON_MAX_NUM_OF_TASK_RESOURCE			20
/* スケルトン実行用タスク（スレッド）の最大数 */
#define	IPC_SKELTON_MAX_NUM_OF_QUE_RESOURCE			IPC_SKELTON_MAX_NUM_OF_TASK_RESOURCE
/* スケルトン実行用メッセージキューの最大数 */


/* ----- STUB ----- */
#define	IPC_STUB_START_NUM_OF_CB_TASK_RESOURCE			3
/* コールバック実行用タスクの初期化時の数 */
#define	IPC_STUB_CB_TASK_SCHED_POLICY				SCHED_FIFO
/* コールバック実行用タスク（スレッド）のスケジュールポリシー */
#define	IPC_STUB_CB_TASK_PRIORITY				RPC_SCHED_PRIO_MID_M
/* コールバック実行用タスク（スレッド）のプライオリティ */
#define	IPC_STUB_CB_TASK_DETACH_STATE				PTHREAD_CREATE_DETACHED
/* コールバック実行用タスク（スレッド）のデタッチステート */
#define	IPC_STUB_CB_TASK_STACK_SIZE				(64 * 1024)
/* コールバック実行用タスク（スレッド）のスタックサイズ */

#define	IPC_STUB_START_NUM_OF_QUE_RESOURCE			5
/* スタブ実行用メッセージキューの初期化時の数 */
#define	IPC_STUB_QUE_SIZE					16
/* スタブ実行用メッセージキューのサイズ */

#define	IPC_STUB_MAX_NUM_OF_CB_TASK_RESOURCE			10
/* コールバック実行用タスク（スレッド）の最大数 */
#define	IPC_STUB_MAX_NUM_OF_QUE_RESOURCE			20
/* スタブ実行用のメッセージキューの最大数 */

#define	IPC_STUB_DEFAULT_TIMEOUT				(30*1000)	/* msec */
/* スタブ実行時のデフォルトのタイムアウト */

#ifdef	USE_MULTICAST_RPC
#define	IPC_STUB_START_NUM_OF_MLTCST_RESOURCE			3
/* マルチキャスト実行のリソースの初期化時の数 */
#define	IPC_STUB_MAX_NUM_OF_MLTCST_RESOURCE			5
/* マルチキャスト実行のリソースの最大値 */
#endif	/* USE_MULTICAST_RPC */


/* ----- RENDEZVOUS ----- */
#ifdef	USE_RENDEZVOUS

#define	IPC_RENDEZV_DATA_SHARED_MEM_NAME			IPC_MSG_QUE_SHARED_MEM_NAME
/* ランデブのための共有メモリ領域の名前 */

#define	IPC_RENDEZV_DEFAULT_TIMEOUT				30*1000	/* msec */
/* ランデブのデフォルトのタイムアウト */

#define	IPC_RENDEZV_SLEEP_FOR_SWITCH_TASK			1	/* msec */
/* ランデブの動作切替のためのスリープ時間 */

#ifdef	USE_HASH_IN_IPC
#define	IPC_USE_HASH_FUNC_FOR_RENDEZV

#define	IPC_GLOBAL_RENDEZV_HASH_TABLE				256
/* 共有メモリ上でのランデブで使用するハッシュ用のテーブルのサイズ */
#define	IPC_LOCAL_RENDEZV_HASH_TABLE				256
/* ローカルメモリ上でのランデブで使用するハッシュ用のテーブルのサイズ */
#endif	/* USE_HASH_IN_IPC */
#endif	/* USE_RENDEZVOUS */


