본문 바로가기

공부 기록/영상 후기

데드락(교착상태)은 프로그램에 치명적이죠 T^T 언제 발생하고 어떻게 해결하는지 살펴봅시다~! 간단한 자바 예제도 있어요~!!

https://youtu.be/ESXCSNGFVto?si=2ueHZGkctbTEsUnK 

Deadlock(교착 상태) : 두 개 이상의 프로세스 혹은 스레드가 서로가 가진 리소스를 기다리는 상태

 

데드락을 만드는 네 가지 조건

1. Mutual exclusion : 리소스를 공유해서 사용할 수 없다.

2. Hold and wait : 프로세스가 이미 하나 이상의 리소스를 취득한(hold) 상태에서 다른 프로세스가 사용하고 있는 리소스를 추가로 기다린다.(wait)

3. No preemption : 리소스 반환은 오직 그 리소스를 취득한 프로세스만 할 수 있다.

4. Circular wait : 프로세스들이 순환 형태로 서로의 리소스를 기다린다.

 

OS의 데드락 해결 방법

1. 데드락 방지 : 네 가지 조건 중 하나가 충족되지 않게 시스템을 디자인

   - 1) 리소스를 공유 가능하게 함 (현실적으로 불가능)

   - 2) 사용할 리소스들을 모두 획득한 뒤에 시작 / 리소스를 전혀 가지지 않은 상태에서만 리소스 요청

   - 3) 추가적인 리소스를 기다려야 한다면 이미 획득한 리소스를 다른 프로세스가 선점 가능하도록 함

   - 4) 모든 리소스에 순서 체계를 부여해서 오름차순으로 리소스를 요청

2. 데드락 회피 : 실행 환경에서 추가적인 정보를 활용해서 데드락이 발생할 것 같은 상황을 회피

   * Banker algorithm : 리소스 요청을 허락해줬을 때 데드락이 발생할 가능성이 있으면 리소스를 할당해도 안전할 때까지 계속 요청을 거절하는 알고리즘

3. 데드락 감지와 복구 : 데드락을 허용하고 데드락이 발생하면 복구하는 전략

   - 1) 프로세스를 (강제로) 종료한다.

   - 2) 리소스의 일시적인 선점을 허용한다.

4. 데드락 무시