본문 바로가기
Computer Science/Operating System

[Pluto의 컴퓨터 이야기] Process의 생성과 종료

by Dev. Pluto 2022. 2. 24.
반응형

안녕하세요! 플루토입니다. 오늘은 프로세스가 새로 만들어질 때 그리고 역할을 다 한 프로세스가 종료되며 없어질 때 까지의 일련의 과정들을 알아보는 시간을 갖도록 하겠습니다. 

 

 

이전 시간에는 프로세스와 스레드의 차이를 알아보는 시간을 가졌습니다. 

프로세스에 처음 접해보시거나, 대한 간략한 개념과 설명을 보고싶다면 해당 링크를 통해 잠깐 읽고 오시길 권장합니다.

 

2022.02.20 - [Computer Science/Operating System] - [Pluto의 컴퓨터이야기] Process 와 Thread의 차이는 뭘까?

 

[Pluto의 컴퓨터이야기] Process 와 Thread의 차이는 뭘까?

안녕하세요! 플루토입니다. 오늘은 컴퓨터와 사용자를 이어주는 운영체제에 대해서 프로세스와 스레드의 차이를 알아보는 시간을 가지도록 하겠습니다. 글을 읽고 난 뒤의 여러분은 1. 운영체

ys-log.tistory.com

 

 

이 글을 읽고난 뒤 여러분은
1. 프로세스가 생성되고 종료되는 방법에 대해 이해할 수 있습니다. 
2. 프로세스가 생성되고 어떤 방식으로 관리되는지 이해할 수 있습니다. 
3. 프로세스가 유지하는 정보인 PCB  에 대해서 이해할 수 있습니다.
4. 프로세스를 생성하는 대표적인 함수인 fork(), exec()함수에 대해 이해할 수 있습니다. 

 

 

1. 프로세스의 생성

 

먼저 전원이 꺼져있던 컴퓨터가 실행이 될 때 모든 프로세스의 최상위 Parent가 되는 init이라는 이름의 PID 1의 프로세스가 특별한 과정을 거쳐 생성이 됩니다. 이후 다른 프로세스들은 모두 init프로세스로 부터 인스턴스화 하여 만들어 내게 됩니다.

 

이전 시간에 운영체제가 새로운 프로세스를 만드는 방법은 특정 프로세스를 복제하여 만드는 방법밖에 없기 때문에 프로세스 간에 Parent/child관계가 형성이 된다! 라고 설명하였는데 이러한 이유가 바로 init프로세스를 복제하여 만들어진 프로세스들이 또 복사되고 하는 과정을 거치기 때문입니다. 

 

   프로세스의 생성과 실행

 

- 부모 프로세스는 자신의 메모리 공간을 완전히 복사하여 자식 프로세스에게 할당하기 때문에 자식 프로세스는 부모 프로세스의 리소스나 권한들을 그대로 이용할 수 있습니다. (필요에 따른 코드영역만 변경하여 사용합니다.)

 

- 부모 프로세스는 자식의 작업이 끝날때까지 기다릴 수도 있으며 동시에 작업이 이루어질 수도 있습니다.

 

운영체제는 많은 개수의 프로세스를 관리하기 위해 큐 의 형태를 가지는 State Queue를 여러개 유지하여 프로세스들을 관리하게 됩니다.

이름에서 알 수 있듯, 프로세스의 상태에 따라 해당되는 큐에 넣어 관리합니다

 

운영체제가 관리하는 상태 큐

 

2. 프로세스의 종료

 

제 역할을 다한 프로세스는 운영체제에게 반납되어 낭비되는 자원이 되지 않도록 해야할 필요가 있습니다. 

따라서 프로세스가 종료되는 상황은 네 가지로 나누어 볼 수 있습니다.

 

  • 일반적인 종료(정상적인 프로그램 실행이 끝나고 난 뒤)
  • 에러 종료(사용자(프로그래머)가 지정한 오류에 따라 프로그램이 의도적으로 종료된 것)
  • Fatal error(예기치 모한 오류의 발생으로 인한 종료)→resource의 고갈, segment fault, protection fault등이 대표적입니다.
  • 타 프로세스에 의해 종료되는 경우(보통 signal 을 통해 가능합니다.) → 리눅스의 Kill 명령어 등

 

 

프로세스의 생성 ~ 소멸까지의 상태를 나타낸 그림. 

 

3. 프로세스가 유지하는 정보(Process Control Block)

컴퓨터 내부에는 여러 프로세스가 존재할 수 있고 현대의 CPU는 단일 코어가 아닌 여러 개의 코어가 동시에 동작하며 여러 프로세스를 동작시킬 수 있는 멀티 프로세서 입니다. 따라서 프로세스는 작업 중간에 다른 프로세스로 교체될 수 있기 때문에 자신의 작업이 어디까지 진행이 됐는지 정보를 유지할 필요가 있습니다. 이를 PCB라고 줄여서 말하게 됩니다. 각 프로세스마다 하나씩 존재하며 kernel space에 저장합니다.

 

  • 프로세스의 상태
  • PC register 정보
  • 컨택스트 스위칭 이전의 Cpu register들의 정보
  • 해당 프로세스가 열어놓은 파일 등으 정보
  • 자신의 PID등 기타 정보

등을 관리할 수 있는 형태의 자료구조입니다.

 

프로세스가 작게 경량화 된 스레드에도 TCB라는 비슷한 개념의 자료가 있습니다. 

 

 

4. fork(), exec()의 관계

 

 

프로세스를 새롭게 만든다는 것은 같은 프로그램을 두개 실행시키는 경우도 있지만, 일반적으로는 대게 다른 작업의 실행을 위해 만들게 됩니다. 하지만 단순히 부모 프로세스의 모든 정보를 그대로 복사만 하면 다른 작업을 수행하기 위한 의도와 맞지 않는데, exec()함수 (System call이기도 합니다.)가 fork()로 부모 프로세스로부터 완전히 같은 프로세스를 만들었다면 이를 새로히 만들어진 프로세스에서 실행할 다른 프로그램의 코드, data 영역을 덮어 씀으로써 다른 프로그램을 실행할 수 있도록 하는 것입니다.

 

 

 

부모 프로세스에서 새롭게 fork()되고 새로운 프로그램의 데이터로 exec()되는 과정

 

 

오늘은 프로세스의 생성과 종료, 그리고 새롭게 프로세스를 만드는 두 개의 system call에 대해서 알아보고 그 원리를 이해하는 시간을 가졌습니다.

 

제 블로그에 담긴 정보가 100% 정확하지 않습니다. 좋은 비판은 감사히 받아들이겠습니다! 

긴 글 읽어주셔서 감사합니다!🙏

반응형