프로세스가 실행 되는 동안 Progress되는것을 보장하기 위해 시스템이 충족해야하는 속성이다. Progress가 지켜지지 않으면 Bounded waiting 또한 지켜 질수 없으므로 이러한 프로세스는 라이브니스 실패라고 한다.
라이브니스 실패는 간단하게 무한루프를 통해서 발생할 수 있다.
프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태이다.
아래와 같은 경우 데드락이 발생할 수 있다.
사진 출처 : https://jwprogramming.tistory.com/12
높은 우선순위의 프로세스가 낮은 우선순위의 프로세스로 인하여 block되어 있는 상태이다.
예를들어 우선순위가 높은 프로세스를 '상', 낮은 프로세스를 '하'라고 가정하겠다.
1. 현재는 '하'가 세마포어를 요청하여 획득한 상태이다.
2. '상'이 실행되면 CPU 스케쥴링을 통해 '상'이 실행된다. (프로세스 우선순위가 높기때문에)
3. '상'의 프로세스 내에 세마포어를 요청하는 코드가 있으며 세마포어를 요청하였지만 해당 세마포어는 '하' 프로세스가 들고 있기때문에 반환할때까지 '상'은 대기상태로 유지한다
4. 프로세스 '하'가 작업이 끝나고 난 후 세마포어를 반환해야 '상'의 대기 상태가 끝나게 된다.
추가적으로 중간 프로세스 우선순위를 가지는 '중' 프로세스가 여러개 있다고 하자.
3~4번 사이제 '중'이라는 프로세스들이 여러개가 들어온다면 당연히 '하' 프로세스가 실행되지 않고 '중'프로세스들이 실행될것이다. 그렇게 되면 모든 '중' 프로세스들이 실행된 후 '하' 프로세스가 실행되고 마지막으로 '상' 프로세스가 실행될것이다. 이렇게 중간 우선순위를 가지는 프로세스들이 많을 수록 더욱 비효율적인 성능 문제가 발생할 것이다.
이러한 문제를 해결하기 위해선 우선순위 상속 프로토콜을 구현하여 해결한다. 간단하게 설명하자면 우선 순위가 높은 프로세스
가 접근하고자하는 자원을 할당 받은 프로세스를 접근하고자하는 프로세스보다 더 높은 우선 순위를 할당
하여 해당 자원을 빠르게 반환하게 만든다. 이후 자원을 반환하면 원래의 우선 순위로 돌아가게 되며 기존의 우선 순위에 맞게 프로세스들이 동작하게 된다.
그렇게 되면 '하'프로세스는 '상', '중'프로세스보다 더 높은 우선순위를 가지며 '상', '중' 프로세스들이 선점하는것을 막을 수 있다.