From d897f7782af34c011dbe5c3500c7ad31efd09f49 Mon Sep 17 00:00:00 2001 From: livenow14 Date: Thu, 4 Nov 2021 23:25:24 +0900 Subject: [PATCH] feat: #44 --- .../gump.md" | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 "os/q2_\352\265\220\354\260\251\354\203\201\355\203\234 4\352\260\200\354\247\200 \354\241\260\352\261\264/gump.md" diff --git "a/os/q2_\352\265\220\354\260\251\354\203\201\355\203\234 4\352\260\200\354\247\200 \354\241\260\352\261\264/gump.md" "b/os/q2_\352\265\220\354\260\251\354\203\201\355\203\234 4\352\260\200\354\247\200 \354\241\260\352\261\264/gump.md" new file mode 100644 index 0000000..58cc50b --- /dev/null +++ "b/os/q2_\352\265\220\354\260\251\354\203\201\355\203\234 4\352\260\200\354\247\200 \354\241\260\352\261\264/gump.md" @@ -0,0 +1,88 @@ +# 정리 + +> 교착 상태(Deadlock)란, 서로의 작업이 끝나기만을 기다려, 둘 다 영원히 끝나지 않는 상태를 얘기해요. +> + +## 교착상태(Deadlock) 발생 조건 + +교착상태는 아래의 네 가지 조건을 모두 `동시에` 충족할 때 발생해요. + +### 1. 상호배제(Mutual Exclusion) + +비공유(자원을 하나의 `프로세스`만 점유) 방식의 자원이 한 개 이상 있는 것을 얘기해요. +하나의 자원에 대해 여러 프로세스의 동시 접근이 불가함을 얘기해요. + +### 2. 점유대기(Hold and wait) + +`프로세스`가 하나 이상의 자원을 점유하고 있으면서 `다른 프로세스`가 점유한 다른 자원을 기다리고 있는 상태에요. + +### 3. 비선점(No preemption) + +`프로세스`가 자원을 해제하기 전까지 `다른 프로세스`가 선점(접근 및 사용) 할 수 없음을 얘기해요. + +### 4. 순환대기(Circular wait) + +각 `프로세스`가 순환적으로 `다음 프로세스`가 요구하는 자원을 가지고 있는 상태를 얘기해요. +쉽게, 점유대기 관계의 프로세스들이 서로를 기다림을 얘기해요. +점유대기 조건과 비선점 조건을 만족해야 성립해요. + +
+ +## 교착상태(Deadlock) 처리 방법 + +현재의 대부분의 운영 체제에서 교착 상태를 막는 것은 불가능해요. 하지만 4가지 해결법이 존재해요. + +### 교착 상태 예방 + +교착상태를 해결하기 위해서는 아래 4가지 조건중 하나만 해결해도 돼요. + +상호배제 조건의 제거 + +- 상호 배제 조건을 제거해요. + +점유와 대기 조건의 제거 + +- 한 `프로세스`가 실행되는 데 필요한 모든 자원을 할당한 후 실행해요. +- 자원 과다 사용으로 인한 효율성, 프로세스가 요구하는 자원을 파악하는 데에 대한 비용, 자원에 대한 내용을 저장 및 복원하기 위한 비용, 기아 상태, 무한대기 등의 문제점이 있어요. + +비선점 조건의 제거 + +- 비선점 프로세스에 대해 선점 가능한 프로토콜을 만들어 줘요. + +순환대기 조건의 제거 + +- 자원 유형에 따라 순서를 매겨요. + +교착 상태 예방은 자원 사용의 효율성이 떨어지고 비용이 많이 드는 문제가 발생해요. + +### 교착 상태 회피 + +- 자원이 어떻게 요청될지에 대한 추가정보를 제공하도록 요구하는 것으로 시스템에 순환대기가 발생하지 않도록 자원 할당 상태를 검사해요. +- 대표적으로 은행원 알고리즘, 자원 할당 그래프가 있어요. + +### 교착 상태 무시 + +데드락의 발생 확률이 비교적 낮은 경우 별다른 조치를 취하지 않아요. + +### 교착 상태 발견 + +감시/발견을 하는 detection 알고리즘으로 Deadlock 발생을 체크하는 방식이에요. 이 역시 성능에 큰 영향을 미칠 수 어요. + +### 교착상태 회복 + +- 한개 이상의 프로세스와 스레드를 종료해요 +- 교착상태에 있는 하나 이상의 스레들로부터 자원을 선점해요. + +
+ +# 질문 + +## 나만 알만한 것 + +### 질문 + +Linux와 Window에서 교착상태를 처리하는 방법으로 어떤것을 사용할까? + +### 답변 + +문제를 무시하고, 교착 상태가 시스템에서 절대 발생하지 않는 척해요. 그렇기 때문에 교착 상태를 처리하는 프로그램을 작성하는 것은 응용개발자의 몫이에요. 이때 교착 상태 에방/회피를 많이 사요 \ No newline at end of file