-
tget_mpf
-
ER tget_mpf ( ID mpfid, VP *p_blk, TMO tmout );
|
MOVW AX, #tmout_hi
PUSH AX
MOVW AX, #tmout_lo
PUSH AX
MOVW BC, #LOWW(_p_blk)
MOV A, #mpfid
CALL !!_tget_mpf
ADDW SP, #0x0004
|
|
|
|
|
ID mpfid;
|
|
|
VP *p_blk;
|
メモリ・ブロックの先頭アドレスを格納する領域へのポインタ
|
|
TMO tmout;
|
|
mpfidで指定された固定長メモリ・プールからメモリ・ブロックを獲得し,その先頭アドレスを
p_blkで指定された領域に格納します。
ただし,本サービス・コールを発行した際,対象固定長メモリ・プールからメモリ・ブロックを獲得することができなかった(空きメモリ・ブロックが存在しなかった)場合には,メモリ・ブロックの獲得処理は実行されず,自タスクを対象固定長メモリ・プールの待ちキューにメモリ・ブロックの獲得要求順(FIFO順)でキューイングします。
これにより,自タスクは,レディ・キューから外れ,RUNNING状態からWAITING状態(メモリ・ブロック待ち状態)へと遷移します。
なお,メモリ・ブロック待ち状態の解除は,以下の場合に行われ,メモリ・ブロック待ち状態からREADY状態へと遷移します。
|
|
rel_mpfの発行により,対象固定長メモリ・プールにメモリ・ブロックが返却された
|
|
rel_waiの発行により,メモリ・ブロック待ち状態を強制的に解除された
|
|
|
|
|
|
備考 待ち時間
tmoutにTMO_FEVRが指定された際には“
get_mpfと同等の処理”を,TMO_POLが指定された際には“
pget_mpfと同等の処理”を実行します。