Solaris 動的トレースガイド

lwpsinfo_t

一部の proc プローブは、lwpsinfo_t 型の引数をとります。構造体 lwpsinfo_t については、proc(4) に文書化されています。DTrace コンシューマで使用可能な構造体 lwpsinfo_t の定義は、次のとおりです。

typedef struct lwpsinfo {
	int pr_flag;              /* flags; see below */
	id_t pr_lwpid;            /* LWP id */
	uintptr_t pr_addr;        /* internal address of thread */
	uintptr_t pr_wchan;       /* wait addr for sleeping thread */
	char pr_stype;            /* synchronization event type */
	char pr_state;            /* numeric thread state */
	char pr_sname;            /* printable character for pr_state */
	char pr_nice;             /* nice for cpu usage */
	short pr_syscall;         /* system call number (if in syscall) */
	int pr_pri;               /* priority, high value = high priority */
	char pr_clname[PRCLSZ];   /* scheduling class name */
	processorid_t pr_onpro;   /* processor which last ran this thread */
	processorid_t pr_bindpro; /* processor to which thread is bound */
	psetid_t pr_bindpset;     /* processor set to which thread is bound */
} lwpsinfo_t;

pr_flag フィールドは、プロセスについて記述するフラグが格納されているビットマスクです。表 25–3 に、これらのフラグとその意味を示します。

表 25–3 pr_flag の値

PR_ISSYS

プロセスはシステムプロセスです。 

PR_VFORKP

プロセスは vfork(2) の子の親です。

PR_FORK

プロセスがフォーク時継承モードを設定しました。 

PR_RLC

プロセスが最終終了時実行モードを設定しました。 

PR_KLC

プロセスが最終終了時終了モードを設定しました。 

PR_ASYNC

プロセスが非同期停止モードを設定しました。 

PR_MSACCT

プロセスが microstate アカウンティングを有効にしました。 

PR_MSFORK

プロセスの microstate アカウンティングがフォーク時に継承されました。 

PR_BPTADJ

プロセスがブレークポイント調整モードを設定しました。 

PR_PTRACE

プロセスが ptrace(3C) 互換モードを設定しました。

PR_STOPPED

スレッドは停止した LWP です。 

PR_ISTOP

スレッドは重要なイベントで停止した LWP です。 

PR_DSTOP

スレッドは停止指令が有効になっている LWP です。 

PR_STEP

スレッドはシングルステップ指令が有効になっている LWP です。 

PR_ASLEEP

スレッドはシステムコール内で割り込み可能なスリープ状態になっている LWP です。 

PR_DETACH

スレッドは切り離された LWP です。pthread_create(3C)pthread_join(3C) のマニュアルページを参照してください。

PR_DAEMON

スレッドはデーモン LWP です。pthread_create(3C) のマニュアルページを参照してください。

PR_AGENT

スレッドはプロセスのエージェント LWP です。 

PR_IDLE

スレッドは CPU のアイドルスレッドです。アイドルスレッドは、その CPU の実行キューが空のときにだけ実行されます。 

pr_addr フィールドは、スレッドを表す非公開のカーネル内データ構造のアドレスです。データ構造体が非公開でも、pr_addr フィールドは、スレッドの有効期限が切れるまで、そのスレッド固有のトークンとして使用できます。

pr_wchan フィールドは、同期オブジェクト上でスレッドがスリープ状態になっているときに設定されます。pr_wchan フィールドの意味はカーネル実装以外に対しては公開されませんが、フィールド自体は、同期オブジェクトに固有のトークンとして使用できます。

pr_stype フィールドは、同期オブジェクト上でスレッドがスリープ状態になっているときに設定されます。表 25–4 に、pr_stype フィールドに入る値を一覧します。

表 25–4 pr_stype の値

SOBJ_MUTEX

カーネル相互排他同期オブジェクト。カーネル内の共有データ領域へのアクセスを直列化するために使用します。カーネル相互排他同期オブジェクトの詳細については、第 18 章lockstat プロバイダmutex_init(9F) のマニュアルページを参照してください。

SOBJ_RWLOCK

カーネル読み取り/書き込み同期オブジェクト。カーネル内の共有オブジェクトへのアクセスを同期化するために使用します。カーネル内の共有オブジェクトへのアクセスでは、同時に複数の読み取り、または単一の書き込みが許可されます。カーネル読み取り/書き込み同期オブジェクトの詳細については、第 18 章lockstat プロバイダrwlock(9F) のマニュアルページを参照してください。

SOBJ_CV

条件変数同期オブジェクト。条件変数は、一定の条件が揃うまで待機し続けるように設計されています。通常、条件変数は、共有データ領域へのアクセス以外の目的で同期化を行うために使用します。条件変数は、一般的にプロセスがプログラムに従って待機するときに使用されます。たとえば、poll(2)pause(2)wait(3C) などでブロックが発生した場合に使用されます。

SOBJ_SEMA

セマフォ同期オブジェクト。条件変数オブジェクトと同じく、所有権の概念を追跡しない汎用同期オブジェクトです。所有権は、Solaris カーネル内で優先順位の継承を行うときに必要になります。このため、セマフォオブジェクト内に固有の所有権がない場合、これらを広く利用することができません。詳細については、semaphore(9F)を参照してください。

SOBJ_USER

ユーザーレベル同期オブジェクト。ユーザーレベル同期オブジェクト上でのすべてのブロックは、SOBJ_USER 同期オブジェクトで処理されます。ユーザーレベル同期オブジェクトには、mutex_init(3C)sema_init(3C)rwlock_init(3C)cond_init(3C) で作成されたものと、これらと同等の POSIX コマンドで作成されたものがあります。

SOBJ_USER_PI

優先順位の継承を行うユーザーレベル同期オブジェクト。所有権を追跡する一部のユーザーレベル同期オブジェクトでは、優先順位の継承も行うことができます。たとえば、pthread_mutex_init(3C) で作成された相互排他オブジェクトは、pthread_mutexattr_setprotocol(3C) を使って優先順位を継承できます。

SOBJ_SHUTTLE

往復同期オブジェクト。往復オブジェクトは、door の実装に使用します。詳細については、door_create(3DOOR) を参照してください。 

pr_state フィールドには、表 25–5 に示すいずれかの値が設定されます。pr_sname フィールドには、同じ表の丸括弧内の文字が設定されます。

表 25–5 pr_state の値

SSLEEP (S)

スレッドはスリープ中です。sched:::sleep プローブは、スレッドが SSLEEP 状態に移行する直前に起動します。

SRUN (R)

スレッドは実行可能ですが、現在実行されていません。sched:::enqueue プローブは、スレッドが SRUN 状態に移行する直前に起動します。

SZOMB (Z)

スレッドはゾンビ LWP です。 

SSTOP (T)

スレッドは、明示的な proc(4) 指令またはその他の停止機構により停止しています。

SIDL (I)

スレッドは、プロセス作成中の中間状態です。 

SONPROC (O)

CPU 上でスレッドが実行されています。sched:::on-cpu プローブは、スレッドが SONPROC 状態に移行した直後に、SONPROC スレッドのコンテキストで起動します。