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

名称

new_unrhdr, delete_unrhdr, alloc_unr, alloc_unr_specific, free_unrカーネルユニット番号アロケータ

書式

#include < sys/systm.h>

struct unrhdr *
new_unrhdr( int low, int high, struct mtx *mutex);

void
delete_unrhdr( struct unrhdr *uh);

int
alloc_unr( struct unrhdr *uh);

int
alloc_unrl( struct unrhdr *uh);

int
alloc_unr_specific( struct unrhdr *uh, u_int item);

void
free_unr( struct unrhdr *uh, u_int item);

解説

カーネルユニット番号アロケータは、指定された範囲内でユニット番号を割り付けることができる、一般的な機能です。
new_unrhdr( low, high, mutex)
新しいユニット番号アロケータのエンティティ (実体) を初期化します。 lowhigh 引数は、最小数と最大数のユニット番号を指定します。ユニット番号の範囲に関連しているコストはないので、リソースが本当に有限でないなら、 INT_MAX を使用することができます。 mutexNULL でないなら、ユニットを割り付けて、解放するとき、ロックするために使用されます。そうでなければ、内部のミューテックスが使用されます。
delete_unrhdr( uh)
指定されたユニット番号アロケータエンティティを破壊します。
alloc_unr( uh)
新しいユニット番号を返します。常に最も低い空き番号を割り付けます。この関数は、メモリを割り付けないで、そして決してスリープしませんが、ミューテックスをブロックするかもしれません。空きユニット番号が残っていないなら、 -1 が返されます。
alloc_unrl( uh)
ミューテックスが、既にロックされていると仮定され、したがって使用されていないこと除いて、 alloc_unr() と同様です。
alloc_unr_specific( uh, item)
特定のユニット番号を割り付けます。この関数は、メモリを割り付け、その結果、sleep するかもしれません。割り付けられたユニット番号は、成功時に返されます。指定された数が既に割り付けられているか、または範囲外であるなら、 -1 が返されます。
free_unr( uh, item)
以前に割り付けられたユニット番号を解放します。この関数は、メモリを割り付けることを必要し、したがって、スリープすることができます。前もってロックされたバリアント (異形) はありません。

コード参照

上記の関数は、 sys/kern/subr_unit.c に実装されています。

歴史

カーネルユニット番号アロケータは、 FreeBSD 6.0 ではじめて登場しました。

作者

カーネルユニット番号アロケータは、 Poul-Henning Kamp によって書かれました。このマニュアルページは、 Gleb Smirnoff によって書かれました。
July 5, 2010 FreeBSD