프로세스 계층 구조

라마·2023년 7월 12일

운영체제

목록 보기
10/32

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

유닉스의 모든 프로세스는 init 프로세스의 자식이 되어 트리 구조를 이룹니다.

계층 구조

프로세스는 일반적으로 부모 - 자식 관계로 이루어집니다.

PID 0,1,2 등의 몇몇 조상 프로세스를 제외한 모든 프로세스는 부모 프로세스에 의해 생성됩니다.

( 조상 프로세스는 부팅 시 OS 차원에서 수작업으로 생성됨 )

부모 - 자식간 실행관계

부모가 자식을 생성한 후 일반적으로 자식의 종료를 기다리는 경우는 아래 그림과 같습니다.

만약 부모가 자식의 종료를 제때 받아주지 못하면 자식 프로세스는 좀비 상태가 됩니다.

좀비 프로세스 제거

좀비 프로세스가 메모리를 차지하지는 않습니다.

하지만, PCB 를 들고있기 때문에 PCB 의 낭비는 발생합니다.

이를 커널 입장에서 살펴보면..

  • PCB 를 유지하기 위한 자원을 소모해야함
  • 커널이 유지할 수 있는 PCB 테이블의 공간을 잡아먹음

때문에, 많은 좀비프로세스가 발생할 경우 시스템 성능에 영향을 줄 수 있습니다.

좀비 프로세스를 제거하려면

  • 부모 프로세스에게 SIGCHLD 신호 보내기 → 부모 프로세스에서 wait() 호출해서 처리
    • 부모에게 SIGCHLD 핸들러가 없다면.. 제거 불가능
  • 부모 프로세스를 강제 종료 → 좀비를 고아 ( Orphan ) 화
    • 좀비는 init 프로세스의 자식이 되고, init 이 wait() 호출해서 좀비 프로세스 제거

고아 프로세스 ( Orphan Process ) 는 부모가 먼저 종료한 자식 프로세스를 의미합니다.

부모 프로세스가 종료될 때 일반적으로

  • 커널은 자식 프로세스가 있는지 확인
  • 자식이 있으면, 자식 프로세스 ( 고아 ) 를 init 프로세스에게 입양
    • PPID 가 1로 변경
    • 혹은 모든 자식 프로세스 강제종료 할수도

다른 프로세스의 종류

  • 백그라운드 프로세스 ( Background Process )

    • 터미널에서 실행되었지만, 터미널 사용자와의 대화가 없는 채 실행되는 프로세스
    • 포그라운드를 빼고 나머지
    • 사용자와 현재 상호작용이 없는 프로세스
  • 포그라운드 프로세스 ( Foreground Process )

    • 내가 현재 창을 선택하고, 내 입력을 독점하는 프로세스
    • 실행되는 동안 터미널 사용자의 입력을 독점하는 프로세스
  • CPU 집중 프로세스 ( CPU Intensive Process )

    • 대부분의 시간을 CPU 작업을 하느라 보내는 프로세스
    • CPU 속도가 성능 좌우
  • I/O 집중 프로세스 ( I/O Intensive Process )

    • 입출력 작업을 하느라 대부분의 시간을 보내는 프로세스
    • 입출력 장치나 윕출력 시스템의 속도가 성능 좌우
  • 운영체제의 스케줄링 우선순위 : I/O 집중 프로세스 > CPU 집중 프로세스

    • I/O 작업하는 동안 다른 프로세스에게 CPU 할당 가능

마지막

  • 0번 프로세스
    • swapper ( UNIX ) : 부팅 담당 및 init 생성
    • idle ( LINUX ) , system idle process ( Windows )
      • 우선 순위가 가장 낮은 프로세스
      • 아무것도 안함
      • 실행중인 프로세스가 1개도 없는 경우, 예외 사항들이 발생하기 때문에 이 상태에 빠지지 않기 위해 만든 프로세스 ( 실행중인 프로세스가 하나도 없으면 얘가 대신 들어가서 동작함 )
  • 2번 프로세스 : kthreadd
    • 커널 프로세스는 커널 공간에서만 실행하는 프로세스를 의미
    • 대부분 커널 스레드 형태로 구동 ( 모든 커널 프로세스의 조상 )

0개의 댓글