2009년 11월 20일 금요일

Priority Inversion Protection

우선순위가 낮은 테스크가 소유한 자원을 우선순위가 높은 자원이 요청할 경우 대부분의 최신 OS는 우선순위 상속을 사용하여 문제를 해결한다. 우선순위 상속이 발생 시 낮은 우선순위 테스크의 우선순위가 높아지므로, 또다른 우선순위 역전이 발생할 수 있음을 주의해야 한다.

예를들어 flash driver에서 우선순위 상속이 발생하여 flash recalim등과 같이 CPU를 오래 소모하는 작업의 우선순위가 상승할 경우, 예기치 못한 우선순위 역전이 발생할 수 있다. flash reclaim자체는 write 작업에서만 발생하지만, 우선순위가 높은 task에서 요청한 flash read가 낮은 우선순위 task의 flash reclaim으로 지체 될 경우, OS는 priority inheritance로 이를 해결하려 하고, 이 때문에 flash reclaim이 높은 우선순위에서 실행되어, 예기치 못하게 오랜 시간동안 다른 테스크들의 실행을 막을 수 있는 것이다.

이와 같은 경우를 고려하여 우선순위 역전이 발생하지 않도록 appliacation들의 우선순위를 조절하고, flash driver의 서비스 처리 테스크 수를 늘려, 동시 접근에 대한 처리를 가능하도록 하여 문제를 해결할 수 있다.