본문 바로가기

운영체제

Priority Inversion

Priority Inversion은 선점형 우선 스케쥴링(preemptive priority scheduling) 방식에서 발생하는 작업의 우선 순위가 역전되는 현상이다. 예를 들어, 우선 순위가 높고 낮은 작업인 HL이 있다. 각각은 배타적으로 접근해야 하는 공유 자원 R을 사용하고 있다. 만약, HR에 대한 접근을 L의 접근 이후에 한다면, H의 작업은 LR의 소유권을 놓을 때까지 지연된다. 우선 순위가 높은 H가 낮은 L을 기다리는 상황이 되는 것이다. 이러한 상황을 피하기 위해 LR의 소유권을 즉시 양도(relinquish)하도록 시스템을 설계하기도 한다.

하지만, 도중에 중간 우선 순위를 가지며 R을 사용하지 않는 작업 M이 작업 큐에 들어온다면, L보다 우선 순위가 높으므로 MCPU를 선점하게 된다. 이미 M에게 작업 권을 빼앗긴 LR의 소유권을 양도할 수도 없게 되고, H는 우선 순위가 자신 보다 낮은 M을 기다려야 하는 상황이 된다.

이는 실제로 오래전 화성 탐사선(Mars Pathfinder)의 소프트웨어에서 발견된 심각한 버그와도 연관이 되어 있다. 한가지 해결책으로 우선 상속(priority inheritance)이 있는데, 일시적으로 L의 우선 순위를 H와 동일하게 하여 도중에 M에 의한 interrupt를 방지하는 것이다. 물론, L의 critical section이 끝나 R을 release하게 되면 L의 우선 순위는 원래대로 돌아간다.

 

'운영체제' 카테고리의 다른 글

Race Condition  (0) 2020.04.11
Memory Layout of a Program(Process)  (0) 2020.04.09
Process와 Thread의 비교 및 차이  (0) 2020.04.07
WHAT HAPPENS WHEN YOU TURN A COMPUTER ON?  (0) 2020.04.06