본문 바로가기

전공/운영체제

[운영체제] 동기화 도구들: Liveness

 

Liveness


 

임계구역에 대한 접근을 조정하기 위해서 동기화 도구를 사용하는 것은 임계구역에 들어가려는 프로세스가 무한히 대기하는 결과를 가져올 수 있다.

 

무한 대기는 임계구역 문제 해결책의 세가지 요구 조건인 진행과 한정된 대기를 만족시키지 못한다.

 

 

 

Liveness는 시스템이 프로세스의 진행을 보장하기 위해서 만족해야 하는 속성의 집합을 의미한다.

 

Liveness 실패는 성능과 응답성 모두에서 좋지 않다.

 

Liveness 실패로 이어 질 수 있는 두 가지 상황을 아래에서 살펴본다.

 

 

 

 

 

 

교착 상태(Deadlock)


 

교착 상태는 집합 내의 모든 프로세스가 대기중인 프로세스 중 하나에 의해 일어나는 event를 무한히 기다리는 상황을 의미한다.

 

여기서 event는 mutex lock과 세마포와 같은 자원의 획득과 방출이다.

 

예시)

 

 

 

P0가 wait(S)를 실행하고 P1이 wait(Q)를 실행할 때, 두 프로세스는 교착 상태에 빠지게 된다.

 

 

 

 

 

 

우선순위 역전(Priority Inversion)


 

높은 우선순위의 프로세스가 낮은 우선순위의 프로세스가 사용 중인 kernel data에 접근할 때 스케줄링의 어려움이 발생한다.

 

kernel data를 lock으로 보호되기 때문에 높은 순위의 프로세스가 대기해야 한다.

 

높은 우선순위의 프로세스를 위해 낮은 우선순위의 프로세스가 선점된다면 더 복잡해진다.

 

 

 

우선순위가 L < M < H인 세 프로세스가 존재한다고 가정하자.

 

프로세스 H가 L이 사용 중인 세마포를 요구하면, 보통 H는 L이 끝날 때까지 기다린다.

 

이때 갑자기 M이 실행가능한 상태가 되어 L을 선점해버리면 문제가 발생한다.

 

우선순위가 낮은 M이 순위가 높은 H가 기다리는 시간에 영향을 미쳤기 때문이다.

 

 

 

이러한 Liveness 문제를 우선순위의 역전이라고 하고, 우선순위가 두 개보다 많은 경우에 발생한다.

 

우선순위 역전 문제는 우선순위 상속 기법(priority-inheritance protocl)을 사용해서 해결한다.

 

이는 높은 우선순위 프로세스가 필요로 하는 자원에 접근하는 모든 프로세스는 자원 사용이 끝날 때까지 높은 순위를 상속 받아 종료 시 원래 우선순위로 되돌아가는 방법이다.

 

이는 위의 예시에서 M이 L을 선점하는 것을 방지한다.