-
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
44 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,44 @@ | ||
# 정리 | ||
|
||
## 정의 | ||
|
||
교착상태는 '프로세스나 스레드가 결코 일어날 수 없는 특정 이벤트를 기다리는 상태' 를 지칭한다. | ||
이는 하나의 자원을 여러 개의 프로세스, 혹은 스레드가 필요로 할 때 발생할 수 있다. | ||
|
||
![image](https://user-images.githubusercontent.com/51393021/140434611-35a04340-3977-4d29-815e-729d6a8ddc53.png) | ||
|
||
## 교착상태의 원인 | ||
|
||
다음 4가지를 동시에 만족할 때, 교착상태가 발생한다. | ||
1. 상호 배제 (mutual exclusion) | ||
- 프로세스가 자원을 사용할 때 다른 프로세스와 동시에 사용할 수 없는 조건을 의미한다. | ||
|
||
2. 점유 및 대기 (hold and wait) | ||
- 한 자원을 점유한 상태에서 다른 자원을 요청하기 위해 대기할 수 있는 조건을 의미한다. | ||
|
||
3. 비선점 (nopreemption) | ||
- 한 프로세스가 자원을 할당 받으면 작업이 끝날 때 까지 시스템에서 제어권을 뺏을 수 없는 조건을 의미한다. | ||
|
||
4. 순환 대기 (circular-wait) | ||
- 여러개의 프로세스가 서로의 자원을 요청하고 있는 상태를 의미한다. | ||
|
||
## 교착상태의 대응방법 | ||
1. 무시 | ||
- 교착상태가 드물게 발생하는 시스템에서 활용하는 방법이다. 교착상태를 예방하는데 비용이 크기 때문에 활용하는 방법이다 | ||
- 유닉스와 윈도우를 비롯한 많은 운영체제에서 채택하고 있는 방법이다. | ||
2. 예방 | ||
- 필요 조건 중 하나를 거부하여 예방하는 방법이다. 4가지 필요조건 중 하나를 예방하는 방법으로, 비효율적이기에 실제로 활용하는 경우는 적다. | ||
3. 회피 | ||
- 교착 상태의 발생 가능성을 인정하고, 자원이 요청될 때마다 시스템의 상태를 판단하고 회피하는 전략이다. 은행원 알고리즘이 대표적이다. | ||
- https://jhnyang.tistory.com/102 | ||
- 비효율이 초래될 가능성이 높아 현실적으로 사용되지 않는다. 탐지와 복구는 교착된 것 같다고 판단될 때 시행하는데, 회피는 자원 요청시마다 항상 | ||
실행되어야 하므로 오버헤드가 크다. | ||
4. 탐지와 복구 | ||
- 순환대기 존재 여부를 탐지한다. | ||
- 얼마나 자주 할지는 cpu 이용률, 일정 시기마다, 자원할당 여부 등 다양한 상황을 고려하여 결정할 수 있다. | ||
- 순환 대기를 파악했다면 순환 대기(프로세스 종료)를 깨서 교착 상태로부터 회복할 수 있다. | ||
|
||
# 질문 | ||
Q. 교착 상태가 발생할만한 시스템을 무엇이 있을까? | ||
A. Mysql 트랜잭션, OS IO시스템, 어플리케이션과 커넥션 풀 | ||
|