IT 초보 탈출 100일 챌린지
[100일의 IT 초보 탈출] #43 데드락(Deadlock) _ 서로 기다리다 멈춰버린 시스템
Prof.SSong
2025. 6. 4. 22:28
728x90
반응형
오늘은 무엇을 배우게 될까요?
컴퓨터는 동시에 여러 프로그램을 실행하지만,
때때로 서로가 서로를 기다리다가 아무 일도 못 하는 상황이 발생합니다.
예를 들어, A 작업은 B 작업의 결과를 기다리고, B는 A가 끝나기를 기다린다면?
→ 둘 다 멈춘 채 아무 일도 못 하게 되죠.
이처럼 프로세스들이 서로 자원을 기다리며 무한 대기 상태에 빠지는 현상,
바로 오늘 배울 “데드락(Deadlock)”입니다.
데드락이란?
데드락(교착 상태)은 둘 이상의 프로세스가
서로가 가진 자원을 기다리며 무기한 대기 상태에 빠지는 현상입니다.
→ 결국 어떤 작업도 진행되지 않는, 시스템 정지 상태가 됩니다.
실생활 예시로 이해하기
두 사람이 식당에서 식사를 하려 합니다.
- 사람 A는 포크를 먼저 집고 나이프를 기다리고 있고 사람 B는 나이프를 먼저 집고 포크를 기다리고 있다면?
→ 두 사람은 서로가 놓지 않는 이상 식사를 시작할 수 없습니다.
→ 이것이 바로 데드락!
데드락 발생 조건 (Coffman 조건)
데드락은 다음 네 가지 조건이 동시에 성립될 때 발생합니다.
조건설명
상호 배제(Mutual Exclusion) | 한 번에 하나의 프로세스만 자원 사용 가능 |
점유 대기(Hold and Wait) | 자원을 가진 채 다른 자원을 기다림 |
비선점(No Preemption) | 강제로 자원을 뺏을 수 없음 |
순환 대기(Circular Wait) | 자원 요청이 원형 고리처럼 순환함 |
이 네 가지를 모두 만족하면 데드락이 발생할 수 있어요.
예시 상황 정리
프로세스자원 A(프린터)자원 B(파일)
P1 | 사용 중 | 요청 중 |
P2 | 요청 중 | 사용 중 |
→ P1은 B가 필요하고, P2는 A가 필요함
→ 서로의 자원을 기다리며 무한 대기
→ 데드락 발생!
데드락 해결 방법은?
1. 데드락 예방 (Prevention)
- 네 가지 조건 중 하나라도 미리 제거
- 예: 순환 대기를 없애기 위해 자원에 고정된 순서를 부여
- 단점: 시스템 사용 효율이 떨어질 수 있음
2. 데드락 회피 (Avoidance)
- 실행 전에 위험한 상태인지 판단 후 자원 할당
- 대표적 알고리즘: 은행가 알고리즘(Banker’s Algorithm)
- 단점: 현재 상태와 미래 요청을 모두 예측해야 함 → 비현실적
3. 데드락 발견 후 처리 (Detection & Recovery)
- 데드락이 발생했는지 검사 → 이후 회복 절차 진행
- 예: 강제로 프로세스 종료하거나 자원 회수
- 단점: 일시적 시스템 멈춤 발생 가능
은행가 알고리즘 (간단 소개)
- 운영체제가 모든 자원의 총량, 현재 사용량, 요청량을 바탕으로 이 요청을 수락하면 안전 상태인지 확인한 뒤 자원 할당
- 실무에서 구현 복잡도 높아 자주 사용되진 않음
실무에서는 어떻게 대응할까?
- 대부분은 데드락을 예방하는 설계를 함
- 자원 요청 순서를 정하거나, 타임아웃 설정으로 대기시간 제한
- 시스템 다운 방지를 위해 자동 감지 + 롤백 처리 등 도입
데드락과 관련된 용어들
용어설명
Starvation | 낮은 우선순위 작업이 계속 무시되어 실행되지 못하는 현상 |
Livelock | 서로 양보하며 계속 상태가 바뀌지만, 실제 실행은 안 됨 |
Race Condition | 여러 스레드가 동시에 자원 접근하며 예기치 않은 결과 발생 |
한 줄 요약
👉 데드락은 여러 작업이 서로 자원을 기다리며 무한정 멈춰버리는 상황이고, 운영체제는 이를 예방하거나 회피 또는 해결해야 합니다.
728x90
반응형