Guia de rastreamento dinâmico Solaris

lwpsinfo_t

Vários testes proc possuem argumentos do tipo lwpsinfo_t, uma estrutura documentada em proc(4). A definição da estrutura lwpsinfo_t conforme disponível para os consumidores do DTrace é a seguinte:

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;

O campo pr_flag é uma máscara de bits com sinalizadores que descrevem o processo. Esses sinalizadores e seus significados são descritos na Tabela 25–3.

Tabela 25–3 Valores de pr_flag

PR_ISSYS

O processo é um processo do sistema. 

PR_VFORKP

O processo é pai de um filho de vfork(2).

PR_FORK

O processo possui o modo herança-em-bifurcação definido. 

PR_RLC

O processo possui o modo execução-em-último-encerramento definido. 

PR_KLC

O processo possui o modo eliminação-em-último-encerramento definido. 

PR_ASYNC

O processo possui o modo interrupção-assíncrona definido. 

PR_MSACCT

O processo possui a contabilidade de micro-estado ativada. 

PR_MSFORK

A contabilidade do micro-estado do processo é herdada na bifurcação. 

PR_BPTADJ

O processo possui o modo de ajuste de ponto de interrupção definido. 

PR_PTRACE

O processo possui o modo de compatibilidade com ptrace(3C) definido.

PR_STOPPED

O segmento é um LWP que está interrompido. 

PR_ISTOP

O segmento é um LWP interrompido em um evento de interesse. 

PR_DSTOP

O segmento é um LWP que possui uma diretiva de interrupção em efeito. 

PR_STEP

O segmento é um LWP que possui uma diretiva de etapa única em efeito. 

PR_ASLEEP

O segmento é um LWP em uma espera que pode ser interrompida em uma chamada do sistema. 

PR_DETACH

O segmento é um LWP desanexado. Consulte pthread_create(3C) e pthread_join(3C).

PR_DAEMON

O segmento é um LWP daemon. Consulte pthread_create(3C).

PR_AGENT

O segmento é o LWP do agente do processo. 

PR_IDLE

O segmento é o segmento inativo de uma CPU. Segmentos inativos somente são executados em uma CPU quando as filas de execução da CPU estão vazias. 

O campo pr_addr é o endereço de uma estrutura de dados no kernel, privada, que representa o segmento. Embora a estrutura de dados seja privada, o campo pr_addr pode ser usado como um símbolo exclusivo de um segmento enquanto o segmento existir.

O campo pr_wchan é definido quando o segmento está em modo de espera em um objeto de sincronização. O significado do campo pr_wchan é privado para a implementação do kernel, mas o campo pode ser usado como um símbolo exclusivo para o objeto de sincronização.

O campo pr_stype é definido quando o segmento está em modo de espera em um objeto de sincronização. Os possíveis valores do campo pr_stype estão na Tabela 25–4.

Tabela 25–4 Valores de pr_stype

SOBJ_MUTEX

Objeto de sincronização do mutex do kernel. Usado para serializar o acesso a regiões de dados compartilhados no kernel. Consulte o Capítulo 18Provedor lockstat e mutex_init(9F) para obter detalhes sobre objetos de sincronização do mutex no kernel.

SOBJ_RWLOCK

Objeto de sincronização de leitores/gravador do kernel. Usado para sincronizar o acesso aos objetos compartilhados no kernel que pode permitir vários leitores simultâneos ou um único gravador. Consulte o Capítulo 18Provedor lockstat e rwlock(9F) para obter detalhes sobre objetos de sincronização de leitores/gravador no kernel.

SOBJ_CV

Objeto de sincronização de variável de condição. Uma variável de condição aguarda indefinidamente até que alguma condição torne-se verdadeira. Variáveis de condição geralmente são usadas para sincronizar por razões diferentes do acesso a uma região de dados compartilhados, e são o mecanismo geralmente usado quando um processo realiza uma espera indefinida direcionada pelo programa. Por exemplo, o bloqueio em poll(2), pause(2), wait(3C) e semelhantes.

SOBJ_SEMA

Objeto de sincronização de semáforo. Um objeto de sincronização de vários objetivos que, assim como os objetos de variável de condição, não controla uma noção de propriedade. Como a propriedade é necessária para implementar a herança de prioridade no kernel do Solaris, a falta de propriedade inerente em objetos de semáforo impede seu uso amplo. Consulte semaphore(9F) para obter detalhes.

SOBJ_USER

Objeto de sincronização no nível do usuário. Todos os bloqueios em objetos de sincronização no nível do usuário são manipulados com objetos de sincronização SOBJ_USER . Os objetos de sincronização no nível do usuário incluem aqueles criados com mutex_init(3C), sema_init(3C), rwlock_init(3C), cond_init(3C) e seus equivalentes POSIX.

SOBJ_USER_PI

Objeto de sincronização no nível do usuário que implementa a herança de prioridade. Alguns objetos de sincronização no nível do usuário que controlam a propriedade adicionalmente permitem a herança de prioridade. Por exemplo, objetos do mutex criados com pthread_mutex_init(3C) podem ser feitos para herdar prioridade usando-se pthread_mutexattr_setprotocol(3C).

SOBJ_SHUTTLE

Objeto de sincronização de deslocamento. Objetos de deslocamento são usados para implementar portas. Consulte door_create(3DOOR) para obter mais informações. 

O campo pr_state é definido como um dos valores na Tabela 25–5. O campo pr_sname é definido como um caractere correspondente mostrado entre parênteses na mesma tabela.

Tabela 25–5 Valores de pr_state

SSLEEP (S)

O segmento está em espera. O teste sched:::sleep será acionado imediatamente antes que o estado de um segmento passe para SSLEEP.

SRUN (R)

O segmento é executável, mas não está sendo executado no momento. O teste sched:::enqueue será acionado imediatamente antes que o estado de um segmento passe para SRUN.

SZOMB (Z)

O segmento é um LWP zumbi. 

SSTOP (T)

O segmento é interrompido, seja devido a uma diretiva proc(4) explícita ou a algum outro mecanismo de interrupção.

SIDL (I)

O segmento é um estado intermediário durante a criação do processo. 

SONPROC (O)

O segmento está sendo executado em uma CPU. O teste sched:::on-cpu será acionado no contexto do segmento SONPROC logo depois que o estado do segmento passar para SONPROC.