컴퓨터 구조 & 운영체제/운영체제

[운영체제] 프로세스 상태와 계층 구조

ReBugs 2023. 6. 26.

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


프로세스 상태(process state)

우리가 컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아 가면서 실행된다.
그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행된다.
운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다.
프로세스의 상태를 표현하는 방식은 운영체제마다 다르지만 대표적인 상태는 아래와 같다.
 

생성 상태

  • 이제 막 메모리에 적재되어 PCB를 할당받은 상태
  • 준비가 완료되었다면 준비상태가 된다.

 

준비 상태

  • 당장이라도 CPU를 할당받아 실행할 수 있지만 자신의 차례가 아니기에 기다리는 상태
  • 자신의 차례가 된다면 실행상태가 된다.
  • 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(dispatch)라고 한다.

 

실행 상태

  • CPU를 할당 받아 실행 중인 상태
  • 할당된 시간 모두 사용 시(타이머 인터럽트 발생 시) 준비 상태가 된다.
  • 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때까지 대기 상태가 된다.

 

대기 상태

  • 프로세스가 실행 도중 입출력장치를 사용하는 경우
  • 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태가 된다.
  • 입출력 작업이 끝나면(입출력 완료 인터럽트를 받으면) 준비 상태가 된다.
대기 상태의 일반적인 정의
프로세스가 대기 상태가 되는 이유에 입출력 작업만 있는 것은 아니다.
프로세스가 대기 상태가 되는 대부분의 원인이 입출력 작업인 것은 맞지만
더 일반적으로 표현하자면 특정 이벤트가 일어나길 기다릴 때 프로세스는 대기 상태가 된다.

 

종료 상태

  • 프로세스가 종료된 상태
  • PCB, 프로세스의 메모리 영역에서 정리된다.

 

프로세스 상태 다이어그램(process state diagram)

운영체제는 이러한 상태를 PCB에 기록하며 프로세스들을 관리한다.
 


 

프로세스 계층 구조

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.

  • 부모 프로세스(parent process) : 새 프로세스를 생성한 프로세스
  • 자식 프로세스(child process) : 부모 프로세스에 의해 생성된 프로세스

부모 프로세스와 자식 프로세스는 엄연히 다른 프로세스이기에 각기 다른 PID를 가진다.
일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 한다.
 
또한 자식 프로세스는 또 다른 자식 프로세스를 생성할 수 있다.
많은 운영체제는 이처럼 프로세스가 프로세스를 낳는 계층적인 구조로써 프로세스들을 관리한다.
컴퓨터가 부팅될 때 실행되는 최초의 프로세스가 자식 프로세스들을 생성하고, 생성된 자식 프로세스들이 새로운 프로세스들을 낳는 형식으로 여러 프로세스가 동시에 실행되는 것이다.
 
이 과정을 도표로 그리면 트리 구조를 띄는데, 이를 프로세스 계층 구조라고 한다.

위 그림은 사용자가 컴퓨터를 켜고 로그인 창을 통해 성공적으로 로그인해서 bash 셸(UI)로 Vim이라는 문서 편집기 프로그램을 실행했다고 가정한 것이다.

데몬이나 서비스 또한 최초 프로세스의 자식 프로세스이다.

 


 

프로세스 생성 기법

이하 내용은 윈도우 OS와 관련이 없으나 수많은 OS의 핵심개념이다.

부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.

  • fork(복제) 시스템 호출 : 부모 프로세스는 자신의 복사본을 자식 프로세스로 생성
  • exec(옷 갈아입기)시스템 호출 : 자식 프로세스는 자신의 메모리 공간을 다른 프로그램으로 교체

 

fork 시스템 호출

  • 복사본(=자식 프로세스) 생성
  • 부모 프로세스의 자원 상속

fork(복제)를 그림으로 나타내면 아래와 같다.

 

exec 시스템 호출

  • 메모리 공간을 새로운 프로그램으로 덮어쓰기
  • 코드/데이터 영역은 실행할 프로그램 내용으로 바뀌고 나머지 영역은 초기화

fork(복제)와 exec(옷 갈아입기) 시스템 호출을 그림을 나타내면 아래와 같다.

 
부모가 자식 프로세스를 실행하며 프로세스 계층 구조를 이루는 과정은 fork와 exec가 반복되는 과정이라 볼 수 있다.

부모 프로세스로부터 자식 프로세스가 복사되고, 자식 프로세스는 새로운 프로그램으로 옷을 갈아입고, 또 그 자식 프로세스로부터 자식 프로세스가 복사되고, 옷을 갈아입는 방식으로 여러 프로세스가 계층적으로 실행된다.

댓글