'분류 전체보기'에 해당되는 글 373건

  1. AIX-Tips-Process와 Thread

AIX-Tips-Process와 Thread

반응형

우선 Process의 정의와 동작에 대해 설명한 것입니다.

프로세스란 말 그대로 실행중인 프로그램입니다. 프로세스는 아래와 같이 동작합니다. 

Fork는 프로세스를 생성하는 단계로서 시스템의 모든 프로세스는 fork mechanism에 의해 다른 프로세스에서 생성되며, init 프로세스가 모든 프로세스의 기본이 됩니다.

그리고 Exec는 프로세스를 실행하는 단계로서 새로운 프로세스는

 수행되기위해 exec system call을 사용하여 메모리에 로드되고

 수행 

이 후 Exit는 프로세스 종료합니다.

       끝으로 Wait동작으로서  그 동안 사용했던 리소스들을 반환/반납하는 단계이고 모프로세스가 child의 소멸을 확인하여 부여된 자원을 환원시키게 됩니다. 물론 이때 리소스를 반환하지않아 zombie상태로 남아있는 프로세스도 있습니다.

그러면 Process의 상태에 관해 알아보건데,

"idle"상태는 Fork() system call에 의해 프로세스가 생성되는 순간의 상태로서 프로세스가 필요한 자원을 확보할 때까지 idle 상태로 됩니다. 그리고 

"Active"상태는 프로세스 생성 완료시의 상태로 CPU상에서 실행되고 schedule 될 수 있는 상태입니다.

또 다른 상태인 "Stopped"상태는 SIGSTOP신호를 받으면 Stopped 상태로 전환되며 소유하고 있던 모든 thread 도 stopped로 바뀌고 CPU상에서 schedule할 수 없고 SIGCONT신호를 받아 다시 실행됩니다. 

"Swapped"상태는 실제 메모리에서 running 중인 프로세스를 디스크상의 paging space로 이동시키는 상태로서 메모리에 다시 load되기 전에는 실행될 수 없습니다.

끝으로 "zombie"상태는 프로세스가 종료될 때 자원을 반납하지 않은 상태호서 일부 정상적으로 자원을 반납하지 않아 모 프로세스가 자원을 회수할 때까지 zombie로 남게 됩니다.

 

이제 Thread 에 관하여 알아보겠습니다.

thread는 프로세스에 의해 발생되고 Kernel thread 와 user thread로 구분됩니다. 

kernel thread는 Kernel 모드에서만 수행되는 Thread User 프로세스와 아무런 연관이 없고 User context를 가지는 것이 아니라 kernel stack 영역을 가지며,

asynchronous I/O와 같은 특별한 기능을 수행할 때 주로 사용됩니다. 그리고 

user thread는  전적으로 user level에서 수행됩니다.

이 또한 Thread 의 여러 상태가 있으니 

 "Idle"은 새로운 thread가 생성되는 순간의 상태이고 "Ready to Run"은 Thread 생성 후 필요한 자원은 모두 가졌지만

CPU상에서 수행되기 위해 잠시 대기중인 상태이며 run queue에 쌓이게 됩니다.

"Running"은 CPU에서 thread가 수행되고 있는 상태로서 이때 machine register를 사용하게 됩니다.

"Stopped"는 SIGSTOP 신호를 받음으로써 해당 thread는 stopped 상태로 전환되며 SIGCONT 신호를 받으면 다시 실행됩니다.

"Swapped"는 프로세스가 swapped 되는 경우 해당 프로세스의 모든 thread는 실제 메모리를 차지하고 있는 address space를

디스크 상의 paging space로 이동시키는 상태입니다.

그리고, "Zombie" 상태는 아주 순간적인 상태로서 Thread가 메모리 등 소유한 모든 자원을 환원시키면 thread는

완전히 멈춘 것으로 되는데 이 때 해당 thread는 "Zombie"상태가 됩니다.

간혹 시스템을 보면 Zombie 상태의 thread들을 볼 수 있는데 이 thread들은 자신이 stop 되었음에도

메모리와 같은 자원을 시스템에 반납하지 못하여 남아있는 것입니다.

이는 프로그래밍 오류, 버그, 등으로 원인이 나타나고 서버를 재부팅하면 해결이 됩니다.

 

결국 프로세스는 fork() 에 의해 생성되고 thread는 process에 의해 구동된다고 보면 되겠지요.

 

반응형