PBUF(9) | FreeBSD Kernel Developer's Manual | PBUF(9) |
名称
pbuf, getpbuf, trypbuf, relpbuf — 物理バッファを管理するための関数書式
#include < sys/param.h>#include < sys/systm.h>
#include < sys/bio.h>
#include < sys/buf.h>
struct buf *
getpbuf( int *pfreecnt);
struct buf *
trypbuf( int *pfreecnt);
void
relpbuf( struct buf *bp, int *pfreecnt);
解説
これらの関数は、物理バッファを割り付けて、解放するために使用されます。物理バッファはシステム起動で割り付けられ、主要なシステムバッファから別々のプールで維持されます。それらはバッファの主なプール (例えば、スワップページャ) に依存できないか、または依存すべきでないサブシステムによって使用を対象としています。システムは、システムのメモリの量により、 16 と 256 の間の物理バッファを割り付けます。
これらの呼び出しでバッファを割り付ける各サブシステムはそれ自体の割合のフリーカウンタを管理することが要求されます。値が-1 に初期化されるなら、サブシステムに利用可能なバッファの数は、利用可能な物理バッファの数によってだけ制限されます。バッファの数は、 < sys/buf.h> で定義されて、 cpu_startup() で初期化される nswbuf に格納されます。お勧めの初期化の値は 1/2 nswbuf です。
getpbuf() 関数は、最初に利用可能なバッファをユーザに返します。利用可能なバッファがないなら、 getpbuf() は 1 つが利用可能になるのを待ってスリープします。 pfreecnt が 0 であるなら、 getpbuf() は増加するまでスリープします。 pfreecnt は返る前に減少されます。
trypbuf() 関数は、最初に利用可能なバッファを返します。利用可能なバッファがないなら、 NULL が返されます。また、 pfreecnt が 0 であるなら、 NULL が返されます。 pfreecnt は有効なバッファを返す前に減少されます。 NULL が返されるなら、 pfreecnt は変更されていません。
relpbuf() 関数は、バッファをフリーリストに戻して解放します。バッファ b_rcred または b_wcred 構造体が NULL でないなら、それらは解放されます。 crfree(9) を参照してください。
pfreecnt は返る前に増加されます。
戻り値
getpbuf() と trypbuf() はバッファへのポインタを返します。また、 trypbuf() の場合には、利用可能なバッファがないことを示すための NULL を返すことができます。作者
このマニュアルページは、 <davidc@acns.ab.ca>によって書かれました。July 9, 2001 | FreeBSD |