본문 바로가기
CS/운영체제

9. 프로세스 계층 구조

by D.O.T 2024. 4. 21.
프로세스는 부모 - 자식 관계이다.

 

윈도우에서는 프로세스는 모두 동등한 관계이지만, 다른 OS에서는 다르다.

최초에 실행되는 #0 프로세스가 조상 프로세스로 이후로 자식 프로세스들이 뻗어져 나가는 형태이다.

하나의 부모는 여럿의 자식을 가질 수 있는 형태이다. 

 

이 말은, #0 프로세스를 제외한 나머지 모든 프로세스는 부모 프로세스를 가지고 있다는 의미이다.

리눅스의 경우 #0 - Idle Process, #1 - Init Process, #2 - kthreadd Process 로 조상 프로세스가 구성되어있다.

각 각, CPU가 놀지 않기 위한 용도, 사용자 프로세스의 조상 프로세스, 커널 프로세스의 조상 프로세스의 역할을 한다.

 

Linux 환경에서 ps -eal, pstree 0 명령으로 직접 확인할 수 있다.

※ 보통 0번 프로세스는 CPU가 아무것도 하지 않는 것을 막기 위해 생성되고 유닉스 계열의 경우 1번 프로세스와 2번 프로세스를 생성한다.

 

부모 프로세스와 자식 프로세스간의 관계

 

부모 프로세스가 자식 프로세스의 종료를 확인

 

  • 부모 프로세스가 fork() 함수를 통해 자식 프로세스를 생성한다.
  • 부모는 부모대로, 자식은 자식대로 각자 맡은 역할을 하게 된다.
    • 부모 프로세스가 먼저 일이 끝났을 경우 Wait() 함수로 대기
    • 자식 프로세스가 먼저 일이 끝났을 경우 return 또는 exit() 함수에 종료코드를 작성하고 좀비 상태
      이 때, PCB status에 종료코드와 Terminate Status가 기록되고 메모리는 반환한다.
  • 부모 프로세스에서 할 일을 마치고 wait() 함수로 자식의 상태를 확인한다. 
    • 자식이 좀비상태인 경우, 자식 프로세스를 종료시킨다.
    • 자식이 실행 중인 경우 계속 해서 wait를 지속한다.
  • 만약 부모 프로세스에서 wait() 없이 부모 프로세스가 종료될 경우, 좀비 프로세스의 조상프로세스가 부모가 된다. 조상 프로세스의 wait()을 통해 종료될 수 있다.
고아 프로세스 (Orphan Process)

 

앞서 부모 프로세스가 먼저 종료될 경우, 조상 프로세스에서 종료하게 되는데 이 때, 부모가 먼저 종료된 좀비 프로세스는 고아 프로세스라고 부른다. 하지만 OS나 쉘에 따라 부모 프로세스가 종료되는 경우 자식 프로세스도 같이 종료시키는 경우도 존재한다.


프로세스의 제어

 

부모 프로세스와 자식 프로세스 관계에서 생성되고 종료되는 제어는 어떻게 이루어질까?

컴퓨터 시스템에서 프로세스가 생성되는 경우를 정리한다.

  • 시스템 부팅 시
  • 사용자 로그인 후 bash와 같은 쉘 프로세스 생성
  • 새로운 프로세스를 생성하도록 하는 사용자의 명령 - 실행파일 실행
  • 배치 작업 실행시, 작업 스케줄
  • 사용자 프로그램이 시스템 호출로 새 프로세스 생성 - fork()
    • 커널이 시스템 호출로 새 자식 프로세스를 생성한다.

프로세스 생성시, PID 번호를 할당하고 PCB 구조체를 생성한다. 프로세스 테이블에 PCB가 연결되고 메모리 공간이 할당된다. 이 때, PCB에 프로세스 정보를 기록하고 Status를 Ready로 표시한 뒤 Ready Queue에 삽입해 스케줄한다.

 

프로세스 오버레이 (Process Overlay)

 

리눅스 환경에서 exec() 함수와 같은 시스템 호출로 fork()를 통해 생성된 자식 프로세스에 새로운 프로세스를 덮어씌우는 방법도 있다.

Overlay, exec() 함수 실행


프로세스 종료의 경우 두 가지가 있다.

  • exit(), return
  • 다른 프로세스에 의한 강제 종료(Kill)

모든 자원을 반환하고 자식 프로세스가 존재하는 경우 Init 프로세스에 입양한다.

자식 프로세스의 경우 부모에게 SIGCHLD 신호를 전송한다.

'CS > 운영체제' 카테고리의 다른 글

11. 스레드 주소 공간과 컨텍스트  (0) 2024.04.22
10. 스레드 (Thread)  (0) 2024.04.21
8. 프로세스 제어 블록 (PCB, Process Control Block)  (0) 2024.04.21
7. 프로세스 (Process)  (0) 2024.04.21
6. 커널 (Kernal)  (0) 2024.04.21