문제

멀티태스킹 시스템에서는 일부 비정상적인 조건으로 인해 프로세스나 스레드 실행이 진행되지 않습니다.저는 프로세스와 스레드를 모두 간단히 "프로세스"라고 부르겠습니다.이러한 조건 중 두 가지는 교착 상태(dead lock)와 라이브 잠금(live-lock)이라고 합니다.

전자는 서로를 차단하여 둘 중 하나의 실행을 방해하는 프로세스를 나타냅니다.후자는 서로의 진행을 방해하지만 실제로 실행을 차단하지는 않는 프로세스를 나타냅니다.예를 들어, 그들은 지속적으로 서로 트랜잭션을 롤백하도록 만들 수 있지만 끝내지 못할 수도 있습니다.

또 다른 조건은 프로세스 진행에 필요한 하나 이상의 한정된 리소스가 고갈되어 프로세스가 진행되지 않는 한 복원할 수 없는 리소스 부족으로 알려져 있습니다.이것도 라이브락의 특별한 경우이다.

'자원 기아'에만 국한되지 않고 '기아'에 대한 다른 정의, 특히 학술적인 정의가 있는지 알고 싶습니다.참고자료는 특별히 환영합니다.

그리고 아니요, 이것은 숙제가 아닙니다.:-)

도움이 되었습니까?

해결책

나는 자원 기아가 생생한 특별한 경우라고 말하지 않을 것입니다. 대개:

  • Livelock에서는 실이 진행되지 않지만 계속 실행됩니다. (교착 상태에서 그들은 계속 처형조차하지 않습니다)

  • 굶주릴 때, 일부 스레드 (들)는 진보를하고 일부 스레드 (들)가 실행되지 않습니다.

좋은 설명 : http://docs.oracle.com/javase/tutorial/estential/concurrency/starvelive.html. 그러나 나는 용어의 선택이 다를 수 있다는 것을 이해합니다.

기아에 관해서는, 내가 들었던 정의는 다음과 같습니다.

가정 (세마포어 의미, OS 스케줄러 동작 ...)과 일치하는 무한 실행 경로 (Interlace)를 지정할 수 있다고 가정 해 . 그런 다음 t를 굶주림이라고합니다.

그러나 연습은 그것에 맞지 않습니다. 두 개의 스레드가 무한 루프에서 비판 섹션을 실행한다고 가정합니다. 동기화 코드를 사용하면 첫 번째 스레드가 시간당 한 번 비평 섹션을 입력 할 수 있습니다. 기아입니까? 두 스레드는 모두 진행될 수 있지만 첫 번째 스레드는 고통스럽게 작업을 천천히 수행하는 것입니다.

가장 간단한 기아 공급원은 약한 세마포어입니다. 비슷하게 작동하는 동기화 프리미티브 (또는 자신의 구축)를 사용하는 경우 기아가 발생합니다.

기아가 잘 알려진 고전적인 문제 :

자세한 내용은 작은 세마포어 (free)를 진심으로 추천합니다. http://www.greenteapress.com/semaphores/.

모든 기아가 일부 자원을 기다림으로써 발생하는지 묻습니다. 말하고 싶습니다 - 예.

스레드를 매달릴 수 있습니다.

(1) 일부 차단 시스템 호출에서 - 뮤텍스, 세마포어, 조건부 변수를 대기/획득; 쓰기 (), poll () 등

(2) 계산 수행과 같은 일부 비 차단 작업에서.

(1)에 굶주림은 자원 (뮤텍스, 버퍼 등)에 굶주리고 있습니다.

(2)에 굶주림은 CPU에 굶주리고 있습니다 - 당신은 그것을 자원으로 간주 할 수 있습니다. 발생하면 스케줄러에 문제가 있습니다.

HTH

다른 팁

임산부가 우선 순위를 가진 식당에서 음식을 구입하는 대기열에 있다고 상상해보십시오. 그리고 항상 임산부가 항상 도착합니다.

당신은 곧 굶주릴 것입니다. ;)

이제 당신이 우선 순위가 낮고 임산부가 우선 순위가 높다고 상상해보십시오. =))

기아 또는 "무기한 차단"이 일반적으로 나오는 또 다른 영역이 우선 순위 일정 알고리즘에 대해 이야기 할 때입니다. 우선 순위 스케줄링 알고리즘은 우선 순위가 낮은 프로세스가 무기한으로 기다릴 수 있습니다. 우선 순위가 높은 프로세스의 꾸준한 스트림은 우선 순위가 낮은 프로세스가 실행되는 것을 방지 할 수 있습니다.

우선 순위 스케줄러의 경우 솔루션은 "노화"입니다. 노화는 시스템에서 오랫동안 기다리는 프로세스의 우선 순위를 점차적으로 증가시키는 기술입니다.

기아 상태는 단순히 시스템에 교착 상태가 없더라도 프로세스나 서비스가 제공되지 않는 경우를 말합니다.

이것은 설명을 위해 제가 방금 만든 예입니다.

WAN 등에 대한 컴퓨터 액세스를 제어하는 ​​알고리즘을 상상해 보십시오.이 알고리즘에는 "더 적은 대역폭을 사용하는 컴퓨터에 우선 액세스를 제공합니다."라는 정책이 있을 수 있습니다. 이는 적절한 정책처럼 보이지만 단일 컴퓨터가 FTP 업로드를 위해 네트워크에 액세스하려고 하면 어떻게 될까요? 어딘가에 몇 GB를 보내십시오.이 정책만으로는 더 작은 대역폭 사용을 요청하는 다른 컴퓨터가 항상 있기 때문에 알고리즘이 해당 컴퓨터를 선택하지 않으므로 해당 컴퓨터는 기아 상태가 됩니다.

그것을 굶주림이라고 합니다.

일하다 또한 일종의 자원입니다. 생산자 소비자 설정의 작업 분포가 공정하지 않거나 이상적이지 않으면 일부 스레드는 항상 바쁘게 유지하기에 충분한 작업 품목을 얻지 못할 수 있습니다.

프로세스는 더 오랫동안 리소스 나 리소스를 얻지 못합니다. 하나의 프로세스가 문제없이 실행되기 때문에 이것은 교착 상태가 아닙니다. 노화는이 문제를 해결하는 데 사용될 수 있으며, 각 요청에 노화 요소가 사용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top