Lined Notebook

[OS] Deadlock

by HeshAlgo

오늘 회사에서 Deadlock이 발생하는 오류가 생겼었습니다. 해당 에러 알람을 받고 왜 Deadlock이 발생한 것인지 확인해보려 했지만 어떻게 찾아봐야 할지 감이 안 잡혔습니다. 이 교착상태가 무엇이고 어떤 상황에서 발생하는지 이론적인 건 알고 있지만 실제 실무에서 발생했을 때 어떻게 대처해야 되는지는 몰랐기 때문에 좀 어리바리했었습니다..ㅠㅠ 그래서 이번에 다시 한번 Deadlock에 대해서 공부해보고 다음에 똑같은 이유로 Deadlock이 발생했을 때를 대비해 빠르게 대응할 수 있도록 다시 한번 짚고 넘어갈 필요가 있겠다 싶었습니다.

 

1. Deadlock(교착상태)

- 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더 이상 진행하지 못하는 상태 (무한 대기 상태)

그래서 Deadlock이 발생하게 되면 운영체제는 강압적으로 이 교착상태를 해결해야만 한다.

그림과 같이 Process 1이 Resource 1을 사용중이고 Process 2가 Resource 2를 사용 중인 상태에서 Process 1이 Resource 2를 사용하려는데 아직 Process 2가 사용 중이라 대기 상태를 갖게 되고 마찬가지로 Process 2가 Resource 1을 사용하려는데 아직 Process 1이 사용 중이라 대기 상태를 갖게 됩니다. 이렇게 상대방의 작업이 끝나기만을 기다리고 있을 때 교착상태가 발생합니다.

 

2. Deadlock 발생 조건

교착상태는 여러 가지 조건에 의해 발생한다. 즉, 상호 배제, 비선점, 점우와 대기, 원형 대기 4가지를 모두 충족해야만 Deadlock이 발생하게 된다. 이 중 단 하나라도 충족하지 않으면 교착상태가 발생하지 않는다.

 

1) 상호 배제 (Mutual exclusion)

- 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원

 

2) 비선점 (Non-preemption)

- 한 프로세스가 사용 중인 자원은 사용이 끝날 때 까지 중간에 다른 프로세스가 빼앗을 수 없다.

 

3) 점유와 대기 (Hold and wait)

- 프로세스가 어떤 자원을 할당 받은 상태에서 다른 자원을 기다리는 상태

 

4) 원형 대기 (Circular wait)

- 프로세스 간의 관계가 순환 형태로 자원을 대기하고 있어야 한다.

 

3. Deadlock 해결 방법

교착 상태를 해결하는 방법은 예방, 회피, 검출, 회복 크게 4가지로 분류할 수 있습니다. 어떻게 이 4가지로 교착 상태를 해결하는지 알아보겠습니다.

 

1) 교착 상태 예방 (Prevention)

- 교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화하는 방식. 즉, 교착상태를 발생시키는 조건을 하나라도 막는다면 교착상태가 발생하지 않는다. 하지만, 실효성이 적고 자원의 낭비가 심해 잘 사용하진 않는다. 

 

2) 교착 상태 회피 (Avoidance)

- 자원을 할당하다가 교착 상태를 유발할 가능성이 있다고 판단되면 자원 할당을 중단하고 지켜보는 것이다. 그러나 자원을 얼마만큼 할당해야 교착 상태가 발생하지 않는다는 보장이 없기 때문에 실효성이 적다. 

 

3) 교착 상태 검출 (Detection)

- 어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링 하면서 교착 상태가 발생하는지 살펴보는 방식이다.

이 방식 또한 지속적으로 확인하는 작업이 필요하기 때문에 성능 저하를 발생시킨다.

 

4) 교착 상태 회복 (Recovery)

- 교착 상태를 검출하면 교착 상태가 회복 단계가 진행 된다. 교착 상태를 검출한 이후 이를 회복시키는 것은 결론적으로 교착 상태를 해결하는 현실적인 접근 방법이다.

 

'운영체제' 카테고리의 다른 글

[OS] 운영체제  (0) 2022.03.06

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기