Livelock: Deadlock과 Livelock의 차이점, 예
라이브락이란 무엇인가요?
A 라이브 록 중복된 공유 잠금이 계속해서 서로 간섭하여 배타적 잠금 요청이 반복적으로 거부되는 상황입니다. 프로세스의 상태가 계속 변경되어 작업을 완료할 수 없게 됩니다. 이로 인해 작업을 완료할 수 없게 됩니다.
라이브락의 예
예 1 :
라이브록의 가장 쉬운 예는 복도에서 마주한 두 사람이 서로 옆으로 지나가도록 하는 것입니다. 그들은 같은 방향으로 움직일 때 아무런 진전도 없이 결국 좌우로 움직이게 된다. 여기서 그들은 결코 서로 교차하지 않습니다.
예 2 :
위 이미지에서 볼 수 있듯이 주어진 두 프로세스 각각에는 두 개의 리소스가 필요하며 기본 폴링 입력 레지스트리를 사용하여 필요한 잠금을 획득하려고 시도합니다. 시도가 실패하면 메서드가 다시 작동합니다.
- 프로세스 A는 Y 자원을 보유합니다.
- 프로세스 B는 자원 X를 보유합니다.
- 프로세스 A에는 X 리소스가 필요합니다.
- 프로세스 B에는 Y 리소스가 필요합니다.
프로세스 A가 먼저 실행되어 데이터 리소스 X를 획득한 다음 프로세스 B가 실행되어 리소스 Y를 획득한다고 가정하면, 어떤 프로세스가 먼저 실행되더라도 더 이상 진행되지 않습니다.
그러나 두 프로세스 중 어느 것도 차단되지 않습니다. 아무런 진행도 없이 CPU 리소스를 반복적으로 사용하지만 처리 블록도 중지합니다.
그러므로 이 상황은 A의 상황이 아니다. 이중 자물쇠 단 하나의 프로세스도 차단되지 않았지만, 우리는 LIVELOCK이라는 교착상태와 유사한 상황에 직면하게 됩니다.
Livelock의 원인은 무엇입니까?
Livelock은 특정 시스템에서 허용되는 총 프로세스 수가 프로세스 테이블의 총 항목 수로 정의되어야 할 때 발생합니다. 따라서 프로세스 테이블 슬롯을 유한 자원이라고 해야 합니다.
교착상태란 무엇인가?
교착 상태는 다른 대기 프로세스가 요구된 리소스를 보유하고 있기 때문에 어떤 프로세스가 대기 상태에 들어갈 때 OS에서 발생하는 상황입니다. 교착 상태는 여러 프로세스가 소프트 잠금 또는 소프트웨어라고 하는 특정 유형의 상호 배타적 리소스를 공유하는 멀티 프로세싱에서 흔한 문제입니다.
교착 상태의 예
- 실제 사례는 한 방향으로만 진행되는 교통 상황입니다.
- 여기서 브리지는 리소스로 간주됩니다.
- 따라서 교착 상태가 발생하면 한 대의 차량이 후진하면(자원을 선점하고 롤백) 쉽게 해결할 수 있습니다.
- 교착 상태가 발생하면 여러 대의 차량을 백업해야 할 수도 있습니다.
- 그래서 기아가 가능합니다.

굶주림이란 무엇입니까?
기아(Starvation)는 우선순위가 낮은 프로세스가 모두 차단되고, 우선순위가 높은 프로세스가 진행되는 상황입니다. 어떤 시스템에서든 우선순위가 높거나 낮은 리소스에 대한 요청은 계속해서 동적으로 발생합니다. 따라서 누가 언제 지원을 받을지 결정하는 몇 가지 정책이 필요합니다.
일부 알고리즘을 사용하면 일부 프로세스는 교착 상태가 아니더라도 원하는 서비스를 받지 못할 수 있습니다. 일부 스레드가 공유 리소스를 장시간 사용할 수 없게 만들면 기아 상태가 발생합니다.
기아의 예
예를 들어, 객체가 반환하는 데 오랜 시간이 걸릴 수 있는 동기화된 메서드를 제공합니다. 한 스레드가 이 메서드를 자주 사용하는 경우 동일한 객체에 대한 동기화된 액세스가 자주 필요한 다른 스레드는 종종 차단됩니다.
데드락, 기아, 라이브락의 차이점
- 교착 상태란, 요구되는 자원이 다른 대기 중인 프로세스에 의해 점유되어 어떤 프로세스가 대기 상태에 빠지는 상황으로, OS에서 발생합니다.
- 반면, 라이브락은 교착상태와 거의 유사합니다. 다만 라이브락에 관련된 프로세스의 상태는 항상 서로 바뀌고 진행되지 않습니다.
- 따라서 Livelock은 자원 부족의 독특한 사례입니다.
제품 개요
- 정의: 라이브록(Livelock)은 중복되는 공유 잠금이 계속해서 서로 간섭하기 때문에 배타적 잠금 요청이 반복적으로 거부되는 상황입니다.
- 라이브록은 특정 시스템에서 허용되는 총 프로세스 수가 프로세스 테이블의 총 항목 수로 정의되어야 할 때 발생합니다.
- 교착 상태란 다른 대기 프로세스가 요구되는 자원을 점유하고 있어서 어떤 프로세스가 대기 상태에 들어가는 경우 OS에서 발생하는 상황을 말합니다.
- 실제 사례는 한 방향으로만 진행되는 교통 상황입니다.
- Livelock의 예로는 두 사람이 복도에서 마주보고 다른 사람이 지나가도록 옆으로 이동하는 경우가 있습니다.
- 기아(Starvation)는 우선순위가 낮은 프로세스가 모두 차단되고, 우선순위가 높은 프로세스가 진행되는 상황입니다.

