Deadlock
교착상태
Apr 11, 2024
- 다수의 프로세스나 스레드가 각자 필요로 하는 자원을 얻지 못하고 무한정 대기하는 상태
- 자원은 서로가 필요로하며 각각 다른 자원을 점유한 상태에서 대기하고 있어서 진행이 불가능한 상태
- 이러한 상황에서는 시스템이 멈추게 되어 추가적인 작업 불가능
자원 할당 그래프(resource-allocation graph)
규칙
- 프로세스는 원으로, 자원의 종류는 사각형으로 표현
- 사용할 수 있는 자원의 개수는 자원 사각형 내에서 점으로 표현
- 프로세스가 어떤 자원을 할당받아 사용중이라면 자원에서 프로세스를 향해 화살표를 표시
- 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표 표시
교착 상태 발생 조건
- 상호배제: 자원은 동시에 오직 하나의 프로세스 또는 스레드에 의해서만 사용될 수 있어야함
- 점유와 대기: 최소한 하나의 자원을 점유한 상태에서 추가적으로 다른 자원을 기다리고 있어야함
- 비선점: 다른 프로세스나 스레드에 의해 자원이 각제로 빼앗길 수 없음
- 원형 대기: 프로세스나 스레드 집합이 각각이 다음에 필요로하는 자원을 다른 프로세스나 스레드에 의해 점유된 상태에서 대기하는 형태로 원형의 순환을 이루어 있어야함
교착 상태 예방
상호배제 제거
- 모든 자원을 공유 가능하게 함
- 현실적으로 모든 자원의 상호배제 없앨 수 없음(프린트 같은 경우)
점유와 대기 제거
- 프로세스가 필요한 모든 자원을 동시에 얻을 수 있을 때마 자원을 요청하도록하거나
- 필요한 자원을 한 번에 모두 얻을 수 없을 때는 현재 점유하고 있는 자원 모두 반납하고 다시 요청하도록 함
- 자원 활용률이 낮아질 수 있음
비선점 제거
- 자원을 이용 중인 프로세스로부터 해당 자원을 빼앗을 수 있음
- 선점하여 사용할 수 있는 일부 자원에 대해서는 효과적
- 모든 자원이 선점 가능한 것이 아니기 때문에 범용성이 떨어짐
순환대기 제거
- 자원에 번호를 할당하고 프로세스가 자원을 요청할 때 번호가 작은 순서대로 요청
- 모든 자원에 번호를 할당하는 작업이 쉽지 않고 번호에 따라 활용률이 떨어질 수 있음
교착 상태 회피
안전 상태(safe state)
- 교차상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
불안전 상태(unsafe state)
- 안전 순서열이 없는 상황으로 교착상태가 발생하지 않는 상태
교착 상태 검출 후 회복
선점을 통한 회복
- 교착상태가 발생했을 때 시스템이 특정 프로세스의 자원 할당을 선점하여 해결
- 프로세스가 자원을 강제로 반환하도록하여 해당 자원을 다른 프로세스가 사용할 수 있도록 함
- 일반적으로 우선순위가 낮은 프로세스의 자원 할당이 선점됨
- 다른 프로세스의 실행을 중단시킬 수 있는 단점이 있음
프로세스 강제 종료를 통한 회복
- 교착상태가 발생했을때 교착상태에 관련된 프로세스 중 하나 이상을 강제로 종료시켜 해결
- 보통은 교착상태에 포함된 프로세스들 중 하나를 선택하여 종료시켜 자원을 반환하게 함
- 종료된 프로세스가 중요한 작업을 수행 중이었을 경우 시스템에 부정적인 영향을 줄 수 있음
Go toor?