Os estados dos processos estão prontos e programados para aguardar “S”?

6

Na saída de top , o estado S significa suspensão de sono.

Qual é o estado desses processos que estão agendados para estar prontos e aguardando execução na CPU pelo agendador? É S ou alguma outra coisa?

Existe um estado que significa idle ? Se sim, significa o mesmo estado dos processos que estão agendados para estar prontos e aguardando execução na CPU pelo agendador?

    
por Tim 22.05.2015 / 13:37

4 respostas

9

A top manpage fornece a resposta (no "Status do processo" descrição):

w: S -- Process Status

The status of the task which can be one of:

  • ’D’ = uninterruptible sleep
  • ’R’ = running
  • ’S’ = sleeping
  • ’T’ = traced or stopped
  • ’Z’ = zombie

    Tasks shown as running should be more properly thought of as ’ready to run’ -- their task_struct is simply represented on the Linux run-queue. Even without a true SMP machine, you may see numerous tasks in this state depending on top’s delay interval and nice value.

Os processos que estão prontos para serem executados aparecem como R . Processos verdadeiramente ociosos, isto é, processos que não estão bloqueados aguardando E / S (normalmente) aparecem como S ; processos aguardando E / S aparecem como D . (Isso não é exaustivo, algumas outras esperas aparecem como D também.)

Não sei como diferenciar os processos em execução e prontos para executar processos.

Estritamente falando, o tipo de sono se relaciona com a possível entrega de sinais: se um processo não está em execução ou parado, ele está dormindo; Se um sinal puder ser enviado imediatamente, é um sono "padrão", caso contrário, é um sono ininterrupto. Consulte o link para obter mais detalhes.

    
por 22.05.2015 / 13:51
2

O agendador não se importa com o fato de um processo não ser atualmente executado.

O estado S é usado sempre que o processo invocou uma chamada de sistema que requer que um evento externo seja concluído; neste ponto, não importa se a chamada do sistema em si causou o evento externo (por exemplo, uma chamada read ) ou apenas espera (por exemplo, select ou poll ).

Você pode descobrir em qual sistema o processo está aguardando ativando a coluna WCHAN em top .

O estado D está se tornando uma raridade nos dias de hoje, ele geralmente era usado se a chamada do sistema atual não pudesse ser interrompida facilmente sem criar possível corrupção de dados. Um exemplo notório era o cliente NFS que entrava no estado D durante toda operação de arquivo, porque não há como abortar uma solicitação que pode ou não ter sido recebida pelo servidor. Com o cache mais agressivo, a camada de cache agora verá a solicitação, enquanto o processo do usuário está fazendo outra coisa.

    
por 22.05.2015 / 22:03
2

S significa ocioso. S é para “dormir” - a única maneira de um processo ficar ocioso é esperar que algum evento o acorde. Um processo que está aguardando para ser agendado não está ocioso: a razão pela qual ele seria agendado é que ele tem coisas para fazer.

R significa executável, isto é, um processo na fila do agendador, executando o código do terreno do usuário (ou seja, código do próprio processo). Um processo é executável, quer esteja atualmente em execução ou não. Você não pode observar a diferença entre “atualmente em execução” e “programado para rodar” de dentro do sistema, porque a qualquer momento, o processo que está fazendo a observação está rodando (e assim no estado D, ou possivelmente no estado R dependendo o sistema operacional e a maneira que o processo usa para observar o status). Para observar a diferença entre "atualmente em execução" e "programado para executar", você precisaria de um depurador de kernel.

O terceiro estado importante é D, que significa "dispositivo". Esse é o estado em que um processo está enquanto está ocupado, mas em uma chamada de sistema. Um processo que está ocupado executando seu próprio código está no estado R; um processo que está em uma chamada de sistema e esperando que algum evento retorne dessa chamada está no estado S. D é o estado de um processo que está em uma chamada de sistema e fazendo algo que não pode ser interrompido, como manipular estruturas de dados do kernel ou transferir dados de / para um dispositivo de hardware. Normalmente, o estado D é de curta duração, então você não vai observar muito a menos que algo dê errado.

    
por 23.05.2015 / 01:35
1

Ps fornece uma descrição semelhante dos estados do processo

PROCESS STATE CODES
       Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will
       display to describe the state of a process:

               D    uninterruptible sleep (usually IO)
               R    running or runnable (on run queue)
               S    interruptible sleep (waiting for an event to complete)
               T    stopped, either by a job control signal or because it is being traced
               Z    defunct ("zombie") process, terminated but not reaped by its parent

(pulei os obsoletos)

ps -ax -o state,wchan,cmd,pid | tail -n+1| sort |less

deve fornecer um bom resumo dos seus processos, classificados por estado.

O campo wchan mostra o canal em espera, que especifica o state de um processo mais de perto.

Se você fizer isso:

ps -o state,wchan,cmd,pid | tail -n+1| sort |less

mostrará as mesmas informações, mas apenas para os processos na sua sessão de terminal. Você pode iniciar diferentes processos no plano de fundo de sua sessão de terminal atual e verificar em que estado eles estão e em qual canal eles estão aguardando:

#this will be waiting on a timer (S hrtime)
sleep 200 &
touch file 
#this will get the file lock to 'file', start start sleep and will be waiting on it to complete (S wait)
flock file -c "sleep 100" & 
#this won't start sleep because it will be waiting on the file lock (S flock)
flock file -c "sleep 100" &
#ps will be running  and the other guys will be waiting o pipe_w
ps -o state,wchan,cmd,pid | tail -n+1| sort |less

Os processos que não estão tecnicamente esperando em um recurso serão internamente executáveis, mas eles ainda serão mostrados como estando no estado S (= esperando no agendador para colocá-los em um núcleo do processador).

Você só terá alguns processos realmente "em execução" e o número será limitado pelo número de núcleos de CPU que você tem.

    
por 22.05.2015 / 14:10

Tags