📖 WIPIVERSE

🔍 현재 등록된 정보: 54,966건

우선순위 역전

우선순위 역전 (Priority Inversion)은 운영체제나 실시간 시스템에서 발생하는 문제로, 높은 우선순위를 가진 태스크가 낮은 우선순위를 가진 태스크 때문에 실행되지 못하는 상황을 의미한다. 이는 스케줄링 알고리즘의 예상치 못한 결과로, 시스템의 응답성을 저하시키고 데드락(Deadlock)을 유발할 수 있다.

발생 원인

우선순위 역전은 일반적으로 공유 자원(Shared Resource)에 대한 접근 제어 방식에서 발생한다. 높은 우선순위를 가진 태스크가 공유 자원을 사용하려고 할 때, 이미 낮은 우선순위를 가진 태스크가 해당 자원을 점유하고 있다면 높은 우선순위 태스크는 자원을 반환받을 때까지 대기해야 한다. 문제는 이 낮은 우선순위 태스크가 자원 사용을 마치기 전에 중간 우선순위의 다른 태스크들이 실행되면서, 높은 우선순위 태스크의 대기 시간이 예상보다 길어질 수 있다는 것이다.

해결 방법

우선순위 역전 문제를 해결하기 위한 다양한 방법이 존재한다. 대표적인 방법은 다음과 같다.

  • 우선순위 상속 (Priority Inheritance): 낮은 우선순위 태스크가 공유 자원을 점유하고 있는 동안, 해당 태스크의 우선순위를 자원을 기다리는 가장 높은 우선순위 태스크의 우선순위로 일시적으로 높여주는 방식이다. 이를 통해 중간 우선순위 태스크들이 낮은 우선순위 태스크보다 먼저 실행되는 것을 방지한다.
  • 우선순위 천장 (Priority Ceiling Protocol): 공유 자원에 접근하는 모든 태스크의 우선순위를, 해당 자원에 접근할 수 있는 가장 높은 우선순위 태스크의 우선순위로 설정하는 방식이다. 이를 통해 우선순위 역전 발생 가능성을 사전에 차단한다.
  • 뮤텍스 (Mutex) 사용: 뮤텍스는 상호 배제를 위한 잠금(Lock) 메커니즘으로, 공유 자원에 대한 접근을 동기화하는 데 사용된다. 뮤텍스를 사용할 때 우선순위 상속 또는 우선순위 천장 프로토콜과 함께 사용하면 우선순위 역전 문제를 완화할 수 있다.

중요성

우선순위 역전은 실시간 시스템이나 임베디드 시스템에서 치명적인 문제를 야기할 수 있다. 특히 항공기 제어 시스템, 의료 장비, 자동차 제어 시스템 등과 같이 시간 제약이 엄격한 시스템에서는 우선순위 역전으로 인해 시스템 오작동이 발생할 수 있다. 따라서 이러한 시스템을 설계할 때는 우선순위 역전 문제에 대한 고려가 필수적이다.