대기가 준비되고 예약된 프로세스의 상태가 "S"입니까?

대기가 준비되고 예약된 프로세스의 상태가 "S"입니까?

출력에서 top상태는 S절전이 중단될 수 있음을 나타냅니다.

스케줄러가 준비되어 CPU에서 실행되기를 기다리는 프로세스의 상태는 무엇입니까? 그것이 S아니면 다른 것입니까?

지위에 대한 중요성이 있나요 idle? 그렇다면 스케줄러가 실행을 기다리도록 CPU에 예약한 프로세스와 동일한 상태입니까?

답변1

이것top맨페이지주어진 답변("프로세스 상태" 설명):

와트:에스-- 프로세스 상태

작업 상태는 다음 중 하나일 수 있습니다.

  • 'D' = 중단 없는 수면
  • 'R' = 실행 중
  • "S" = 수면
  • 'T' = 추적 또는 중지
  • "Z" = 좀비

    실행 중인 것으로 표시된 작업은 "실행 준비"로 더 정확하게 간주되어야 합니다. 해당 task_struct는 단순히 Linux 실행 대기열에 표시됩니다. 진정한 SMP 시스템이 없더라도 대기 시간 간격과 상단의 좋은 값에 따라 이 상태에서 많은 작업을 볼 수 있습니다.

실행할 준비가 된 프로세스는 로 표시됩니다 R. 정말 유휴 프로세스,I/O를 기다리는 동안 차단되지 않은 프로세스는 일반적으로 로 표시됩니다 S. I/O를 기다리는 프로세스는 로 표시됩니다 D. (완전한 것은 아니며 다른 대기 시간도 나타납니다 D.)

실행 중인 프로세스와 실행할 준비가 된 프로세스를 구별하는 방법을 모르겠습니다.

엄밀히 말하면 슬립 유형은 가능한 신호 전달과 관련이 있습니다. 프로세스가 실행 중이거나 중지되지 않으면 슬립 상태이고, 신호가 즉시 전달될 수 있으면 "표준" 슬립이고, 그렇지 않으면 중단되지 않는 슬립입니다. 바라보다https://stackoverflow.com/questions/223644/what-is-an-uninterruptable-process자세한 내용은.

답변2

스케줄러는 프로세스가 현재 실행될 수 없는 이유에 관심이 없습니다.

S이 상태는 프로세스가 현재 완료하기 위해 외부 이벤트를 요구하는 시스템 호출을 호출할 때마다 사용됩니다. 시스템 호출 자체가 외부 이벤트(예: 호출 read)를 발생시켰는지 아니면 그냥 기다렸는지(예 select: 또는 poll).

WCHAN에서 열을 활성화하면 프로세스가 어떤 시스템 호출을 기다리고 있는지 확인할 수 있습니다 top.

이 상태는 요즘에는 다소 드물어지고 D있으며 일반적으로 잠재적인 데이터 손상을 일으키지 않고는 현재 시스템 호출을 쉽게 중지할 수 없는 경우에 사용됩니다. 악명 높은 예 D는 서버가 수신했거나 수신하지 않았을 수 있는 요청을 중단할 수 있는 방법이 없기 때문에 모든 파일 작업 중에 상태에 들어가는 NFS 클라이언트입니다 . 보다 공격적인 캐싱을 사용하면 이제 사용자 프로세스가 다른 작업을 수행하는 동안 캐시 계층이 요청을 볼 수 있습니다.

답변3

S는 유휴 상태를 의미합니다. S는 "sleep"을 의미합니다. 프로세스가 유휴 상태가 되는 유일한 방법은 일부 이벤트가 프로세스를 깨울 때까지 기다리는 것입니다. 예약을 기다리는 프로세스는 유휴 상태가 아닙니다. 할 일이 있기 때문에 예약됩니다.

R은 실행 가능, 즉 사용자 도메인 코드(즉, 프로세스 자체의 코드)를 실행하는 스케줄러 큐의 프로세스를 나타냅니다. 프로세스는 현재 실행 중인지 여부에 관계없이 실행 가능합니다. 시스템 내에서는 "현재 실행 중"과 "실행 예정" 사이의 차이를 관찰할 수 없습니다. 왜냐하면 언제든지 관찰을 수행하는 프로세스가 실행 중이기 때문입니다(따라서 상태에 따라 D 상태 또는 R 상태일 수도 있음). 운영 체제와 프로세스가 상태를 관찰하는 데 사용하는 방식) "현재 실행"과 "예약된 실행"의 차이점을 관찰하려면 커널 디버거가 필요합니다.

세 번째 중요한 상태는 "장치"를 의미하는 D입니다. 이는 프로세스가 사용 중이지만 시스템 호출 내에 있을 때의 상태입니다. 자신의 코드를 실행하는 데 바쁜 프로세스는 상태 R에 있습니다. 시스템 호출 중이고 호출에서 이벤트가 반환되기를 기다리는 프로세스는 상태 S에 있습니다. D는 시스템 호출 중이고 중단될 수 없는 작업(예: 커널 데이터 구조 작동)을 수행하거나 하드웨어 장치와 데이터를 주고받는 프로세스의 상태입니다. 일반적으로 상태 D는 수명이 짧기 때문에 문제가 발생하지 않는 한 자주 관찰되지 않습니다.

답변4

Ps유사한 프로세스 상태 설명이 제공됩니다.

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

(오래된 내용은 생략했습니다)

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

상태별로 정렬된 프로세스의 좋은 스냅샷을 제공해야 합니다.

이 필드에는 프로세스 상태를 더 자세히 지정하는 wchan대기 채널이 표시됩니다 .state

이렇게 하면:

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

동일한 정보가 표시되지만 터미널 세션의 프로세스에 대해서만 표시됩니다. 현재 터미널 세션의 백그라운드에서 다양한 프로세스를 시작하고 현재 상태와 대기 중인 채널을 확인할 수 있습니다.

#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

기술적으로 리소스를 기다리지 않는 프로세스는 내부적으로 실행되지만 여전히 해당 S상태로 나타납니다(= 스케줄러가 리소스를 프로세서 코어에 배치하기를 기다리는 중).

실제로 "실행 중인" 프로세스는 소수에 불과하며, 그 수는 보유하고 있는 CPU 코어 수에 따라 제한됩니다.

관련 정보