一部の 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 スレッドのコンテキストで起動します。 |