우선순위 기반 스케줄링은 실시간 시스템에서 중요한 작업을 더 빨리 수행하기 위해 사용되는 기법입니다만, 때때로 예기치 않은 문제를 발생시킬 수 있는데, 그중 대표적인 것이 우선순위 역전(Priority Inversion) 현상입니다. 우선순위 역전은 우선순위가 높은 작업이 낮은 작업 때문에 지연되는 비정상적인 상황을 말합니다. 이번 글에서는 우선순위 역전의 정의, 발생 원인, 그리고 이를 해결하기 위한 방법들을 살펴보겠습니다.
1. 우선순위 역전(Priority Inversion)이란?
우선순위 역전은 우선순위가 낮은 프로세스가 우선순위가 높은 프로세스보다 먼저 실행되거나, 높은 프로세스의 실행을 지연시키는 상황입니다. 이는 주로 공유 자원을 사용하는 멀티태스킹 환경에서 발생합니다.
(예시)
- 프로세스 L (Low): 우선순위 낮음
- 프로세스 M (Medium): 우선순위 중간
- 프로세스 H (High): 우선순위 높음
- L이 공유 자원을 점유한 상태에서 실행 중
- H가 실행되면서 자원을 요청하지만, L이 자원을 점유 중이므로 대기
- 이 상황에서 해당 자원이 필요없는 M이 실행되면, L보다 높은 우선순위인 M은 실행되고, L은 실행되지 않은 상태에서 자원 해제는 못하고 있게 되며, H는 자원이 해제될 때까지 계속 대기하게 됩니다.
결과적으로, 우선순위가 가장 높은 H가 실행되지 못하는 역설적인 상황이 발생하게 됩니다.
2. 우선순위 역전의 원인
우선순위 역전은 주로 아래와 같은 상황에서 발생합니다.
- 공유 자원 사용
여러 프로세스가 동일한 자원(예: 파일, 메모리 블록 등)을 사용할 때, 자원을 점유한 프로세스의 실행이 지연되면 우선순위 역전이 발생합니다. - 비선점형(non-preemptive) 공유 자원 관리
공유 자원을 관리할 때, 점유 중인 프로세스를 강제로 멈출 수 없는 경우 우선순위 역전이 발생할 가능성이 높아집니다. - 스케줄링 정책의 한계
우선순위 기반 스케줄링에서 특정 조건에 따라 우선순위가 높은 프로세스가 대기 상태로 밀리는 구조적 결함이 원인이 될 수 있습니다.
3. 우선순위 역전이 미치는 영향
우선순위 역전은 특히 실시간 시스템에서 심각한 문제를 야기할 수 있습니다. 다음은 그 주요 영향입니다.
- 시스템 응답 지연: 우선순위가 높은 작업이 지연됨으로써 시스템의 전반적인 응답성이 저하됩니다.
- 작업 실패: 실시간 시스템에서 시간 제약을 초과하면 작업이 실패하거나 심각한 오류가 발생할 수 있습니다.
- 교착 상태(Deadlock) 위험 증가: 우선순위 역전과 교착 상태가 동시에 발생할 경우, 시스템 복구가 더욱 어려워질 수 있습니다.
4. 우선순위 역전 해결 방법
운영체제는 우선순위 역전을 해결하기 위해 다양한 방법을 제공합니다. 그중 대표적인 방법은 다음과 같습니다.
해결방법 | 설명 |
우선순위 상속
|
우선순위 상속은 공유 자원을 점유한 낮은 우선순위의 프로세스가 자원을 요청한 높은 우선순위의 프로세스와 동일한 우선순위를 임시로 상속받는 방법입니다. 예를 들어, 위의 사례에서 L이 H의 요청을 받고 H의 우선순위를 상속받아 실행 속도를 높이고, 자원을 빨리 해제할 수 있도록 합니다. |
우선순위 천장
|
우선순위 천장은 특정 자원에 대해 가장 높은 우선순위를 미리 정의해두고, 해당 자원을 사용하는 동안 프로세스가 그 우선순위를 강제로 가지도록 하는 방식입니다. 이는 교착 상태와 우선순위 역전을 동시에 예방하는 데 효과적입니다. |
타임아웃 기반 접근 |
프로세스가 자원을 점유하는 시간이 지나치게 길어지지 않도록 최대 대기 시간(Time-out)을 설정하는 방법입니다. 이는 간단한 해결책이지만, 실시간 환경에서는 부적합할 수 있습니다. |
선점형 자원 관리 |
공유 자원을 사용하는 프로세스가 우선순위가 높은 프로세스에 의해 강제로 중단되고 자원을 해제하도록 설계하는 방식입니다. 이는 구현이 복잡할 수 있지만, 실시간 환경에서 효과적입니다. |
5. 우선순위 역전의 실제 사례
우선순위 역전은 이론적인 문제가 아니라 실생활에서도 나타납니다.
가장 유명한 사례는 NASA의 Pathfinder 탐사선에서 발생한 문제입니다. Pathfinder는 우선순위 역전으로 인해 주 시스템이 반복적으로 멈추는 문제가 있었고, 우선순위 상속 메커니즘을 통해 이를 해결했습니다. 이 사례는 우선순위 역전의 심각성을 보여주는 대표적인 예입니다.