Skip to content

Commit

Permalink
feat: #44
Browse files Browse the repository at this point in the history
  • Loading branch information
Livenow14 committed Nov 4, 2021
1 parent 58dce09 commit d897f77
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions os/q2_교착상태 4가지 조건/gump.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 정리

> 교착 상태(Deadlock)란, 서로의 작업이 끝나기만을 기다려, 둘 다 영원히 끝나지 않는 상태를 얘기해요.
>
## 교착상태(Deadlock) 발생 조건

교착상태는 아래의 네 가지 조건을 모두 `동시에` 충족할 때 발생해요.

### 1. 상호배제(Mutual Exclusion)

비공유(자원을 하나의 `프로세스`만 점유) 방식의 자원이 한 개 이상 있는 것을 얘기해요.
하나의 자원에 대해 여러 프로세스의 동시 접근이 불가함을 얘기해요.

### 2. 점유대기(Hold and wait)

`프로세스`가 하나 이상의 자원을 점유하고 있으면서 `다른 프로세스`가 점유한 다른 자원을 기다리고 있는 상태에요.

### 3. 비선점(No preemption)

`프로세스`가 자원을 해제하기 전까지 `다른 프로세스`가 선점(접근 및 사용) 할 수 없음을 얘기해요.

### 4. 순환대기(Circular wait)

`프로세스`가 순환적으로 `다음 프로세스`가 요구하는 자원을 가지고 있는 상태를 얘기해요.
쉽게, 점유대기 관계의 프로세스들이 서로를 기다림을 얘기해요.
점유대기 조건과 비선점 조건을 만족해야 성립해요.

<br>

## 교착상태(Deadlock) 처리 방법

현재의 대부분의 운영 체제에서 교착 상태를 막는 것은 불가능해요. 하지만 4가지 해결법이 존재해요.

### 교착 상태 예방

교착상태를 해결하기 위해서는 아래 4가지 조건중 하나만 해결해도 돼요.

상호배제 조건의 제거

- 상호 배제 조건을 제거해요.

점유와 대기 조건의 제거

-`프로세스`가 실행되는 데 필요한 모든 자원을 할당한 후 실행해요.
- 자원 과다 사용으로 인한 효율성, 프로세스가 요구하는 자원을 파악하는 데에 대한 비용, 자원에 대한 내용을 저장 및 복원하기 위한 비용, 기아 상태, 무한대기 등의 문제점이 있어요.

비선점 조건의 제거

- 비선점 프로세스에 대해 선점 가능한 프로토콜을 만들어 줘요.

순환대기 조건의 제거

- 자원 유형에 따라 순서를 매겨요.

교착 상태 예방은 자원 사용의 효율성이 떨어지고 비용이 많이 드는 문제가 발생해요.

### 교착 상태 회피

- 자원이 어떻게 요청될지에 대한 추가정보를 제공하도록 요구하는 것으로 시스템에 순환대기가 발생하지 않도록 자원 할당 상태를 검사해요.
- 대표적으로 은행원 알고리즘, 자원 할당 그래프가 있어요.

### 교착 상태 무시

데드락의 발생 확률이 비교적 낮은 경우 별다른 조치를 취하지 않아요.

### 교착 상태 발견

감시/발견을 하는 detection 알고리즘으로 Deadlock 발생을 체크하는 방식이에요. 이 역시 성능에 큰 영향을 미칠 수 어요.

### 교착상태 회복

- 한개 이상의 프로세스와 스레드를 종료해요
- 교착상태에 있는 하나 이상의 스레들로부터 자원을 선점해요.

<br>

# 질문

## 나만 알만한 것

### 질문

Linux와 Window에서 교착상태를 처리하는 방법으로 어떤것을 사용할까?

### 답변

문제를 무시하고, 교착 상태가 시스템에서 절대 발생하지 않는 척해요. 그렇기 때문에 교착 상태를 처리하는 프로그램을 작성하는 것은 응용개발자의 몫이에요. 이때 교착 상태 에방/회피를 많이 사요

0 comments on commit d897f77

Please sign in to comment.