VM_MAP_WIRE(9) | FreeBSD Kernel Developer's Manual | VM_MAP_WIRE(9) |
名称
vm_map_wire, vm_map_unwire — 仮想メモリマップ中でページ接続を管理する書式
#include < sys/param.h>#include < vm/vm.h>
#include < vm/vm_map.h>
int
vm_map_wire( vm_map_t map, vm_offset_t start, vm_offset_t end, int flags);
int
vm_map_unwire( vm_map_t map, vm_offset_t start, vm_offset_t end, int flags);
解説
vm_map_wire() 関数はマップ map 中で start と end の間の範囲でワイヤ (wiring) ページに責任を負います。ワイヤページは、物理メモリにロックされ、それらのワイヤカウントが 0 より上である限り、ページアウトされません。vm_map_unwire() 関数は対応するワイヤ解除操作を実行します。
flags 引数はビットマスクで、次のフラグから成ります:
VM_MAP_WIRE_USER フラグが設定されるなら、関数はユーザアドレス空間の中で動作します。
VM_MAP_WIRE_HOLESOK フラグが設定されるなら、 map のアドレス空間の中の任意の範囲で動作します。
連続した範囲が望まれるなら、呼び出し側は、 VM_MAP_WIRE_NOHOLES フラグを指定することによって、それらの目的を明らかに伝達するべきです。
実装に関する注
両方の関数は、 vm_map_lock(9) を使用してマップ上のロックを獲得することを試み、呼び出しの存続期間それを保持します。 MAP_ENTRY_IN_TRANSITION を検出するなら、それらは、マップが再び利用可能になるまで、 vm_map_unlock_and_wait(9) を呼び出します。マップは、別の消費者によって保持されているように、このウィンドウの間に変化するかもしれません、したがって、このインタフェースの消費者は下記の返り値を使用して、この状態をチェックするべきです。
戻り値
vm_map_wire() と vm_map_unwire() 関数は、同じ返り値を持ちます。関数は、範囲中のすべてのページが成功してワイヤ (ワイヤ解除) されるなら、 KERN_SUCCESS を返します。そうでなければ、指定された範囲が有効でなかったか、または MAP_ENTRY_IN_TRANSITION フラグが設定される間にマップが変化したなら、 KERN_INVALID_ADDRESS が返されます。
作者
このマニュアルページは、 <bms@spc.org>によって書かれました。July 19, 2003 | FreeBSD |