Livelock: Deadlock과 Livelock의 차이점, 예

라이브락이란 무엇인가요?

A 라이브 록 중복된 공유 잠금이 계속해서 서로 간섭하여 배타적 잠금 요청이 반복적으로 거부되는 상황입니다. 프로세스의 상태가 계속 변경되어 작업을 완료할 수 없게 됩니다. 이로 인해 작업을 완료할 수 없게 됩니다.

라이브락의 예

예 1 :

라이브록의 가장 쉬운 예는 복도에서 마주한 두 사람이 서로 옆으로 지나가도록 하는 것입니다. 그들은 같은 방향으로 움직일 때 아무런 진전도 없이 결국 좌우로 움직이게 된다. 여기서 그들은 결코 서로 교차하지 않습니다.

예 2 :

라이브락의 예

위 이미지에서 볼 수 있듯이 주어진 두 프로세스 각각에는 두 개의 리소스가 필요하며 기본 폴링 입력 레지스트리를 사용하여 필요한 잠금을 획득하려고 시도합니다. 시도가 실패하면 메서드가 다시 작동합니다.

  1. 프로세스 A는 Y 자원을 보유합니다.
  2. 프로세스 B는 자원 X를 보유합니다.
  3. 프로세스 A에는 X 리소스가 필요합니다.
  4. 프로세스 B에는 Y 리소스가 필요합니다.

프로세스 A가 먼저 실행되어 데이터 리소스 X를 획득한 다음 프로세스 B가 실행되어 리소스 Y를 획득한다고 가정하면, 어떤 프로세스가 먼저 실행되더라도 더 이상 진행되지 않습니다.

그러나 두 프로세스 중 어느 것도 차단되지 않습니다. 아무런 진행도 없이 CPU 리소스를 반복적으로 사용하지만 처리 블록도 중지합니다.

그러므로 이 상황은 A의 상황이 아니다. 이중 자물쇠 단 하나의 프로세스도 차단되지 않았지만, 우리는 LIVELOCK이라는 교착상태와 유사한 상황에 직면하게 됩니다.

Livelock의 원인은 무엇입니까?

Livelock은 특정 시스템에서 허용되는 총 프로세스 수가 프로세스 테이블의 총 항목 수로 정의되어야 할 때 발생합니다. 따라서 프로세스 테이블 슬롯을 유한 자원이라고 해야 합니다.

교착상태란 무엇인가?

교착 상태는 다른 대기 프로세스가 요구된 리소스를 보유하고 있기 때문에 어떤 프로세스가 대기 상태에 들어갈 때 OS에서 발생하는 상황입니다. 교착 상태는 여러 프로세스가 소프트 잠금 또는 소프트웨어라고 하는 특정 유형의 상호 배타적 리소스를 공유하는 멀티 프로세싱에서 흔한 문제입니다.

교착 상태의 예

  • 실제 사례는 한 방향으로만 진행되는 교통 상황입니다.
  • 여기서 브리지는 리소스로 간주됩니다.
  • 따라서 교착 상태가 발생하면 한 대의 차량이 후진하면(자원을 선점하고 롤백) 쉽게 해결할 수 있습니다.
  • 교착 상태가 발생하면 여러 대의 차량을 백업해야 할 수도 있습니다.
  • 그래서 기아가 가능합니다.
교착 상태의 예
교착 상태의 예

굶주림이란 무엇입니까?

기아(Starvation)는 우선순위가 낮은 프로세스가 모두 차단되고, 우선순위가 높은 프로세스가 진행되는 상황입니다. 어떤 시스템에서든 우선순위가 높거나 낮은 리소스에 대한 요청은 계속해서 동적으로 발생합니다. 따라서 누가 언제 지원을 받을지 결정하는 몇 가지 정책이 필요합니다.

일부 알고리즘을 사용하면 일부 프로세스는 교착 상태가 아니더라도 원하는 서비스를 받지 못할 수 있습니다. 일부 스레드가 공유 리소스를 장시간 사용할 수 없게 만들면 기아 상태가 발생합니다.

기아의 예

예를 들어, 객체가 반환하는 데 오랜 시간이 걸릴 수 있는 동기화된 메서드를 제공합니다. 한 스레드가 이 메서드를 자주 사용하는 경우 동일한 객체에 대한 동기화된 액세스가 자주 필요한 다른 스레드는 종종 차단됩니다.

데드락, 기아, 라이브락의 차이점

  • 교착 상태란, 요구되는 자원이 다른 대기 중인 프로세스에 의해 점유되어 어떤 프로세스가 대기 상태에 빠지는 상황으로, OS에서 발생합니다.
  • 반면, 라이브락은 교착상태와 거의 유사합니다. 다만 라이브락에 관련된 프로세스의 상태는 항상 서로 바뀌고 진행되지 않습니다.
  • 따라서 Livelock은 자원 부족의 독특한 사례입니다.

제품 개요

  • 정의: 라이브록(Livelock)은 중복되는 공유 잠금이 계속해서 서로 간섭하기 때문에 배타적 잠금 요청이 반복적으로 거부되는 상황입니다.
  • 라이브록은 특정 시스템에서 허용되는 총 프로세스 수가 프로세스 테이블의 총 항목 수로 정의되어야 할 때 발생합니다.
  • 교착 상태란 다른 대기 프로세스가 요구되는 자원을 점유하고 있어서 어떤 프로세스가 대기 상태에 들어가는 경우 OS에서 발생하는 상황을 말합니다.
  • 실제 사례는 한 방향으로만 진행되는 교통 상황입니다.
  • Livelock의 예로는 두 사람이 복도에서 마주보고 다른 사람이 지나가도록 옆으로 이동하는 경우가 있습니다.
  • 기아(Starvation)는 우선순위가 낮은 프로세스가 모두 차단되고, 우선순위가 높은 프로세스가 진행되는 상황입니다.

이 게시물을 요약하면 다음과 같습니다.