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

名称

vm_page_allocvm_object のためにページを割り付ける

書式

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

vm_page_t
vm_page_alloc( vm_object_t object, vm_pindex_t pindex, int req);

解説

vm_page_alloc() 関数は、 object の中の pindex に 1 つのページを割り付けます。 1 つページが既に pindex に割り付けられていないことを仮定します。返されたページは、 VM_ALLOC_NOOBJreq で指定されていないなら、オブジェクトに挿入されます。ページは、vm オブジェクトのキャッシュに存在し、その場合、キャッシュからオブジェクトページのリストに移動して、代わりに再起動されます。

vm_page_alloc() は、スリープしません。

その引数は、次の通りです:

object
ページを割り付ける VM オブジェクト。 object は、 VM_ALLOC_NOOBJ が指定されないなら、ロックされなければなりません。
pindex
ページが挿入されるべきであるオブジェクトのインデックス。
req
どのようにページが割り付けられるべきであるかを示すクラスのビット単位の包括的論理和 (OR) とオプションのフラグ。

正確に次のクラスの 1 つが指定されなければなりません:

VM_ALLOC_NORMAL
ページは、特別な処理なしで割り付けられるべきです。
VM_ALLOC_SYSTEM
キャッシュが空であるなら、ページを割り付けることができ、空きのページ数は、割り込み予約のウォータマーク (水位標) を超過します。システムが本当にページを必要とするときだけ、このフラグは、使用されるべきです。
VM_ALLOC_INTERRUPT
vm_page_alloc() は、割り込みの間、呼び出されています。空きページ数が 0 以上であるなら、成功してページが返されます。

オプションのフラグは、次の通りです:

VM_ALLOC_NOBUSY
返されたページは、排他的なビジーではありません。
VM_ALLOC_NODUMP
返されたページは、それが KVA にマップされてもされていなくても、あらゆるカーネルのコアダンプに含まれません。
VM_ALLOC_NOOBJ
割り付けられたページを、vm オブジェクトに関連付けません。 object 引数は、無視されます。
VM_ALLOC_IFCACHED
キャッシュされている場合にだけ、ページを割り付けます。そうでなければ、 NULL を返します。
VM_ALLOC_IFNOTCACHED
ページが object にキャッシュされないなら、単にページを割り付けます。指定された pindex のページがキャッシュされているなら、代わりに NULL を返します。
VM_ALLOC_SBUSY
返されたページは、共有されたビジーです。
VM_ALLOC_WIRED
返されたページは、ワイヤード (wired) されています。
VM_ALLOC_ZERO
前もって 0 クリアされたページを選択することを示します。返されたページが 0 クリアされている保証はありませんが、 0 クリアされているなら、 PG_ZERO フラグ設定があります。

戻り値

成功すれば、割り付けられた vm_page_t が返されます。そうでなければ、 NULL が返されます。

ページャのプロセスは、 VM_ALLOC_INTERRUPT が設定されない場合、常に VM_ALLOC_SYSTEM にアップグレードされます。

作者

このマニュアルページは、 Chad David <davidc@acns.ab.ca>によって書かれました。
January 28, 2012 FreeBSD