운영체제
Deadlock데드락
데드락(Deadlock, 교착 상태)은 두 개 이상의 프로세스·스레드가 서로 상대방이 점유한 자원을 기다리며 영원히 진행되지 못하는 상태다. 1965년 에츠허르 다익스트라가 공식 분석했으며, 운영체제·데이터베이스·분산 시스템에서 반드시 해결해야 할 핵심 문제다.
데드락 발생 조건 (코프만 조건)
다음 4가지 조건이 동시에 성립할 때 데드락이 발생한다.
| 조건 | 설명 |
|---|---|
| 상호 배제 (Mutual Exclusion) | 자원은 한 번에 하나의 프로세스만 사용 |
| 점유와 대기 (Hold & Wait) | 자원을 점유한 채 다른 자원 대기 |
| 비선점 (No Preemption) | 점유한 자원을 강제로 빼앗을 수 없음 |
| 순환 대기 (Circular Wait) | 프로세스들이 원형으로 서로의 자원을 대기 |
데드락 예시
데드락 처리 전략
1. 예방 (Prevention)
코프만 4조건 중 하나를 원천 차단.
| 조건 제거 | 방법 | 단점 |
|---|---|---|
| 점유와 대기 제거 | 모든 자원 한 번에 요청 | 자원 낭비 |
| 비선점 제거 | 자원 강제 회수 허용 | 복잡성 증가 |
| 순환 대기 제거 | 자원에 순서 부여, 오름차순만 요청 | 유연성 감소 |
2. 회피 (Avoidance)
자원 요청 시마다 안전 상태(Safe State)인지 확인 후 허용.
은행원 알고리즘 (Banker's Algorithm)
3. 탐지 & 복구 (Detection & Recovery)
데드락을 허용하되, 주기적으로 탐지 후 복구.
| 복구 방법 | 설명 |
|---|---|
| 프로세스 종료 | 데드락 관련 프로세스 하나씩 종료 |
| 자원 선점 | 일부 프로세스에서 자원 강제 회수 |
| 롤백 | 체크포인트로 되돌리기 |
4. 무시 (Ostrich Algorithm)
데드락 발생 확률이 낮으면 그냥 무시. 사용자가 재시작. (UNIX, Windows 기본 전략)
데드락 vs 라이브락 vs 기아 상태
| 상태 | 설명 |
|---|---|
| 데드락 | 모든 프로세스가 영원히 대기 |
| 라이브락 | 계속 상태는 바뀌지만 진전 없음 |
| 기아(Starvation) | 특정 프로세스가 오랫동안 자원 못 얻음 |
데이터베이스 데드락
관계형 DB에서도 동시 트랜잭션 간 데드락 발생.
DB는 주기적으로 데드락을 탐지해 한 트랜잭션을 롤백.
실제 사례
데이터베이스 데드락: 두 트랜잭션이 서로 상대방 행(Row)의 락을 기다리는 경우. DBMS는 타임아웃이나 데드락 감지 후 한 트랜잭션을 롤백으로 해결한다.
Java 데드락 예시:
운영체제 데드락: 여러 프로세스가 한정된 시스템 자원(메모리 페이지, 입출력 장치)을 서로 기다리는 경우.
관련 개념
- •세마포어 (Semaphore) — 데드락이 발생할 수 있는 동기화 기법
- •운영체제 — 데드락을 관리하는 시스템 소프트웨어
- •큐 (Queue) — 자원 대기 큐 구현
참고문헌
- •Coffman, E. et al. (1971). System Deadlocks — 코프만 조건 최초 정리
- •Silberschatz et al. Operating System Concepts — Chapter 8: Deadlocks
