다섯 살도 알 수 있게 · 시스템SW
교착상태와 기아현상이 뭐예요?
교착상태와 기아현상을, 서로 다른 열쇠를 쥔 채 서로를 기다리는 정비사 이야기로 풀어봤어요.
정비사 둘이 서로 다른 열쇠를 쥔 채, 상대의 열쇠를 기다려요.둘 다 자기 열쇠는 안 놓고, 서로의 열쇠만 바라봐요.
교착상태는 네 가지 조건이 한꺼번에 맞아야 생겨요.하나만 깨도 교착상태는 안 생겨요.
교착상태 = 서로의 열쇠를 기다리며 영원히 멈추는 것이에요.누군가 개입하지 않으면 둘 다 영원히 못 움직여요.
상호배제열쇠는 한 번에 한 명만 쥐어요
점유대기쥔 채로 다른 열쇠를 더 기다려요
비선점남이 쥔 열쇠를 억지로 못 뺏어요
순환대기서로 빙 돌며 기다려요
교착상태를 다루는 전략은 네 가지예요.실제로는 '무시'(타조 알고리즘)도 흔한 선택이에요.
기아현상 — 공장은 돌아가는데 한 차만 계속 밀려요.공장이 멈춘 게 아니라, 이 차의 차례만 영원히 안 와요.
한 줄로
교착상태 = 서로 다른 자원(열쇠)을 쥔 채 서로를 기다리며 영원히 멈추는 것. 기아현상은 멈추진 않지만 한쪽이 차례를 계속 못 받는 것.
교착상태는 상호배제(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 분야의 오케스트레이션
다음 이야기
수백 명이 함께 움직이는 보조 정비팀 →