Skip to content

Commit

Permalink
feat: wedge #44
Browse files Browse the repository at this point in the history
  • Loading branch information
sihyung92 authored Nov 5, 2021
1 parent f93966c commit 866bf0d
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions os/q2_교착상태 4가지 조건/wedge.md
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시스템, 어플리케이션과 커넥션 풀

0 comments on commit 866bf0d

Please sign in to comment.