JSPにref系のAPIを追加してみようか

JSPにはカーネルオブジェクトを参照するためのref_yyyが無いので、追加してみようという試み。

FI4やASPでも実装されているから何とかなるだろうと思っていたが...

タスクの待ち要因

JSPでタスク状態の内部表現(runtsk->tstat)は次のようになっている

#define	TS_WAIT_SLEEP	0x08u	/* 起床待ち状態 */
#define	TS_WAIT_WOBJ	0x10u	/* 同期・通信オブジェクトに対する待ち状態 */
#define	TS_WAIT_WOBJCB	0x20u	/* 共通部分の待ちキューにつながっている */

つまり、現状のコードではセマフォやイベントフラグなどの同期・通信オブジェクトからの待ちは一緒にされているので、どのオブジェクトからの待ちかがわからない状態になっているようだ。

JSPではwait.cのwobj_make_wait()でまとめて処理している。

wobj_make_wait(WOBJCB *wobjcb, WINFO_WOBJ *winfo)
{
	runtsk->tstat = (TS_WAITING | TS_WAIT_WOBJ | TS_WAIT_WOBJCB);
	make_wait(&(winfo->winfo));
	wobj_queue_insert(wobjcb);
	winfo->wobjcb = wobjcb;
	LOG_TSKSTAT(runtsk);
}

ASPではwobj_make_wait()を呼ぶ前にruntsk->tstatをそれぞれのオブジェクトで設定しているようなので、JSPも変更する必要はあるのか...

で、ちなみにFI4のコードは

ref_tstの該当コードは

/* TODO: pk_rtst->tskwait = tcb-> */

固定長メモリープールの空きメモリブロック数

ASPではMPFCBにブロック数の変数を追加している

typedef struct fixed_memorypool_control_block {
	QUEUE		wait_queue;		/* 固定長メモリプール待ちキュー */
	const MPFINIB *p_mpfinib;	/* 初期化ブロックへのポインタ */
	uint_t		fblkcnt;		/* 未割当てブロック数 */
	uint_t		unused;			/* 未使用ブロックの先頭 */
	uint_t		freelist;		/* 未割当てブロックのリスト */
} MPFCB;

素直な実装ではあるけれども、CBを変更するのはちょっと避けたいところ