EN JA
VM_MAP_FIND(9)
VM_MAP_FIND(9) FreeBSD Kernel Developer's Manual VM_MAP_FIND(9)

名称

vm_map_findマップ内の空き領域を見つけ、オプションで vm_object マップする

書式

#include < sys/param.h>
#include < vm/vm.h>
#include < vm/vm_map.h>

int
vm_map_find( vm_map_t map, vm_object_t object, vm_ooffset_t offset, vm_offset_t *addr, vm_size_t length, vm_offset_t max_addr, int find_space, vm_prot_t prot, vm_prot_t max, int cow);

解説

vm_map_find() 関数は、与えられた length でターゲット map 中の空き領域を見つけることを試みます。空き領域が見つかるなら、 vm_map_find() は、 vm_map_insert(9) への呼び出しによって object のマッピングを作成します。

空き領域が見つけられる場合にだけ、マップを作成するときに、引数 offset, prot, max, と cow は、 vm_map_insert(9) に変更せずに渡されます。

objectNULL でないなら、オブジェクトおける参照カウントは、新しいエントリの原因となるこの関数が呼び出される前に、呼び出し側によって増加されなければなりません。

max_addr が 0 でないなら、それは、マッピングでの上限を指定します。完全に下記の max_addr に存在する、空き領域を見つけることができならいなら、マッピングは、単に成功します。

find_space 引数は、要求された長さの空き領域を検索するとき、使用する戦略を指定します。 VMFS_NO_SPACE 以外のすべての値について、 vm_map_findspace(9) は、開始アドレスで、または上記の *addr で、要求された長さの空き領域を位置付けるために呼び出されます。次の戦略がサポートされます:

VMFS_NO_SPACE
マッピングは、与えられたアドレス *addr で要求された長さの空き領域があるなら、単に成功します。
VMFS_ANY_SPACE
マッピングは、空き領域がある限り、成功します。
VMFS_SUPER_SPACE
マッピングは、スーパページ境界で始まる空き領域がある限り、成功します。 objectNULL でなく、既にスーパページによって裏打ちされているなら、マッピングは、スーパページ境界で始まるものではなく既存のスーパページに相対的に整列する空き領域を要求します。
VMFS_OPTIMAL_SPACE
マッピングは、空き領域がある限り、成功します。しかしながら、 objectNULL でなく、既にスーパページによって裏打ちされているなら、この戦略は、既存のスーパページに相対的な整列された空き領域を見つけることを試みます。
VMFS_ALIGNED_SPACE( n)
マッピングは、 2^ n 境界で整列される空き地域がある限り、成功します。

実装に関する注

この関数は、 vm_map_lock(9) の呼び出しによって map 上のロックを獲得して、関数が返るまで、それを保持します。

空き領域の検索は、アドレス addr から前方へ、最初の適合となるように定義されます。

戻り値

マッピングが成功して作成されたなら、 vm_map_find() 関数は、 KERN_SUCCESS を返します。空間が見つけることができなかったか、または find_spaceVMFS_NO_SPACE であり、与えられたアドレス addr が既にマップされているなら、 KERN_NO_SPACE が返されます。発見された範囲が結局にせあることが判明するなら、 KERN_INVALID_ADDRESS が返されます。

作者

このマニュアルページは、 Bruce M Simpson <bms@spc.org>によって書かれました。
September 12, 2013 FreeBSD