프로세스의 연산
대부분의 프로세스들은 동시에 수행(병행 수행)될 수 있다. 프로세스들은 동적으로 생성(fork연산)되고 제거(exec연산)되어야 한다. 그러므로 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공해야 한다. 여기서는 프로세스 생성기법인 fork와 exec연산에 대해서 이야기하고자 한다.
프로세스 생성
실행 중인 프로세스는 프로세스 생성 시스템 호출(fork)을 통해서 다수의 새로운 프로세스를 생성할 수 있다. 이때 새로운 프로세스를 생성하는 프로세스를 부모 프로세스 라고 부르고, 새로 생성된 프로세스는 자식 프로세스라고 한다. 새로 만들어진 프로세스는 다시 자식 프로세스를 생성할 수 있으며, 결과적으로 트리 구조를 만들게 된다.
부모 프로세스 : 새로운 프로세스를 생성하는 프로세스
자식 프로세스 : 부모 프로세스로부터 생성된 프로세스
대부분의 운영체제들은 여러 개의 프로세스를 식별하기 위해서 각각의 프로세스마다 프로세스 식별자(pid)를 부여한다. 이 PID는 전형적으로 정수이다. 아래 그림처럼 각각의 프로세스는 자신만의 pid를 갖는 것을 볼 수 있다.
< 전형적인 Solaris 시스템의 프로세스 트리 >
프로세스 생성 시 부모-자식 사이의 몇 가지 관계
1. 자원을 공유하는 세 가지 가능성
- 부모와 자식은 모든 자원을 공유한다.
- 자식은 부모 자원의 일부분을 공유한다.
- 자식은 운영체제로부터 직접 자원을 할당 받는다. (부모-자식 사이엔 어떤 자원도 공유하지 않는다)
프로세스가 어떤 작업을 하기 위해서는 자원(메모리, CPU, 파일, 입/출력 장치...)이 필요하다. 어떤 프로세스가 하위 프로세스를 생성할 때, 서브프로세스는 운영체제로부터 직접 자원을 얻거나, 부모 프로세스 자원의 일부를 사용할 수 있다.자식 프로세스가 부모 자원의 일부분만을 사용하도록 제한하면, 어떤 프로세스가 너무 많은 서브프로세스를 만들어 시스템이 과부하 되는 것을 방지할 수 있다.
2. 실행과 관련하여 두 가지 가능성
- 부모가 계속해서 자식과 병렬로 실행된다.
- 부모가 모든 자식 또는 일부 자식이 끝날 때까지 기다린다.
3. 주소 공간 측면에서 두 가지 가능성
- 자식 프로세스는 부모 프로세스의 복사본이다. (자식 프로세스는 부모와 똑같은 프로그램과 데이터를 가진다)
- 자식 프로세스가 자신에게 적재될 새로운 프로그램을 갖고 있다.
3번의 이해를 돕기 위해서 UNIX 시스템을 예로 설명을 해보자.
UNIX에서 새로운 프로세스는 fork() 시스템 호출로 생성된다. 또한 기본적으로 프로세스가 새로 생성되면 그 프로세스는 부모 프로세스 주소 공간의 복사본으로 구성된다.(이 메커니즘은 부모 프로세스가 자식 프로세스와 쉽게 통신할 수 있게 한다.) 프로세스가 생성되고 나면, 부모 자식 두 개의 프로세스들은 fork() 연산 다음 명령어부터 실행을 계속하며, 부모의 fork()함수는 자식 프로세스의 pid를 리턴하고, 새로 생성된 자식 프로세스안의 fork()함수는 '0'이 리턴 된다. fork()명령어 후에 exec()시스템 호출로 다른 프로그램의 실행파일인 이진 파일을 메모리에 적재하고, 그 프로그램의 실행을 시작한다. 이때, exec() 시스템 호출을 포함하는 원래 프로그램의 메모리 이미지는 파괴된다. 이런 식으로 새 프로세스가 생성되면 그 프로세스의 주소공간을 부모의 복사본으로 넣을 수도, 새로운 프로그램으로 대체할 수도 있다.
프로세스 종료
프로세스 종료는 exit()시스템 호출로 요청된다. 이 시점에서, 프로세스는 자신의 부모 프로세스에게(wait()를 통해) 상태 값을 반환할 수 있다. 프로세스가 종료되면 해당 프로세스의 모든 자원이 운영체제로 반환된다. 프로세스는 다양한 이유로 인해 종료될 수 있지만 부모프로세스의 관점에서 종료를 시킨다고 했을 때, 자식이 할당된 자원을 초과사용하거나 더 이상 작업을 하지 않을 때 부모는 자식을 종료시킬 수 있다. 프로세스 종료 시스템 호출에 대해서 자세하게 알고 싶다면 http://twinjh.tistory.com/8 여기서 보세요.
'OS' 카테고리의 다른 글
3-1. 프로세스 : 프로세스 개념, 프로세스 스케줄링 (1) | 2013.01.09 |
---|---|
2-3. 운영체제 구조 (0) | 2013.01.03 |
2-1. 운영 체제 구조 : 운영체제 서비스, UI (0) | 2012.12.30 |
1. Introduction (0) | 2012.12.30 |