What is Deadlock?
- 세마포어 사용 예제
- 두 개의 세마포어 S와 Q가 있고, 초기값은 1입니다.
Deadlock : 한 집합의 차단된 프로세스들이 각자 하나의 자원을 잡고 있으며, 동시에 다른 프로세스가 가지고 있는 자원을 얻기 위해 기다리고 있는 상태.
Deadlock Characterization(데드락 특성)
- 시스템 모델링 (System modeling)
- 프로세스: P1, P2, ..., Pn.
- 자원 유형(resource types): R1, R2, ..., Rm
- CPU 사이클, 메모리 공간, I/O 장치, 파일 등.
- 각 자원 유형 Ri는 Wi 인스턴스를 가짐.
- 각 프로세스는 다음과 같이 자원을 이용합니다:
- 요청 (request)
- 사용 (use)
- 해제 (release)
- Deadlock은 네 가지 조건이 동시에 성립할 때 발생할 수 있습니다. (Deadlock can arise, 무조건 발생하는 것이 아님)
- 상호 배제 (Mutual exclusion)
- 한 번에 하나의 프로세스만 자원을 사용할 수 있음.
- 점유 및 대기 (Hold and wait)
- 적어도 하나의 자원을 보유하고 있는 프로세스가 다른 프로세스가 보유하고 있는 추가 자원을 획득하기 위해 대기하고 있다.
- 비선점 (No preemption)
- 자원은 이를 보유한 프로세스에 의해 자발적으로만 해제될 수 있음.
- 순환 대기 (Circular wait)
- P0, P1, ..., Pn의 대기 프로세스 집합이 존재하며, P0는 P1이 보유한 자원을 기다리고, P1은 P2가 보유한 자원을 기다리며, ... , Pn-1은 Pn이 보유한 자원을 기다리고, Pn은 P0가 보유한 자원을 기다림.
- 상호 배제 (Mutual exclusion)
- 자원 할당 그래프 (Resource allocation graph)
- V는 두 가지 유형으로 나뉩니다:
- P = {P1, P2, ..., Pn}, 시스템의 모든 프로세스 집합.
- R = {R1, R2, ..., Rm}, 시스템의 모든 자원 유형 집합.
- E도 두 가지 유형으로 나뉩니다:
- Pi → Rj : 요청 (request)
- Rj → Pi : 할당 (assignment)
- V는 두 가지 유형으로 나뉩니다:
- 예제 (Examples)
- Pi가 Rj의 인스턴스를 요청함.
- 화살표 방향 : 프로세스에서 리소스로
- Pi가 Rj의 인스턴스를 보유함.
- 화살표 방향 : 리소스에서 프로세스로
- Pi가 Rj의 인스턴스를 요청함.
- 자원 할당 그래프를 통한 Deadlock 예제
- (a) Deadlock 없음 (No deadlock)
- (b) Deadlock 발생 (Deadlock)
- (c) Deadlock 없음 (No deadlock)
- 그래프에 사이클이 없으면 Deadlock 없음.
- 그래프에 사이클이 있으면,
- 자원 유형 당 인스턴스가 하나만 있으면 Deadlock 발생.
- 자원 유형 당 인스턴스가 여러 개 있으면 Deadlock 발생 가능성.
- (글 맨위에서 말했듯이 resource(R)에는 여러 개의 인스턴스(W)가 있을 수 있음 )
Methods for Handling Deadlocks
Deadlock 처리 방법
- 예방 (Prevention)
- 시스템이 Deadlock 상태에 진입하지 않도록 합니다.
- 네 가지 조건 중 적어도 하나가 성립되지 않도록 보장합니다.
- 회피 (Avoidance)
- 시스템이 Deadlock 상태에 진입하지 않도록 합니다.
- 각 프로세스가 자원을 어떻게 사용할 것인지에 대한 사전 정보를 필요로 합니다.
- 탐지 및 복구 (Detection and recovery)
- 시스템이 Deadlock 상태에 진입하도록 허용한 다음 이를 복구합니다.
Deadlock Prevention
Deadlock 예방
- 네 가지 조건 중 적어도 하나가 성립되지 않도록 보장합니다.
- 상호 배제 (Mutual Exclusion)
- 상호 배제를 부정하는 것은 불가능합니다.
- 점유 및 대기 (Hold and Wait)
- 프로세스가 실행을 시작하기 전에 모든 자원을 요청하고 할당받도록 요구합니다.
- 비선점 (No Preemption)
- 자원을 보유한 프로세스가 다른 자원을 요청하고 해당 자원이 즉시 할당될 수 없는 경우, 현재 보유 중인 모든 자원을 해제합니다.
- 프로세스는 요청한 새로운 자원과 이전 자원을 모두 다시 획득할 수 있을 때만 재시작됩니다.
- 순환 대기 (Circular Wait)
- 모든 자원 유형에 총 순서를 부여하고, 각 프로세스가 증가하는 순서로 자원을 요청하도록 합니다.
- 상호 배제 (Mutual Exclusion)
Deadlock Avoidance
Deadlock 회피
- Deadlock 회피 알고리즘 (Deadlock avoidance algorithm)
- 프로세스가 사용 가능한 자원을 요청할 때, 시스템은 "즉시 할당이 시스템을 안전한 상태로 유지하는지" 결정해야 합니다.
- 시스템이 각 프로세스에 자원을 할당하고 Deadlock을 피할 수 있는 순서가 있다면 상태는 안전합니다.
- 시스템이 추가적인 사전 정보를 가지고 있어야 합니다.
- 프로세스가 사용 가능한 자원을 요청할 때, 시스템은 "즉시 할당이 시스템을 안전한 상태로 유지하는지" 결정해야 합니다.
- 시스템이 안전 상태(safe state)에 있으면 Deadlock이 없습니다.
- 시스템이 비안전 상태(unsafe state)에 있으면 Deadlock이 발생할 가능성이 있습니다.
- 자원 할당 그래프 (Resource allocation graph)
- 예약 간선 (Claim edge) Pi → Rj:
- Pj가 Rj를 요청할 수 있음을 나타냅니다. 점선으로 표시됩니다.
- (프로세스가 새로 요구하는 자원)
- 예약 간선이 요청 간선(request edge)으로 변환됩니다:
- 프로세스가 자원을 요청할 때.
- 요청 간선이 할당 간선(assignment edge)으로 변환됩니다:
- 자원이 프로세스에 할당될 때.
- 할당 간선이 예약 간선으로 재변환됩니다:
- 프로세스가 자원을 해제할 때.
- 예약 간선 (Claim edge) Pi → Rj:
- 참고 [Note]
- 여러 인스턴스의 자원 유형이 있는 경우 은행원 알고리즘(banker's algorithm)을 사용합니다.
Claim edge Pi -> Rj
- 프로세스 Pi가 자원 Rj를 미래에 요청할 수 있음을 뜻함 (점선으로 표시)
- 프로세스가 해당 자원 요청 시 request edge로 바뀜 (실선)
- Rj 가 realse 되면 assignment edge는 다시 claim edge로 바뀐다
Unsafe state(비안전 상태) 예시
R2에 대한 P2의 request를 grant 하면 사이클이 형성되어 데드락의 발생 가능성이 생기는 것
Deadlock Detection & Recovery
Deadlock 탐지 및 복구
- Allow system to enter deadlock state.
- 시스템이 deadlock에 들어가도록 허용합니다.
- Detection algorithm.
- 탐지 알고리즘
- 주기적으로 알고리즘을 호출하여 그래프에서 사이클을 검색합니다.
- 사이클이 존재하면 deadlock이 발생한 것입니다.
- [참고] 자원 유형의 인스턴스가 여러 개인 경우 더 복잡한 알고리즘을 사용합니다.
- 주기적으로 알고리즘을 호출하여 그래프에서 사이클을 검색합니다.
- 탐지 알고리즘
- Recovery scheme.
- 복구 계획
- 프로세스 종료
- 모든 deadlock 상태의 프로세스를 중단합니다.
- deadlock 사이클이 제거될 때까지 한 번에 하나의 프로세스를 중단합니다. (피해의 최소화)
- 자원 선점
- 프로세스로부터 일부 자원을 선점하고, 이러한 자원을 다른 프로세스에 할당하여 deadlock 사이클이 깨질 때까지 진행합니다.
- 프로세스 종료
- 복구 계획
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 10. Virtual Memory (0) | 2024.06.19 |
---|---|
[운영체제] 09. Main Memory (0) | 2024.06.19 |
[운영체제] 07. Synchronization Examples (0) | 2024.06.19 |
[운영체제] 06. Synchronization Tools (0) | 2024.06.19 |
[운영체제] 05. CPU Scheduling (0) | 2024.06.19 |