Foundry
운영체제
기초
핵심

프로세스 상태

New, Ready, Running, Blocked, Terminated 상태 전이

프로세스 상태

프로세스는 생성부터 종료까지 여러 상태를 전이하며 CPU를 공유한다.

5가지 상태

[생성] → [준비] ⇄ [실행] → [종료]
  New    Ready   Running  Terminated
              ↕
           [대기]
           Waiting

상태 전이

전이설명트리거
New → Ready프로세스 생성 완료fork()
Ready → RunningCPU 할당스케줄러 dispatch
Running → ReadyCPU 빼앗김타임 슬라이스 만료
Running → WaitingI/O 요청read(), sleep()
Waiting → ReadyI/O 완료인터럽트
Running → Terminated실행 완료exit()

상태 전이 예시

[웹 서버 프로세스]

1. 서버 시작 → New → Ready
2. CPU 할당 → Running (요청 처리)
3. DB 쿼리 → Waiting (I/O 대기)
4. 쿼리 완료 → Ready (대기열)
5. CPU 다시 할당 → Running (응답)
6. 타임아웃 → Ready (선점당함)

Ready Queue와 Wait Queue

CPU: [  Running  ]
      ↑ dispatch
[Ready Queue]
  P1 → P3 → P7 → ...

[I/O Wait Queue]
  디스크: P2 → P5
  네트워크: P4 → P6

좀비/고아 프로세스

상태설명문제
좀비종료했지만 부모가 wait() 안 함PID 낭비
고아부모가 먼저 종료init이 입양
좀비 프로세스:
자식: exit() → Terminated (좀비)
부모: wait() 안 호출 → PCB 남아있음

해결: 부모가 wait()/waitpid() 호출
면접에서 이렇게 나옵니다

Q.프로세스의 5가지 상태와 전이를 설명해주세요.

상태나가는 경로
생성만들어지는 중준비로
준비실행할 수 있고 CPU 를 기다린다스케줄러가 고르면 실행으로
실행CPU 를 쓰고 있다시간이 다하면 준비로, I/O 요청이면 대기로, 끝나면 종료로
대기I/O 나 이벤트를 기다린다완료되면 준비로
종료끝났고 정리를 기다린다부모가 거두면 사라진다

주의할 전이는 대기에서 실행으로 바로 가지 않는다는 점입니다. I/O 가 끝나면 준비 상태로 가서 다시 순번을 기다립니다.

리눅스에서는 대기를 둘로 나눕니다. 신호로 깨울 수 있는 것과, 끊을 수 없는 입출력 대기입니다. 후자는 kill 로도 종료되지 않아 디스크나 네트워크 저장소 문제를 진단하는 신호가 됩니다.

흔한 실수: 준비와 대기를 같은 것으로 보는 것. 준비는 CPU 만 있으면 바로 돌 수 있고, 대기는 CPU 를 줘도 할 일이 없습니다.

Q.Running에서 Ready로 돌아가는 경우는?

CPU 를 뺏길 때입니다. 스스로 내려놓는 것이 아닙니다.

경우내용
시간 할당량 소진배정된 시간이 끝나 스케줄러가 회수한다
더 높은 우선순위 등장선점형 스케줄러가 자리를 넘긴다
인터럽트 처리 후다른 프로세스가 준비 상태가 되어 재선택된다
자발적 양보yield 로 스스로 내려놓는다

I/O 를 요청할 때는 준비가 아니라 대기로 갑니다. 할 일이 없어 CPU 를 줘도 못 쓰기 때문입니다. 이 구분이 이 질문의 요지입니다.

비선점형 스케줄러에서는 첫 두 경우가 없습니다. 한 번 실행되면 끝나거나 I/O 를 요청할 때까지 CPU 를 놓지 않아, 짧은 작업이 긴 작업 뒤에서 오래 기다립니다.

흔한 실수: I/O 요청 시 준비로 간다고 답하는 것. 대기로 갔다가 완료 후 준비로 돌아옵니다.

Q.I/O 바운드와 CPU 바운드 프로세스의 차이는?

시간을 어디서 쓰는지가 다릅니다.

항목I/O 바운드CPU 바운드
대부분의 시간디스크와 네트워크 대기계산
웹 서버, 파일 처리, DB 조회영상 인코딩, 암호화, 정렬
실행 구간짧게 자주길게 이어서
늘려야 할 것동시 실행 수코어 수

스케줄러도 이 둘을 다르게 다룹니다. I/O 바운드는 짧게 쓰고 금방 대기로 가므로 우선순위를 높여도 다른 프로세스를 오래 막지 않습니다. 그래서 다단계 큐 스케줄러는 짧게 쓰고 내려가는 프로세스의 우선순위를 유지합니다.

실무에서는 스레드풀 크기를 정할 때 이 구분을 씁니다. CPU 중심이면 코어 수 안팎, I/O 대기가 길면 그 비율만큼 크게 잡습니다.

흔한 실수: 하나의 프로그램을 둘 중 하나로 단정하는 것. 구간마다 다릅니다. 파일을 읽어(I/O) 압축하는(CPU) 작업처럼 섞여 있으면 측정으로 비율을 봐야 합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

운영체제 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.