프로세스가 생성에서 종료하기까지의 과정
디스크에 있는 프로그램이 실행되어 활성화 된 것이 프로세스이다. 프로세스는 종료(terminated) 되기전까지 항상 메모리에 상주하며, 다양한 상태를 가진다.
프로세스가 활성화 되어 종료될 때까지를 프로세스가 살아 있는 시간으로 간주하며, 이를 프로세스 생명주기(process lifetime)라 한다.
유닉스는 다중 처리, 다중 사용자 환경을 지원한다. 보통 프로세스는 하나의 프로그램을 수행하지만 여러 개의 프로세스가 병행으로 같은 프로그램을
수행할 수 있다. 그런 프로세스들은 메모리 내에서 하나의 프로그램 텍스트 복사 본을 공유하지만, 데이터와 스택 영역은 각각 개별적으로 유지한다.
sched(process 0)을 제외한 시스템의 모든 프로세스들은 fork()라는 시스템 호출에 의해 생성된다. fork()는 새로운 가상 주소 공간에
부모 프로세스(Parent process)의 시스템 호출(System call)과 처리(processing)를 복사(copy)한다. 이후 exec()라는 시스템 호출에 의해
자식 프로세스(Child process)가 일반화된다. 실행 가능한 파일이 새로운 프로세스 주소 공간에 생성된다. 이를 자식 프로세스라 한다.
자식 프로세스가 수행하는 동안에 부모 프로세스는 wait() 시스템 호출에 의해 자식 프로세스가 종료하는 것을 기다리거나 지속적인 실행한다.
이때 부모 프로세스의 상태를 잠듬(sleep)이라 한다. 자식 프로세스가 작업을 완료하면 exit() 시스템 호출을 통해 자식 프로세스의 종료 상태를
부모 프로세스에게 전달하고, 사용한 시스템 자원을 되돌려준다. 새로운 작업이 발생할 때마다 fork(), exec()를 실행하여 자식 프로세스를 생성하여 처리한다.