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문제를 먼저 풀어볼 수도 있어요.