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
반응형