티스토리 뷰
DeadLock
- 둘 이상의 thread가 각기 다른 thread가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상황을 말한다.
- deadlock이 발생하는 조건은 상호 배제(mutual exclusion), 점유 대기(hold-and-wait), 비선점(no preemption), 순환 대기(circular wait)이다. 이 4가지 조건이 동시에 성립할 때 발생할 수 있다.
- deadlock 문제를 해결하는 방법에는 무시, 예방, 회피, 탐지-회복의 4가지 방법이 있다.
Deadlock이 발생하는 조건
상호 배제(mutal exclusion)
- 동시에 한 thread만 자원을 점유할 수 있는 상황이다.
- 다른 thread가 자원을 사용하려면 자원이 방출될 때까지 기다려야 한다.
점유 대기(hold-and-wait)
- thread가 자원을 보유한 상태에서 다른 thread가 보유한 자원을 추가로 기다리는 상황이다.
비선점(no preemption)
- 다른 thread가 사용 중인 자원을 강제로 선점할 수 없는 상황이다.
- 자원을 점유하고 있는 thread에 의해서만 자원이 방출된다.
순환대기(circular wait)
- 대기 중인 thread들이 순환 형태로 자원을 대기하고 있는 상황이다.
Deadlock 해결 방법
무시
- deadlock 발생 확률이 낮은 시스템에서 아무런 조치도 취하지 않고 deadlock을 무시하는 방법
예방
- 교착 상태의 4가지 발생 조건중 하나가 성립하지 않게 하는 방법
회피
- thread가 앞으로 자원을 어떻게 요청할지에 대한 정보를 통해 순환 대기 상태가 발생하지 않도록 자원을 할당하는 방법
탐지-회복
- 시스템 검사를 통해 deadlock 발생을 탐지하고, 이를 회복시키는 방법
'CS > 운영체제' 카테고리의 다른 글
Context Switching에 대해 설명해주세요. (0) | 2023.07.17 |
---|---|
Multi Process/Thread 환경에서 동기화 문제를 어떻게 해결하나요? (0) | 2023.07.17 |
Multi Process환경에서 Process간 데이터를 어떻게 주고받나요? (0) | 2023.07.17 |
Multi Process와 Multi Thread의 특징과 차이점에 대해 설명해주세요. (0) | 2023.07.17 |
Process와 Thread의 특징과 차이점에 대해 설명해주세요. (0) | 2023.07.17 |