다섯 살도 알 수 있게 · 시스템SW

교착상태와 기아현상이 뭐예요?

교착상태와 기아현상을, 서로 다른 열쇠를 쥔 채 서로를 기다리는 정비사 이야기로 풀어봤어요.

상대 열쇠가 있어야 끝나는데…정비사1은 2번 열쇠를, 정비사2는 1번 열쇠를 기다려요둘 다 자기 열쇠는 안 놓고, 서로의 열쇠만 바라봐요

정비사 둘이 서로 다른 열쇠를 쥔 채, 상대의 열쇠를 기다려요.둘 다 자기 열쇠는 안 놓고, 서로의 열쇠만 바라봐요.

교착상태 네 조건상호배제: 한 번에 한 명만점유대기: 쥔 채로 더 기다림비선점: 쥔 열쇠를 억지로 못 뺏음순환대기: 서로 빙 돌며 기다림이 네 가지가 동시에 맞아야만 공장이 멈춰요하나만 깨도 교착상태는 안 생겨요

교착상태는 네 가지 조건이 한꺼번에 맞아야 생겨요.하나만 깨도 교착상태는 안 생겨요.

교착상태 = 서로의 열쇠를 기다리며 영원히 멈추는 것둘 다 더 못 움직여요 — 누군가 개입하지 않으면 영원히요

교착상태 = 서로의 열쇠를 기다리며 영원히 멈추는 것이에요.누군가 개입하지 않으면 둘 다 영원히 못 움직여요.

상호배제열쇠는 한 번에 한 명만 쥐어요
점유대기쥔 채로 다른 열쇠를 더 기다려요
비선점남이 쥔 열쇠를 억지로 못 뺏어요
순환대기서로 빙 돌며 기다려요
해결 전략예방: 네 조건 중 하나를 미리 깨기회피: 안전한 순서만 허락하기탐지+복구: 발견 후 하나를 되돌리기무시: 자주 안 생기면 그냥 둠반장은 상황에 맞춰 전략을 골라요실제로는 '무시'(타조 알고리즘)도 흔한 선택이에요

교착상태를 다루는 전략은 네 가지예요.실제로는 '무시'(타조 알고리즘)도 흔한 선택이에요.

작업 순서판급한 차 #9급한 차 #10급한 차 #11제 차는 대체 언제…급한 차가 계속 새치기해서, 낮은 우선순위 차는 차례가 안 와요공장은 계속 돌아가는데, 이 차만 순서가 안 와요(기아현상)

기아현상 — 공장은 돌아가는데 한 차만 계속 밀려요.공장이 멈춘 게 아니라, 이 차의 차례만 영원히 안 와요.

한 줄로

교착상태 = 서로 다른 자원(열쇠)을 쥔 채 서로를 기다리며 영원히 멈추는 것. 기아현상은 멈추진 않지만 한쪽이 차례를 계속 못 받는 것.

교착상태는 상호배제(Mutual Exclusion), 점유대기(Hold and Wait), 비선점(No Preemption), 순환대기(Circular Wait) 네 조건이 동시에 성립할 때 발생해요. 해결책은 예방(조건을 깨도록 설계), 회피(은행원 알고리즘처럼 안전 상태만 허용), 탐지 후 복구, 또는 무시(타조 알고리즘)로 나뉘어요. 기아현상은 교착상태와 달리 시스템이 계속 돌아가지만, 특정 프로세스가 스케줄링·우선순위 때문에 자원을 계속 못 받는 상태예요.

어른들은 이렇게 불러요

상호배제
Mutual Exclusion
열쇠 한 개는 한 번에 한 명만. 교착상태 네 조건 중 하나예요.
순환대기
Circular Wait
서로 빙 돌며 상대 열쇠를 기다림. 이 기다림의 고리를 끊으면 교착상태도 끊겨요.
기아현상
Starvation
한 차만 계속 순서에서 밀림. 멈춤이 아니라 '영원한 미룸'이에요.
CPU 스케줄링
CPU Scheduling
순서판에 적힌 차 순서 규칙. 우선순위 규칙이 기아현상을 만들기도 해요. → 리프트에 누가 먼저 올라갈까
동기화(세마포어·뮤텍스)
Synchronization
리프트 열쇠를 나눠주는 규칙. 교착상태는 동기화 도구를 잘못 쓸 때 자주 생겨요. → 리프트 열쇠는 하나뿐
프로세스/스레드
Process/Thread
같은 차를 같이 고치는 여러 손. 교착상태는 스레드끼리도, 프로세스끼리도 생겨요. → 같은 차, 여러 손
가상메모리
Virtual Memory
창고 전체를 내 것처럼 보여주는 가짜 지도. 한정된 자원을 나눠 쓰는 또 다른 예예요. → 창고 전체를 내 것처럼 보여주는 가짜 지도
오케스트레이션
Orchestration
SRE 분야의 '순서 정하기'. 분산 시스템에서도 자원 교착은 비슷하게 다뤄요. → SRE 분야의 오케스트레이션
다음 이야기
수백 명이 함께 움직이는 보조 정비팀 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →