EN JA
MPOOL(3)
MPOOL(3) FreeBSD Library Functions Manual MPOOL(3)

名称

mpool共有メモリバッファプール

書式

#include < db.h>
#include < mpool.h>

MPOOL *
mpool_open( void *key, int fd, pgno_t pagesize, pgno_t maxcache);

void
mpool_filter( MPOOL *mp, void (*pgin)(void *, pgno_t, void *), void (*pgout)(void *, pgno_t, void *), void *pgcookie);

void *
mpool_new( MPOOL *mp, pgno_t *pgnoaddr, u_int flags);

int
mpool_delete( MPOOL *mp, void *page);

void *
mpool_get( MPOOL *mp, pgno_t pgno, u_int flags);

int
mpool_put( MPOOL *mp, void *pgaddr, u_int flags);

int
mpool_sync( MPOOL *mp);

int
mpool_close( MPOOL *mp);

解説

mpool ライブラリインタフェースは、ファイルのページ指向のバッファ管理を提供することを目的としています。

mpool_open() 関数は、メモリプールを初期化します。 key 引数は、今のところ無視されます。 fd 引数は、基礎ファイルのファイル記述子で、シーク可能でなければなりません。

pagesize 引数は、ファイルを分割するページのサイズ (バイト単位) です。 maxcache 引数は、基礎ファイルから一度にキャッシュするページの最大数です。この値は、ファイルのバッファを共有するプロセス数とは関係ありませんが、ファイルを共有するプロセスで指定された最大値になります。

mpool_filter() 関数は、ページの透過的入出力処理を可能にするように意図されます。 pgin 関数が指定されると、バッキングファイルからメモリプールにバッファを読み込むたびに呼び出されます。 pgout 関数が指定されると、バッキングファイルにバッファが書き込まれるたびに呼び出されます。どちらの関数も、 pgcookie ポインタ、ページ番号、読み書きを行なうページのポインタで呼び出されます。

関数 mpool_new() は、 MPOOL ポインタ、アドレスとフラグのセットを引数として取ります。新しいページを割り付けることができる場合は、ページのポインタが返され、ページ番号が pgnoaddr アドレスに格納されます。そうでなければ、 NULL が返され、 errno が設定されます。フラグの値は、次の値を OR (論理和) することによって形成されます:

MPOOL_PAGE_REQUEST
特有のページ番号で新しいページを割り付けます。
MPOOL_PAGE_NEXT
次のページ番号で新しいページを割り付けます。

関数 mpool_delete() は、プールから指定されたページを削除し、ページを解放します。それは、引数として MPOOL ポインタと 1 つのページを取ります。ページは、 mpool_new() によって生成されていなければなりません。

mpool_get() 関数は、 MPOOL ポインタとページ番号を引数として取ります。ページが存在する場合は、ページのポインタが返されます。ページが存在しない場合は NULL が返され、 errno が設定されます。 flags の引数は、次の値のいずれかを OR (論理和) することよって指定されます:

MPOOL_IGNOREPIN
返されたページは、割り付けられません。そうでなければ、ページは、割り付けられます。

mpool_put() 関数は、 pgaddr で参照されるページを解放します。 pgaddr は、以前に mpool_get() または mpool_new() が返したアドレスでなければなりません。 flags の引数は、次の値のいずれかを OR (論理和) することよって指定されます:

MPOOL_DIRTY
ページが修正されており、バッキングファイルに書き込む必要があります。

mpool_put() 関数は、成功すれば 0 を返し、エラーが生じたなら、-1 を返します。

mpool_sync() 関数は、 MPOOL ポインタに関連する変更されたすべてのページをバッキングファイルに書き込みます。 mpool_sync() 関数は、成功すれば 0 を返し、エラーが生じたなら、-1 を返します。

mpool_close() 関数は、メモリプールクッキーに関連した割り付けられたメモリをすべて解放します。修正されたページは、バッキングファイルに書き込まれません。 mpool_close() 関数は、成功すれば 0 を返し、エラーが生じたなら、-1 を返します。

エラー

mpool_open() 関数が失敗すると、ライブラリルーチン malloc(3) で明記されたエラーのいずれかが errno に設定されます。

mpool_get() 関数が失敗すると、次のものが、 errno に設定されます。

[ EINVAL]
要求されたレコードが存在しません。

mpool_new() と mpool_get() 関数が失敗すると、ライブラリルーチン read(2), write(2), malloc(3) で明記されたエラーのいずれかが errno に設定されます。

mpool_sync() 関数が失敗すると、ライブラリルーチン write(2) で明記されたエラーのいずれかが errno に設定されます。

mpool_close() 関数が失敗すると、ライブラリルーチン free(3) で明記されたエラーのいずれかが errno に設定されます。

June 17, 2011 FreeBSD