プログラミングインタフェース

セグメントのマッピング

マッピング操作は、ネイティブなアーキテクチャーの相互接続 (Dolphin-SCI や NewLink など) だけで利用できます。セグメントをマッピングすることによって CPU メモリー操作がそのセグメントにアクセスできるようになるので、メモリーアクセスプリミティブを呼び出すオーバーヘッドを省くことができます。

インポートされたセグメントのマッピング

int rsm_memseg_import_map(rsm_memseg_import_handle_t im_memseg, void **address, rsm_attribute_t attr, rsm_permission_t perm, off_t offset, size_t length);

この関数は、インポートされたセグメントを呼び出し元のアドレス空間にマッピングします。属性 RSM_MAP_FIXED が指定されている場合、この関数は **address に指定された値にあるセグメントをマッピングします。

typedef enum {
    RSM_MAP_NONE  = 0x0,    /* system will choose available virtual address */
    RSM_MAP_FIXED = 0x1,    /* map segment at specified virtual address */
} rsm_map_attr_t;

戻り値: 成功した場合、0 を返します。そうでない場合、エラー値を返します。

RSMERR_BAD_SEG_HNDL

セグメントハンドルが無効です

RSMERR_BAD_ADDR

アドレスが無効です

RSMERR_BAD_LENGTH

長さが無効です

RSMERR_BAD_OFFSET

オフセットが無効です

RSMERR_BAD_PERMS

アクセス権がありません

RSMERR_SEG_ALREADY_MAPPED

セグメントはすでにマッピングされています

RSMERR_SEG_NOT_CONNECTED

セグメントは接続されていません

RSMERR_CONN_ABORTED

接続が中断されました

RSMERR_MAP_FAILED

マッピング中にエラーが発生しました

RSMERR_BAD_MEM_ALIGNMENT

アドレスがページ境界に整列されていません

セグメントのマッピング解除

int rsm_memseg_import_unmap(rsm_memseg_import_handle_t im_memseg);

この関数は、ユーザーの仮想アドレス空間からインポートされたセグメントをマッピング解除します。

戻り値: 成功した場合、0 を返します。そうでない場合、エラー値を返します。

RSMERR_BAD_SEG_HNDL

セグメントハンドルが無効です