프로세스 상태 기계

상태 코드는 CPU를 기다리는지, 사건을 기다리는지 가른다

R, S, D, T, Z는 단순 암기표가 아니라 프로세스가 실행 가능 상태인지, 커널 사건에 묶였는지, 이미 끝났지만 수거되지 않았는지를 알려주는 상태 기계다.

생성

프로세스가 준비된다

주소 공간과 커널 자료구조가 만들어지고 실행 대기열로 들어갈 준비를 한다.

R

실행 가능

지금 CPU를 쓰고 있거나, CPU만 받으면 즉시 실행할 수 있다.

S

깨울 수 있는 대기

네트워크, 타이머, 입력 같은 사건이 오면 다시 실행 가능 상태로 돌아간다.

D

커널 I/O 대기

디스크나 블록 장치 경로에 묶인 상태라 일반 신호로 바로 빠져나오기 어렵다.

Z

종료됐지만 남아 있음

자식은 끝났고 부모가 종료 상태를 아직 수거하지 않은 상태다.

R이 많음

CPU 대기열을 본다

실행 가능 프로세스가 많은 것이므로 병렬도, 우선순위, CPU 포화 여부를 먼저 확인한다.

D가 누적

스토리지 지연을 의심한다

커널 I/O 대기는 강제 종료보다 디스크, NFS, 장치 지연 원인을 찾는 것이 먼저다.

T 상태

중지 신호를 확인한다

디버거, 작업 제어, 중지 신호로 멈춘 경우라면 재개 신호나 부모 셸 상태를 본다.

Z가 남음

부모의 수거 코드를 본다

부모 프로세스를 찾아 자식 종료 상태를 수거하는 루프가 있는지 확인한다.

S가 대부분

정상 대기일 수 있다

서버는 요청 사이에 자는 시간이 많다. 처리량과 깨움 빈도를 함께 본다.

상태 전이

순간값보다 추세를 본다

한 번의 상태보다 같은 코드가 계속 쌓이는지가 병목 판단에 더 중요하다.

판단 기준

Ready와 Waiting의 차이는 CPU만 있으면 실행 가능한지다. Zombie는 CPU 문제가 아니라 부모가 자식의 종료 상태를 수거하지 않은 프로세스 관리 문제다.