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)
- 新しいユニット番号アロケータのエンティティ (実体) を初期化します。 low と high 引数は、最小数と最大数のユニット番号を指定します。ユニット番号の範囲に関連しているコストはないので、リソースが本当に有限でないなら、 INT_MAX を使用することができます。 mutex が NULL でないなら、ユニットを割り付けて、解放するとき、ロックするために使用されます。そうでなければ、内部のミューテックスが使用されます。
- 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 ではじめて登場しました。作者
カーネルユニット番号アロケータは、 によって書かれました。このマニュアルページは、 によって書かれました。July 5, 2010 | FreeBSD |