-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
88 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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에서 교착상태를 처리하는 방법으로 어떤것을 사용할까? | ||
|
||
### 답변 | ||
|
||
문제를 무시하고, 교착 상태가 시스템에서 절대 발생하지 않는 척해요. 그렇기 때문에 교착 상태를 처리하는 프로그램을 작성하는 것은 응용개발자의 몫이에요. 이때 교착 상태 에방/회피를 많이 사요 |