XINU
|
バッファプール用のメモリを割り当て、バッファ同士をリンクする。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
bpid32 | mkbufpool (int32 bufsiz, int32 numbufs) |
バッファプール用のメモリを割り当て、バッファ同士をリンクする。 More... | |
バッファプール用のメモリを割り当て、バッファ同士をリンクする。
Definition in file mkbufpool.c.
バッファプール用のメモリを割り当て、バッファ同士をリンクする。
Step1. 割り込みを禁止する。
Step2. 以下のいずれかの場合は、割り込み状態を復元し、処理を終了する。
・バッファサイズがバッファ最小値を下回る場合
・バッファサイズがバッファ最大値を超えた場合
・バッファ数が0以下の場合
・バッファ数がバッファ最大数を超えた場合
・割り当て済みのバッファプール数が最大数を超えた場合
Step3. 要求されたバッファサイズを4の倍数で丸める。
Step4. 要求されたバッファサイズ + バッファプールID分のメモリをバッファ数分、割り当てる。
メモリ確保に失敗した場合は割り込み状態を復元し、処理を終了する。 Step5. 新しいバッファプールIDを割り当て、バッファプールの総数を1増加させる。
Step6. 割り当てたバッファとバッファプールをリンクする。
Step7. 割り当てたバッファにセマフォを割り当てる。
セマフォ割り当てに失敗した場合は割り当てたバッファを解放し、バッファプール総数を元に戻し、
割り込み状態を復元し、処理を終了する。
Step8. 割り当てたバッファ同士をリンクする。
Step9. 割り込み状態を復元する。
[in] | bufsiz | バッファプール中のバッファサイズ |
[in] | numbufs | バッファプール中のバッファ数 |
Definition at line 38 of file mkbufpool.c.
References BP_MAXB, BP_MAXN, bpentry::bpnext, bpentry::bpsem, bpentry::bpsize, buftab, disable(), freemem(), getmem(), NBPOOLS, nbpools, NULL, restore(), semcreate(), and SYSERR.
Referenced by net_init().