본문 바로가기
COMPUTER SCIENCE/OS

[OS] Process - Operations on Processes

by 민트맛녹차 2023. 7. 10.

Process Creation

프로세스는 새로운 프로세스들을 생성할 수 있다. 이때 새로 생성된 프로세스들은 child process, 이를 만든 프로세스는 parent process 라고 하며 프로세스들은 tree 모양을 이룬다. 

대부분의 OS들은 프로세스들을 unique process identifier(pid) 로 구분한다. 

 

LInux OS 의 경우, systemd process가 모든 user process들의 root parent process 이며 system이 boot될 때 생성되는 first user process 이다. system 이 boot 되면 systemd process 는 추가적인 service들을 제공하는 프로세스들을 생성한다. 

 

Resource Sharing

child process 는 OS에서 직접 자원을 얻거나, parent process 의 자원의 일부를 한정적으로 얻을 수 있다.

child process 를 parent process 의 자원을 부분만 얻도록 제한하는 것은 너무 많은 child process를 system이 생성해 오버로딩을 막기 위해서이다.

parent process 는 child process에게 initialization data(input) 을 넘겨줄 수 있다. 

 

Execution

프로세스가 새로운 프로세스를 생성하면, 두 가지 경우가 가능하다.

  • parent process 와 child process 가 동시에 실행된다.
  • parent process 가 child process 가 종료될 때까지 기다린다.

 

Address Space

  • child process 는 parent process의 복제본이 된다. 즉, parent process 와 같은 program 과 data 를 가진다.
  • chile process는 새로운 program 이 로드된다. - exec, execvp

 

UNIX 로 예를 들어보자

fork system call

fork() 는 새로운 프로세스를 생성한다.

생성된 프로세스는 parent process 와 동일한 address space 를 가지는데, 이는 parent process가 child process 와 쉽게 통신할 수 있도록 한다

fork() 의 반환값의 경우 parent process 는 child process 의 pid 이지만, child process 는 0 이다. 

 

exec system call

fork() 이후 exec() 를 사용하면 process의 memory space를 새로운 progream으로 대체한다.

새로운 program 으로 대체되므로 현재 프로세스는 작동하지 않는다.

 

 

Process Termination

process 가 마지막 문장을 실행하고 OS에게 exit system call 을 통해 프로세스를 삭제할 것이냐고 묻는다.

이때, process 는 parent process 에게 wait system call 을 사용해 값을 전달하고, 모든 자원들(allocated memory, open files, I/O buffers etc) 은 OS 에 의해 할당이 해제된다.

 

parent process 는 child process 를 다음과 같은 이유들로 종료시킬 수 있다.

  • child process 가 할당된 자원을 초과할 때
  • child 에게 할당된 자원이 더이상 필요하지 않을 때
  • parent process 가 종료되면 OS 는 child process 가 지속되는 것을 막는다.

몇몇 system 들은 parent 가 종료된 후 child 가 존재하는 것을 허용하지 않아, parent 가 종료될 때 child 도 모두 종료시키는데, 이 현상을 cascading termination 이라고 한다.

 

Zombie process

process 가 종료될 때 자원들은 할당이 취소되지만, process entry, exit status, resource usage information 은 parent process 가 wait() 를 호출할 때까지 남아있는다. 이는 parent process 가 해당 정보들을 알아야 하기 때문이다. 이렇게 process 가 종료되었지만 parent 가 wait 를 호출하지 않은 process 를 zombie process 라고 한다.

모든 process 들은 종료될 때 짧게 zombie 상태로 존재하며, parent 가 wait() 를 호출하면 정보를 제공하고 삭제된다.

 

parent 가 child 보다 먼저 종료될 때, 남은 chidl process 를 oprhan process 라고 한다. 이 경우에는 init process 가 child 를 상속한다.

 

 

 

 

참조
Silberschatz_Operating_System_Concepts_10e_2018
광운대 운영체제 강의(안우현 교수, 2021)
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/%5BOS%5D%20System%20Call%20(Fork%20Wait%20Exec).md

'COMPUTER SCIENCE > OS' 카테고리의 다른 글

[OS] Synchronization  (0) 2023.08.16
[OS] Threads  (0) 2023.07.27
[OS] CPU Scheduling  (0) 2023.07.14
[OS] Process - IPC (Interprocess Communication)  (0) 2023.07.10
[OS] Process - Process Concept & Scheduling  (0) 2023.07.03

댓글