• TASK_RUNNING

    • 프로세스가 CPU에서 실행 중이거나 실행되기를 기다리는 중이다.
  • TASK_INTERRUPTIBLE
    • 프로세스가 어떤 조건에 맞아떨어지기를 기다리면서 보류 중(자는중)이다. 프로세스를 깨울수 있는 조건으로는 하드웨어 인터럽트가 발생하거나, 프로세스가 기다리고 있는 자원이 해지되거나, 프로세스에 시그널을 전달하는 것이 있을 수 있다.
  • TASK_UNINTERRUPTIBLE

    • TASK_INTERRUPTIBLE과 비슷하지만 잠들어 있는 프로세스에 시그널을 전달해도 프로세스 상태가 바뀌지 않는다는 차이가 있다. 이 프로세스 상태는 거의 사용하지 않는다. 그러나 프로세스가 정해진 사건이 발생하기를 기다리는 도중에 방해를 받으면 안 되는 특수한 상황에서 유용하다. 예를 들어, 프로세스가 장치 파일을 열 때 해당 장치 드라이버가 자신이 다룰 하드웨어 장치가 있는지 조사하는 경우에 이러한 상태를 사용할 수 있다. 장치 드라이버는 조사를 완료할 때까지 방해를 받으면 안된다. 그렇지 않으면 하드웨어 장치가 예측할 수 없는 상태에 빠질 수도 있다.
  • TASK_STOPPED

    • 프로세스 실행이 중단 되었다. 프로세스는 SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU의 시그널을 받으면 현재의 상태가 된다.
  • TASK_TRACED

    • 프로세스 실행이 디버거에 의해 멈춘 경우이다. 디버거가 테스트 프로그램을 모니터링하기 위해 ptrace()  시스템 콜을 수행하는 것처럼 프로세스가 다른 프로세스에 의해 모니터링 될 때 시그널은 프로세스를 TASK_TRACED 상태에 둔다.
  • EXIT_ZOMBIE

    • 프로세스가 종료되었지만 부모 프로세스가 wait4() 또는 waitpid() 시스템 콜을 호출하여 종료 프로세스의 정보를 반환하지 않은 경우이다. 부모 프로세스가 wait() 계열 시스템 콜을 호출하기 전에는 종료한 프로세스의 프로세스 디스크립터에 들어 있는 데이터를 부모 프로세스가 필요로 할 수 있기때문에 커널은 데이터를 삭제해서는 안된다.
  • EXIT_DEAD

    • 마지막 상태로 부모 프로세스가 wait4() 또는 waitpid() 시스템 콜을 방금 수행하였으므로 시스템에서 제거되는 중이다. EXIT_ZOMBIE에서 EXIT_DEAD로 상태를 바꾸는 것은 같은 프로세스에 대해 다른 스레드가 wait() 콜을 수행함으로써 발생하는 경쟁 조건을 피하기 위해서이다.

'Embedded Lab > linux, x86' 카테고리의 다른 글

[Top-Half와 Bottom-Half]  (0) 2012.01.26
[인라인(inline) 함수]  (0) 2012.01.11
[커널의 종류]  (0) 2012.01.11
[Slab Allocator]  (0) 2012.01.04
[커널컴파일]  (0) 2012.01.03
Posted by cyj4369
,