운영체제 따라잡기

프로세스란 무엇인가

meellon 2026. 6. 21. 05:00

학습 목표

프로그램프로세스의 차이를 설명할 수 있다.

PCB(Process Control Block) 가 담는 정보를 나열할 수 있다.

프로세스 5가지 상태상태 전이를 설명할 수 있다.

컨텍스트 스위칭이 왜 필요하고 무엇이 바뀌는지 설명할 수 있다.

문제 상황

  • nginx 바이너리는 하나인데 ps에는 worker가 여러 개 보인다
    • 실행 파일과 실행 중인 인스턴스가 다른 개념인지 헷갈린다
  • top에서 CPU 0%인 프로세스가 수백 개 있다
    • 멈춘 건지, I/O를 기다리는 건지 구분이 안 된다
  • 코어가 8개인데 프로세스는 수천 개 — 동시에 다 도는 게 아닌 것 같다
    • 누가 다음에 CPU를 쓰는지, 전환할 때 무엇을 저장하는지 모른다
  • kill -9 1234로 특정 PID만 죽인다
    • OS가 프로세스마다 무엇을 추적하는지 모르면 PID·상태를 읽기 어렵다

앞서 시스템 콜과 프로세스 관리 서비스를 봤다. 이번 편은 OS가 실행 단위로 무엇을 관리하는지, PCB·상태·전환으로 잡는다.

1. 프로그램 vs 프로세스

  프로그램 (Program) 프로세스 (Process)
정의 디스크에 있는 실행 파일 (정적) 실행 중인 프로그램 인스턴스 (동적)
상태 파일 내용·메타데이터 CPU 레지스터, 메모리, 열린 파일 등 실행 맥락
개수 같은 바이너리 하나 동시에 여러 프로세스 가능 (nginx worker 등)
생명 삭제 전까지 존재 생성 → 실행 → 종료
  • 프로세스 = 프로그램 + 현재 실행 상태
    • 코드·데이터·힙·스택 등 주소 공간
    • PC(Program Counter), 레지스터, 스케줄링 정보
  • OS는 프로세스마다 PCB로 위 정보를 묶어 관리한다
# 같은 바이너리, 다른 PID = 다른 프로세스
ps -o pid,comm -C nginx

2. PCB (Process Control Block)

OS가 프로세스를 식별·스케줄·전환할 때 쓰는 커널 자료구조다. Linux에서는 task_struct 등으로 구현된다.

PCB 항목 역할
PID 프로세스 고유 식별자
상태 new, ready, running, waiting, terminated
PC·레지스터 다음에 실행할 명령, 연산 결과
메모리 정보 페이지 테이블, 메모리 한계, 스택·힙 포인터
스케줄링 우선순위, 큐 포인터, CPU 사용 시간
I/O·파일 열린 파일 디스크립터, 현재 작업 디렉터리
계정·보안 UID/GID, 자식·부모 PID
  • 유저가 보는 프로세스 = PCB + 사용자 주소 공간
  • 컨텍스트 스위칭 시 PCB 내용을 저장·복원한다

3. 프로세스 상태와 전이

OSC 10/E의 전형적인 5-state 모델이다.

상태 의미
New 생성 중, 아직 ready 큐에 안 올라감
Ready CPU 할당만 기다림, 실행 준비 완료
Running CPU에서 현재 명령 실행 중
Waiting (Blocked) I/O, 자식 종료, 락 등 이벤트 대기
Terminated 실행 끝, 자원 회수 중 또는 완료
전이 조건
New → Ready admit — OS가 프로세스 생성·초기화 완료
Ready → Running dispatch — 스케줄러가 CPU 할당
Running → Ready interrupt / preempt — 타임 슬라이스·우선순위
Running → Waiting I/O request, wait — 블로킹 syscall·이벤트 대기
Waiting → Ready I/O complete, event — 대기 조건 충족
Running → Terminated exit — 정상 종료 또는 시그널
  • 한 코어에서는 running 프로세스가 한 번에 하나
  • top의 대부분 프로세스가 idle에 가깝게 보이는 이유 — waiting·ready가 많기 때문
  • I/O 대기 중인 프로세스는 CPU를 쓰지 않는다

4. 컨텍스트 스위칭

CPU가 프로세스 A에서 B로 넘어갈 때, A의 실행 맥락을 PCB에 저장하고 B의 맥락을 복원한다.

Running: Process A on CPU
  → timer interrupt or syscall (scheduler entry)
    → save A's registers, PC into PCB(A)
    → pick next process (e.g. B from ready queue)
    → load registers, PC from PCB(B)
Running: Process B on CPU
  • 컨텍스트 스위칭 비용
    • 레지스터·PC 저장/복원
    • 캐시·TLB 무효화 가능 — 이후 메모리 접근이 느려질 수 있음
    • 스케줄러 실행 자체도 CPU 시간 소비
  • 그래서 너무 잦은 전환은 오히려 성능을 해친다
    • 스레드·고정 코어 바인딩 등은 이 비용을 줄이려는 실무 대응
구분 내용
트리거 타이머 인터럽트, I/O 블록, yield, 우선순위 변경
저장 위치 각 프로세스 PCB
유저 관점 한 프로세스가 멈춘 것처럼 보이지 않음 (시간 분할)

5. 정리

  • 프로세스는 실행 중인 프로그램 인스턴스이고, OS는 PCB로 추적한다
  • new → ready → running ↔ waiting → terminated 흐름으로 상태를 관리한다
  • CPU는 코어당 running 하나, 전환 시 컨텍스트를 PCB에 저장·복원한다
  • ps·top의 PID·상태·CPU%는 이 모델 위에 올라간 관측값이다

다음에 다룰 것

  • 프로세스 생성과 종료
  • fork / exec, wait, 좀비·고아 프로세스

해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.

'운영체제 따라잡기' 카테고리의 다른 글

스레드  (0) 2026.06.23
프로세스 생성과 종료  (0) 2026.06.22
운영체제 구조와 시스템 콜  (0) 2026.06.20
운영체제의 개념과 구조  (0) 2026.06.19
운영체제 오리엔테이션  (0) 2026.06.15