철학과 학생의 개발자 도전기
Younghun
« 2025/05 »
일 |
월 |
화 |
수 |
목 |
금 |
토 |
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
관리 메뉴
철학과 학생의 개발자 도전기
Race Condition과 Dead Lock 본문
운영체제
Race Condition과 Dead Lock
Younghun
2024. 2. 5. 14:22
1. Race Condition
- 둘 이상이 공유 자원에 동시에 접근하여 결과값에 영향을 줄 수 있는 상황
- race condition이 발생하는 코드 영역을 critical section이라고 한다.
- race condition을 해결하기 위해 동기화 기법을 사용한다.
2. Dead Lock
- race condition일 때 서로 자원을 잠그고 있어 진행이 안되는 상태
- 다음 4가지를 모두 충족할 때 발생한다.
- Mutual Exclusion
자원을 둘 이상이 동시에 사용할 수 없다.
- Non-Preemptive
할당된 자원을 외부에서 강제로 뺏을 수 없다.
- Hold & Wait
최소 하나의 자원을 점유하면서 다른 자원을 기다리고 있는 상태다.
- Circular Wait
자원을 대기하는 상태가 원형을 이룬다. (A는 B의 자원을 요구, B는 C의 자원을 요구, C는 A의 자원을 요구)
- Dead Lokc 해결 방법에는 다음이 있다.
- 예방(Prevention)
- 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법이다.
- 교착상태 발생의 네 가지 조건 중 어느 하나를 제거함으로써 수행된다.
- ex) Hold & Wait 조건을 제거하려면 프로세스가 실행되기 전에 필요한 모든 자원을 한 번에 요청하게 하여 대기 상태를 없앨 수 있다.
- 그러나 이 방법은 자원의 활용도를 떨어뜨릴 수 있어 비효율적이라는 단점이 있다.
- 회피(Avoidance)
- 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해가는 방법이다.
- 대표적인 방법으로 Banker's Algorithm이 있다. 이 알고리즘은 프로세스가 자원을 요청할 때 시스템이 안전 상태(Safe State)를 유지할 수 있으면 자원을 할당하고, 그렇지 않으면 자원 할당을 보류한다.
- 이 방법은 프로세스의 자원 요구량을 사전에 알아야 하므로 실제 시스템에서는 잘 사용되지 않는다.
- 검출(Detection)
- 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 방식이다.
- 교착상태의 발생 빈도가 낮고, 교착상태를 복구하는 비용이 적을 때 사용하는 방법이다.
- 교착상태 검출 알고리즘을 주기적으로 실행하여 교착상태를 검출하고, 이를 해결한다.
- 회복(Recovery)
- 교착상태를 일으킨 프로세스를 종료시키거나, 교착상태의 프로세스에 할당된 자원을 선점(preempt)하여 프로세스나 자원을 회복하는 방식이다.