※ 이 글을 작성하기 전에 본인은 이 분야의 전문성을 가진 전문가가 아님을 미리 밝힙니다. ※


#1) 우선순위 역전 현상 (Priority Inversion State)

우선순위가 가장 높은 프로세스 A, 중간인 B, 가장 낮은 C가 존재한다고 가정해보자.

가장 먼저, C가 작업을 수행하기 위해서 CPU를 할당받고 공유자원을 사용하러 들어간다. 그럼 이 때, 공유자원에 대한 lock()이 걸려서 다른 프로세스는 이 공유자원에 접근을 할 수 없게 된다.

이 후, 공유 자원을 필요로 하는 A가 작업을 수행하기 위해서 왔지만 이미 C가 공유자원을 사용하고 있으므로 lock()에 걸려 있는 상태라서 A가 작업을 수행하지 못하고 대기 상태에 들어가게 된다.

이 타이밍에 공유자원을 필요로 하지 않는 B가 작업을 수행하기 위해서 오게 된다. B는 C보다 우선순위가 더 높은 프로세스이고 공유자원 또한 필요로 하지 않는 프로세스 이기 때문에 C는 하던 작업을 멈추고 B에게 CPU를 내어주게 된다.

결국 B가 작업을 모두 완료한 후, 다시 C가 작업을 진행하게 되고 최종적으로 A가 진행되어 진다.

 

위의 상황이 우선순위 역전 현상이다. 상대적으로 우선순위가 가장 높은 프로세스인 'A'가 마치 우선순위가 가장 낮은 프로세스처럼 실행이 되는 현상이다.

우선순위 역전 현상은 "공유자원에 대한 lock에 대한 개념 때문에 발생하는 현상" 이다.

 

#2) 우선순위 역전현상 해결 방식

우선순위 역전현상을 해결하는 방식으로는 크게 2가지 방식이 있다.

1. PIP (Priority Inheritance Protocol)

2. PCP (Priority Ceiliing Protocol)

 

#2 - 1) PIP (Prioirty Inheritance Protocol)

공유자원을 필요로 하는 프로세스가 실행중일 때, 같은 공유자원을 사용하려는 우선순위가 더 높은 프로세스가 접근한다면, 임시적으로 해당 프로세스의 우선순위로 바꿔버리는 방식이다.

즉, 위의 예시로 빗대어 이야기해보면, C가 실행되는 도중에, A가 접근을 시도한다면 C의 우선순위를 임시적으로 A의 우선순위로 바꿔버리는 것이다. 그렇게 된다면, B가 접근하더라도 B는 상대적으로 우선순위가 더 낮은 프로세스라 판단되어질 것이고, CPU를 할당받지 못하고 기다리게 될 것이다.

구현이 매우 간단한 편이라서 자주 사용되는 방식이다.

 

#2 - 2) PCP (Priority Ceiling Protocol)

공유자원을 사용하는 프로세스가 실행되어지면, 그 순간부터 우선순위를 매우 높여주는 방식이다. 즉 ! 공유자원을 사용하는 순간에는 우선순위가 가장 높은 프로세스가 되고, 모두 끝나고 나면 다시 우선순위를 낮춰주는 방식이다.

이 방식의 경우, 모든 프로세스의 우선순위가 각 프로세스가 요구하는 공유자원에 대한 정보를 모두 사전에 알고 있다는 전제하에 실현 가능한 방식이다. 그 만큼 구현도 복잡해서 자주 사용되지는 않는 방식이다.

 

이 둘은 매우 비슷한 방식이지만, 차이점은 공유자원에 접근하는 순간 우선순위를  높여서 프로세스를 진행할 것인가(PCP) 아니면 일단 프로세스의 우선순위 그대로 진행하다가 해당 공유자원에 접근하는 또 다른 프로세스가 생기는 순간 우선순위를 높일 것인가(PIP)의 차이가 있다.

+ Recent posts