교착상태(deadlock): 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더 이상 진행하지 못하는 상태.
아사상태와 차이점
- 아사 현상(starvation): 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제.
- 교착 상태: 여러 프로세스가 작업을 진행하다 보니 자연 발생적으로 일어나는 문제. → 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생함.
자원 할당 그래프(RAG:resource allocation graph): 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것. 프로세스는 원으로, 자원은 사각형을 표현함.

다중 자원(multiple resource): 여러 프로세스가 하나의 자원을 동시에 사용하는 경우. 수용할 수 있는 프로세스 수를 사각형 안에 작은 동그라미로 표현함.

교착상태 필요조건
- 상호배제(mutual exclusion): 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 베타적인 자원이여야 함.
- 비선점(non-pteemptive): 한 프로세스가 사용중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는. 비선점 자원이여야 함.
- 점유와 대기(hold and wait): 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 함.
- 원형 대기(circular wait): 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 함.
교착상태 해결
- 교착 상태 예방(prevention) : 교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화하는 방식으로 교착상태 조건 4가지에 대하여 각각의 방법이 존재함. (하나라도 조건을 만족하지 않으면 교착상태 발생 X)
- 교착 상태 회피(avoidance) : 교착상태가 발생하지 않도록 자원할당량을 조절하여 교착상태를 회피하는방식. (시스템의 상태를 계속 감시 → 안전한 상태(Safe State)로 유지)
- 교착 상태 검출(detection)과 회복(recovery) : 교착 상태 검출은 어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링하면서 교착 상태가 발생하는지 살펴보는 방식으로 만약 교착 상태가 발생하면 교착 상태 회복 단계가 진행됨.
- 교착상태 무시(Ignore) : 교착상태가 드물게 발생하는 경우 예방, 검출과 같은 지속된 오버헤드 및 성능 저하를 발생하는 것보다 재부팅하는 것이 더 좋을 수 있음.
교착 상태 예방
- 상호 배제 예방: 시스템 내에 있는 독점적으로 사용할 수 있는 자원을 없애는 방법→ 자원 공유 허용( 상호 배제를 무력화하는 것은 사실상 어려움)
- 비선점 예방: 모든 자원을 빼앗을 수 있도록 만드는 방법→ 선점(preemptive)을 허용( 아사 현상을 일으켜 무력화 어려움)
- 점유와 대기 예방: 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법→ 전부 할당하거나 아니면 아예 할당하지 않는 방식 적용. (자원이 아닌 프로세스의 자원 사용 방식을 변화시켜 교착 상태를 처리한다는 점에서 의미가 있음)
- 원형 대기 예방: 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법. 모든 자원에 숫자를 부여하고 숫자가 큰 자원을 할당하는 것.
점유와 대기 예방의 단점
1.프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어려움.
2.자원의 활용성 하락.
3.많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리함.
4.결국 일괄 작업 방식으로 동작.
원형 대기 예방의 단점
1.프로세스 작업 진행에 유연성이 떨어짐.
2.자원의 번호를 어떻게 부여할 것인지에 대한 문제.
교착 상태 회피: 프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악하여 그 수준 이하로 자원을 나누어주는 방법. 범위 내에서만 자원 할당, 교착 상탵 발생 범위 프로세스 대기
안정 상태: 모든 프로세스가 정상적으로 종료가 가능한 상태
불안정 상태: 교착 상태가 될 가능성이 있음.
교착상태 회피는 자원 총수와 현재 할당된 자원 수를 기준으로 시스템을 안정상태와 불안정 상태로 나누고 시스템이 안정 상태를 유지하도록 자원 할당함. → 교착상태는 불안정 상태의 일부분임.

교착 상태 회피 문제점
- 시스템을 항상 감시하고 있어야 하므로, 오버헤드 발생.
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 함.
- 시스템의 전체 자원 수 및 프로세스 수가 고정적이여야 함.
- 사용되지 않는 여유 자원이 있어야 하는 등 자원 활용률이 낮음.
교착 상태 검출: 운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식. 교착 상태가 발견되면 이를 해결하기 위해 교착 상태 회복 단계를 밟음.
타임아웃을 이용한 교착 상태 검출: 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리함. → 교착 상태가 자주 발생하지 않을 것이라는 가정하에 사용하는 것으로, 특별한 알고리즘이 없어 쉽게 구현. 타임아웃이 되면 프로세스 종료.

데이터베이스에서 타임아웃 문제: 데이터베이스에서 타임아웃으로 프로세스가 종료되면 일부 데이터의 일관성이 깨질 수 있음. → 해결: 체크보인트(check point: 작업 중 문제가 발생하면 저장된 상태로 돌아오기 위한 표시) 와 롤백(roll back: 작업 중 문제 발생하여 과거의 체크포인트로 되돌아가는 것) 사용.

자원 할당 그래프를 이용한 교착 상태 검출

교착 상태 회복: 교착 상태가 검출 된 후 교착 상태를 푸는 후속 작업을 하는 것. 회복단계에서는 교착 상태를 유발한 프로세스를 강제로 종료함.
강제 종료 방법.
① 교착 상태를 일으킨 모든 프로세스를 동시에 종료
② 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료
- 우선순위가 낮은 프로세스를 먼저 종료
- 우선순위가 같은 경우 작업 시간이 짧은 프로세스를 먼저 종료
- 위의 두 조건이 같은 경우 자원을 많이 사용하는 프로세스를 먼저 종료
교착 상태 무시: 교착 상태에 대해 아무런 대비책 없이 발생하도록 내버려 둠.
- 교착 상태 발생 확률이 낮은 경우
- 교착 상태 예방, 회피, 탐지에서 오버헤드가 발생하므로 발생 시 재시작 혹은 강제 종료 →핵 시스템, 원자력 시스템, 비행기 등과 같은 경성 실시간 시스템(hard-real time)에서는 적합하지 않음
- 타조 알고리즘
'2025-1 > 운영체제' 카테고리의 다른 글
05. 프로세스 동기화 (0) | 2025.04.13 |
---|---|
04. CPU 스케줄링 (0) | 2025.04.12 |
03. 프로세스와 스레드 (0) | 2025.03.22 |
02. 컴퓨터시스템 구조와 성능 향상 (0) | 2025.03.22 |
01. 커널과 인터페이스 (0) | 2025.03.12 |