DeadLock이란 무엇일까?

2020. 12. 16. 12:30Study

DeadLock (데드락)

DeadLock은 하나 또는 여러 개의 프로세스가 일어날 수 없는 사건을 영원히 기다리는 상태를 말합니다.

 

예시 (스타크래프트의 테란을 예로 들어보겠습니다..)

커멘드센터가 하나의 프로세스라고 가정하고 플레이어가 일꾼(SCV) 생성을 시도합니다.

하지만 보유하고있는 자원(미네랄)이 없거나 부족해서 커멘드센터(프로세스)는 일꾼을 생성하지 못합니다.

DeadLock은 자원이 부족하거나 자원을 얻지 못한 상태에서 다음 처리를 진행하지 못하는 상태로,

'교착 상태'라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생합니다.

 

이미지 출처: https://jwprogramming.tistory.com/12 [개발자를 꿈꾸는 프로그래머]

 

P1이 R1을 사용 중인 상태에서 P2가 R1을 사용하기 위해서 접근합니다.

P2가 R2을 사용 중인 상태에서 P1이 R2를 사용하기 위해서 접근합니다.

이럴 경우 접근한 리소스가 상대방에게 할당되어 있기 때문에 P1과 P2는 무한정 대기 상태에 빠지게 됩니다.

이와 같은 현상을 DeadLock 상태라고 합니다.

 

교착 상태의 4가지 조건

교착 상태가 일어나려면 아래의 4가지 필요 조건을 충족 시켜야합니다.

이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않습니다.

 

- 상호배제 (Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구합니다.

- 점유대기 (Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다립니다.

- 비선점 (No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없습니다.

- 순환대기 (Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있습니다.

'Study' 카테고리의 다른 글

mutable 과 immutable  (6) 2021.01.20
Critical Section이란 무엇일까?  (0) 2020.12.23
Multi Thread와 Multi Process란 무엇일까?  (0) 2020.09.03
오버헤드란 무엇일까?  (0) 2020.08.31
Memory Leak이란 무엇일까?  (0) 2020.08.09