728x90
교착 상태(Deadlock)는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 말한다.
교착 상태를 비유적으로 잘 보여준 그림이다.
예를 들어, P1은 자원 A를 가지고 있고 자원 B를 얻으려고 하고 있다. P2는 자원 B를 가지고 있고 자원 A를 얻으려고 한다. 그러나 양쪽 모두가 서로가 가진 자원을 놓지 않고 기다리고 있기 때문에 상황이 멈춘 상태이다. 이런 경우 프로세스들이 계속해서 CPU 시간을 소비하고 자원을 소비하지 못하게 된다.
- 교착 상태가 발생하는 조건
● 상호 배제(Mutual exclusion): 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 한다. 다른 프로세스는 자원을 사용할 수 없다.
● 점유 대기(Hold and wait): 프로세스는 최소한 하나의 자원을 점유한 상태에서 다른 자원을 요청할 수 있어야 한다.
● 비선점(Non-preemption): 다른 프로세스가 사용 중인 자원을 강제로 빼앗을 수 없다. 자원을 해제할 때까지 자발적으로 자원을 놓지 않는다.
● 순환 대기(Circular wait): 두 개 이상의 프로세스가 서로 다른 자원을 점유하고 있으며, 각 프로세스는 다음 프로세스가 점유한 자원을 요청한다. 이렇게 되면, 프로세스 간에 순환 대기 관계가 형성된다.
이러한 조건을 모두 만족하는 경우, 교착 상태가 발생할 가능성이 있다.
- 교착 상태에서 벗어나는 방법?
▲ 예방(Prevention): 교착 상태를 발생시키는 네 가지 조건 중 하나를 제거하여 교착 상태를 예방할 수 있다. 예를 들어 교착 상태를 발생시키는 자원 할당 순서를 통일하거나, 자원 요청 시 제한 시간을 두는 등의 방법을 사용할 수 있다.
>> 상호 배제 부정: 여러 개의 프로세스가 동시에 공유자원을 사용
점유 대기 부정: 프로세스가 실행되기 전 필요한 모든 자원을 할당하여 프로세스 대기를 없앤다.
비선점 부정: 모든 자원에 대한 선점 허용
순환 대기 부정: 자원을 선형으로 분류하여 고유 번호 할당, 각 프로세스는 한쪽 방향으로만 자원 요구 가능
▲ 회피(Avoidance): 자원 요청에 대한 부여를 결정하기 전에 자원 사용 가능성을 사전에 파악하여 교착 상태가 발생할 가능성이 있는 경우 자원 요청을 거부하거나 지연시키는 방법을 사용할 수 있다.
▲ 탐지(Detection) 및 복구(Recovery): 교착 상태를 검출한 뒤 교착 상태를 해결하기 위해 프로세스를 종료하거나 자원을 회수함으로써 해결할 수 있다. 교착 상태가 발생한 프로세스 중 우선순위가 가장 낮은 프로세스를 종료하거나, 자원을 강제로 해제한다.
728x90
'CS(Computer Science)' 카테고리의 다른 글
[스터디] 데이터베이스의 정규화 (0) | 2023.04.18 |
---|---|
[스터디] Normalization과 regularization (0) | 2023.03.23 |
[스터디] Transaction의 격리 수준(Isolation Level)에 대해서 (0) | 2023.03.16 |
[스터디] Transaction, ACID란? (0) | 2023.03.09 |
[스터디] Context Switching 과정이란 (0) | 2023.03.09 |