CS Interview

교착상태, Deadlock

게임이 더 좋아 2021. 11. 1. 20:10
반응형
728x170

 

정의

 

일련의 프로세스들이 서로가 가진 자원을 기다리며 blocking된 상태

동기화와 관련이 깊은 것이다.

Deadlock은 결국 서로의 Event를 기다리면서 무한하게 대기하는 상태를 말한다.

**여기서 Event는 자원의 할당과 해제를 의미한다.

 

 


 

발생하는 이유

 

4가지가 있다.

 

1. Mutual Exclusion, 상호 배제

 

매 순간 하나의 프로세스만 자원을 사용 가능

A자원이 B자원 점유와 상관없이 자원을 쓸 수 있다면 당연히 무한 대기 상태는 나오지 않을 것이다.


 

2. No Preemption, 비선점

 

프로세스는 자원을 스스로 내어놓는 것만 허용된다.

-> 빼앗기지 않는다.

자원을 빼앗을 수 있다면 당연히 deadlock은 나오지 않았다.


 

3. Hold and Wait, 점유 대기

 

자원을 가진 프로세스가 다른 자원을 기다릴 때는 보유 자원을 가진채 대기한다.

-> 자원을 점유했다면 작업이 끝날 떄까지 스스로 내어놓지 않는다.

자원을 기다리는 프로세스들이 자원을 가지지 않고 대기한다면 deadlock이 발생하지 않는다.

 

 

4. Circular Wait, 순환대기

 

자원을 기다리는 프로세스 간에 사이클이 형성되었을 때

P0는 P1의 자원을 기다리고

P1는 P2의 자원을 기다리고

...

Pn는 P0의 자원을 기다려서 결국 

-> 모든 프로세스들의 자원을 갖고 기다리니까 진행되지 않음

 


 

Deadlock을 막는 방법

 

1. Deadlock Prevention, 교착상태 방지

2. Deadlcok Avoidance, 교착상태 회피

3. Deadlock Detection and recovery, 교착상태 탐지 및 회복

4. Deadlock Ignorance, 교착상태 무시

 

하지만 대부분의 OS에서는 Deadlock을 그렇게 적극적으로 처리하지 않는다.

Deadlock 자체는 흔히 일어나는 상황도 아니고

방지하기 위해 쓰는 오버헤드가 훨씬 큰 경우가 많다.

 

예를 들어 어떠한 오류가 생겼을 때, 프로세스 종료하시겠습니까?라는 것이 그 예다.

 

또한 이를 피하기 위한 많은 방법이 있다.

Semaphore, Mutex, Monitor.. 등등

 

 


 

 

https://luv-n-interest.tistory.com/439

 

728x90
반응형
그리드형