교착 상태 Opera팅 시스템: 순환 대기(Circular Wait)란 무엇입니까(예)
교착상태란 무엇인가?
이중 자물쇠 교착 상태는 다른 대기 프로세스가 요구된 리소스를 보유하고 있기 때문에 어떤 프로세스가 대기 상태에 들어갈 때 OS에서 발생하는 상황입니다. 교착 상태는 여러 프로세스가 소프트 잠금 또는 소프트웨어라고 하는 특정 유형의 상호 배타적 리소스를 공유하는 멀티 프로세싱에서 흔한 문제입니다.
교착 상태의 예
- 실제 사례는 한 방향으로만 진행되는 교통 상황입니다.
- 여기서 브리지는 리소스로 간주됩니다.
- 따라서 교착 상태가 발생하면 한 대의 차량이 후진하면(자원을 선점하고 롤백) 쉽게 해결할 수 있습니다.
- 교착 상태가 발생하면 여러 대의 차량을 백업해야 할 수도 있습니다.
- 그래서 기아가 가능합니다.

순환 대기란 무엇입니까?
한 프로세스는 두 번째 프로세스가 보유한 리소스를 기다리고 있으며, 두 번째 프로세스도 세 번째 프로세스가 보유한 리소스를 기다리고 있습니다. 이는 마지막 프로세스가 첫 번째 프로세스가 보유한 리소스를 기다릴 때까지 계속됩니다. 그러면 원형 체인이 생성됩니다.
예를 들어 프로세스 A에는 리소스 A를 요청하면서 리소스 B가 할당됩니다. 같은 방식으로 프로세스 B에는 리소스 A가 할당되고 리소스 B를 요청합니다. 이로 인해 순환 대기 루프가 생성됩니다.
순환 대기의 예
예를 들어, 컴퓨터에는 USB 드라이브 3개와 프로세스 3개가 있습니다. 3개 프로세스 각각은 USB 드라이브 중 하나를 보유할 수 있습니다. 따라서 각 프로세스가 다른 드라이브를 요청할 때, 3개 프로세스는 현재 사용 중인 USB 드라이브가 해제될 때까지 각 프로세스가 기다리기 때문에 교착 상태가 됩니다. 이로 인해 순환 체인이 발생합니다.
OS에서의 교착 상태 감지
교착 상태 발생은 리소스 스케줄러에 의해 감지될 수 있습니다. 리소스 스케줄러는 OS가 다른 프로세스에 할당된 모든 리소스를 추적하는 데 도움이 됩니다. 따라서 교착 상태가 감지되면 아래에 제공된 방법을 사용하여 해결할 수 있습니다.
OS에서의 교착 상태 방지
교착 상태가 발생하기 전에 방지하는 것이 중요합니다. 시스템은 실행되기 전에 모든 트랜잭션을 확인하여 교착 상태 상황으로 이어지지 않는지 확인합니다. 작은 변경 사항이라도 발생하여 미래에 교착 상태로 이어질 수 있는 작업이 실행되지 않도록 프로세스가 실행되지 않도록 합니다.
이는 조건 중 하나 이상이 유지될 수 없도록 보장하는 방법 세트입니다.
선제조치 없음
선점 없음 – 프로세스가 작업을 완료한 후에 리소스를 보유하고 있는 프로세스에 의해서만 리소스가 자발적으로 해제될 수 있습니다.
- 일부 리소스를 보유하고 있는 프로세스가 즉시 할당할 수 없는 다른 리소스를 요청하면 해당 상황에서 모든 리소스가 해제됩니다.
- 선점된 리소스에는 대기 중인 프로세스에 대한 리소스 목록이 필요합니다.
- 프로세스는 이전 리소스와 요청 중인 새 리소스를 다시 얻을 수 있는 경우에만 다시 시작됩니다.
- 프로세스가 다른 리소스를 요청하는 경우 해당 리소스가 사용 가능하면 요청 프로세스에 제공됩니다.
- 다른 리소스를 기다리고 있는 다른 프로세스가 보유하고 있는 경우 이를 해제하고 요청 프로세스에 제공합니다.
상호 배제
상호 배제는 Mutex의 완전한 형태입니다. 공유 리소스에 대한 액세스를 제어하는 데 사용되는 특별한 유형의 바이너리 세마포어입니다. 확장된 우선순위 반전 문제를 방지하기 위한 우선순위 상속 메커니즘이 포함되어 있습니다. 이를 통해 현재 우선 순위가 높은 작업을 가능한 한 짧은 시간 동안 차단 상태로 유지할 수 있습니다.
읽기 전용 파일과 같은 공유 리소스는 결코 교착 상태로 이어지지 않지만 프린터나 테이프 드라이브와 같은 리소스는 단일 프로세스가 독점적으로 액세스해야 합니다.
잡고 기다려라
이러한 상황에서는 프로세스가 하나 이상의 다른 리소스를 기다리는 동안 동시에 하나 또는 여러 개의 리소스를 보유하는 것을 중지해야 합니다.
순환 대기
모든 리소스 유형의 전체 순서를 지정합니다. 순환 대기에는 또한 모든 프로세스가 열거된 순서대로 리소스를 요청해야 합니다.
교착상태 회피 Algorithms
교착 상태가 발생한 후에 조치를 취하는 대신 교착 상태를 피하는 것이 더 좋습니다. 리소스를 어떻게 사용해야 하는지와 같은 추가 정보가 필요합니다. 교착 상태 회피는 각 프로세스가 필요할 수 있는 각 유형의 리소스의 최대 수를 선언하는 가장 간단하고 유용한 모델입니다.
기피 Algorithms
교착 상태 회피 알고리즘은 자원 할당 상태를 동적으로 평가하여 순환 대기 상황이 발생하지 않도록 하는 데 도움이 됩니다.
리소스 유형의 단일 인스턴스입니다.
- 자원 할당 그래프 사용
- 교착 상태에는 충분한 사이클이 필요합니다.
리소스 유형의 인스턴스를 여러 개 만듭니다.
- 교착 상태에는 사이클이 필요하지만 결코 충분하지는 않습니다.
- 사용 은행가의 알고리즘
기아와 교착 상태의 차이점
교착 상태와 기아 상태의 중요한 차이점은 다음과 같습니다.
이중 자물쇠 | 굶주림 |
---|---|
교착 상태 상황은 프로세스 중 하나가 차단되었을 때 발생합니다. | 기아(Starvation)는 우선순위가 낮은 프로세스가 모두 차단되고 우선순위가 높은 프로세스가 실행되는 상황입니다. |
교착상태는 무한한 과정이다. | 기아는 오랜 기다림이지만 무한한 과정은 아닙니다. |
모든 교착 상태에는 항상 기아 상태가 발생합니다. | 모든 기아가 반드시 교착상태를 가져오는 것은 아닙니다. |
교착 상태가 발생하면 상호 배제, 보류 및 대기가 발생합니다. 여기서 선점과 순환 대기는 동시에 발생하지 않습니다. | 통제되지 않은 우선순위와 자원 관리로 인해 발생합니다. |
교착 상태의 장점
Deadlock 방법을 사용하는 장단점은 다음과 같습니다.
- 이 상황은 단일 활동 버스트를 수행하는 프로세스에 적합합니다.
- Deadlock에는 선점이 필요하지 않습니다.
- 상태를 쉽게 저장하고 복원할 수 있는 자원에 적용하면 편리한 방법
- 컴파일 타임 검사를 통해 적용 가능
- 시스템 설계에서 문제가 해결되므로 런타임 계산이 필요하지 않습니다.
교착상태의 단점
교착 상태 방법을 사용하는 것의 단점은 다음과 같습니다.
- 프로세스 시작 지연
- 프로세스는 미래의 리소스 요구 사항을 알아야 합니다.
- 필요 이상으로 자주 선점
- 증분 리소스 요청을 허용하지 않습니다.
- 본질적인 선점 손실.
요약
- 교착 상태 정의: 교착 상태는 다음과 같은 상황에서 발생합니다. OS 다른 대기 프로세스가 요구된 자원을 보유하고 있기 때문에 어떤 프로세스가 대기 상태에 들어갈 때
- 순환 대기는 한 프로세스가 두 번째 프로세스가 보유한 리소스를 기다리고 있으며, 이 리소스는 세 번째 프로세스가 보유한 리소스도 기다리고 있을 때 발생합니다.
- 교착 상태 발생은 리소스 스케줄러에 의해 감지될 수 있습니다.
- 교착 상태가 발생하기 전에 이를 예방하는 것이 중요합니다.
- 리소스는 해당 프로세스가 해당 작업을 완료한 후에 이를 보유하고 있는 프로세스에 의해서만 자발적으로 해제될 수 있습니다.
- 상호 배제는 Mutex의 완전한 형태입니다. 특별한 유형의 바이너리입니다. 신호기 공유 리소스에 대한 액세스를 제어하는 데 사용됩니다.
- 보류 및 대기는 프로세스가 하나 이상의 다른 리소스를 기다리는 동안 동시에 하나 이상의 리소스를 보류하는 것을 중지해야 하는 조건입니다.
- 교착 상태 회피는 각 프로세스가 필요할 수 있는 각 유형의 리소스의 최대 수를 선언하는 가장 간단하고 유용한 모델입니다.
- 교착 상태 회피 알고리즘은 자원 할당 상태를 동적으로 평가하여 순환 대기 상황이 발생하지 않도록 하는 데 도움이 됩니다.
- 교착 상태는 무한한 과정인 반면, 기아 상태는 오랜 대기이지만 무한한 과정은 아닙니다.