マッピング操作は、ネイティブなアーキテクチャの相互接続 (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, /* システムは使用できる仮想アドレスを選択する */ RSM_MAP_FIXED = 0x1, /* セグメントを指定された仮想アドレスにマッピングする */ } rsm_map_attr_t;
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。
アドレスが無効です。
長さが無効です。
オフセットが無効です。
アクセス権がありません。
セグメントはすでにマッピングされています。
セグメントは接続されていません。
接続が中断されました。
マッピング中にエラーが発生しました。
アドレスがページ境界に整列されていません。
セグメントのマッピング解除
int rsm_memseg_import_unmap (rsm_memseg_import_handle_t im_memseg );この関数は、ユーザーの仮想アドレス空間からインポートされたセグメントをマッピング解除します。
戻り値:成功した場合、0 を返します。そうでない場合、エラー値を返します。
セグメントハンドルが無効です。