프로세스 상태 및 구조

김연준·2025년 4월 8일
post-thumbnail

프로세스의 상태와 계층 구조

운영체제를 깊이 이해하려면, 프로세스의 상태 변화와 생성 구조를 반드시 알아야 합니다.
이 글에서는 프로세스의 상태(state), 계층 구조, 그리고 프로세스 생성 방식(fork/exec)을 다뤄보겠습니다.


🧠 프로세스의 상태

운영체제는 프로세스를 다음과 같은 5가지 상태로 구분하여 관리한다.

상태설명
생성 상태 (new)프로세스가 생성 중인 초기 상태. PCB가 할당됨
준비 상태 (ready)CPU 할당을 기다리는 대기 상태
실행 상태 (running)CPU를 할당받아 실제 실행 중인 상태
대기 상태 (waiting)입출력 작업 등을 기다리며 대기하는 상태
종료 상태 (terminated)프로세스가 종료된 상태. PCB와 메모리가 정리됨

📌 상태 전이 예시

  • 실행 중 타이머 인터럽트 발생 → 다시 준비 상태로 전환
  • 실행 중 입출력 요청 발생 → 대기 상태로 전환
  • 입출력 완료 → 준비 상태 복귀

🌳프로세스의 계층 구조

운영체제는 프로세스를 트리 형태로 계층적으로 관리한다.

🧩 부모와 자식 프로세스

  • 프로세스가 시스템 호출을 통해 새로운 프로세스를 생성하면,
    • 생성자 = 부모 프로세스
    • 생성된 프로세스 = 자식 프로세스
  • 각 프로세스는 고유한 PID를 갖는다.
  • 일부 운영체제는 PCB에 부모의 PID(PPID)를 기록함.

🌲 계층 구조

  • 컴퓨터 부팅 시 최초의 프로세스가 생성됨
  • 이후 자식 프로세스들이 연속적으로 생성되어 트리 구조 형성
운영체제최초 프로세스명PID
Unixinit1
Linuxsystemd1
macOSlaunchd1

🔍 pstree 명령어를 통해 현재 시스템의 프로세스 계층 구조를 시각화할 수 있다.


🔧 프로세스 생성 기법

운영체제는 fork()exec() 시스템 호출을 이용해 새로운 프로세스를 생성한다.

1️⃣ fork() - 복사

  • 부모 프로세스를 그대로 복사하여 자식 프로세스를 생성
  • PID와 메모리 위치는 다르지만, 코드, 데이터 등은 동일
  • 자식이 바로 exec()를 호출하지 않으면, 부모와 동일한 코드 실행

2️⃣ exec() - 변환

  • 자식 프로세스가 실행 중인 코드를 다른 프로그램으로 교체
  • 코드 영역과 데이터 영역을 새로운 프로그램으로 덮어씀
  • 나머지 영역(힙, 스택)은 초기화됨

📌 자식 프로세스를 독립적인 새 프로그램으로 만들고 싶다면, fork()exec() 호출이 필수


🧾 정리

  • 프로세스는 상태에 따라 동작 흐름이 전환되고,
  • 트리 구조로 계층화되어 관리되며,
  • forkexec의 반복을 통해 생성된다.
profile
Live a life you will remember

5개의 댓글

comment-user-thumbnail
2025년 4월 12일

좋은 글 감사합니다... 프로세스 계층이 트리 구조라고 하셨는데 unix,Linux,macOS 가 동일하게 흘러가나요? 아니면 각자 조금씩 다르게 흘러가나요?

1개의 답글
comment-user-thumbnail
2025년 4월 15일

언제 올리시나요 ? 일주일이나 됐는데 ... 공부 놓으신거 아니죠?

답글 달기