우선순위 역전
< 우선순위 역전이란? >
카페에 가서 커피를 시킨 상황을 상상해보자. 고객들은 VIP, 일반 등급이 있다고 가정할 때. VIP는 빨리 서비스를 받아야 하고, 일반은 천천히 받는 그런 운영이다. 근데, VIP가 커피를 받기 전에 어떤 일반 고객이 바리스타에게 특별한 요청을 해서 VIP가 더 오래 기다리게 되었다고 상상해보자.
이 상황에서 VIP는 원래 높은 우선순위를 가지고 있었지만, 일반 고객 때문에 기다리게 된다. 이런 상황을 컴퓨터 운영체제에서도 볼 수 있다. 높은 우선순위를 가진 프로세스가 낮은 우선순위를 가진 프로세스 때문에 기다리게 되는 현상을 '우선순위 역전'이라고 한다.
< 발생원인 >
우선순위 역전은 주로 공유자원을 사용하는 상황에서 발생한다. 예를 들어, 낮은 우선순위 프로세스가 어떤 데이터를 사용 중인데, 높은 우선순위 프로세스도 그 데이터가 필요한 경우에 발생할 수 있다. 이 때, 높은 우선순위 프로세스는 낮은 우선순위 프로세스가 데이터를 놓을 때까지 기다려야 한다.
< 해결 방안 >
Priority Inheritance (우선순위 상속): 낮은 우선순위 프로세스가 높은 우선순위 프로세스 때문에 기다리게 되면, 낮은 우선순위 프로세스의 우선순위를 일시적으로 높여주면 된다.
예를 들자면 교실에서 숙제를 하는데, 1개의 계산기 밖에 없고, 내가 계산기가 필요한 상황이다. 그런데, 계산기는 친구가 사용 중이고, 친구는 우선순위가 낮다. 여기서 선생님이 들어오시면서 계산기를 빨리 사용하도록 친구에게 말하는 것처럼. 여기서 친구의 우선순위가 잠시 높아진 셈이다. 컴퓨터에서도 높은 우선순위의 프로세스가 기다리고 있다면, 낮은 우선순위 프로세스의 우선순위를 일시적으로 높여서 빨리 처리되도록 할 수 있다.
Priority Ceiling (우선순위 상한): 공유 자원에 접근하는 모든 프로세스의 우선순위를 미리 정해진 상한 값으로 설정하여, 높은 우선순위 프로세스가 대기하지 않도록 한다.