실시간 시스템에서 작업의 우선순위를 적절히 설정하고 관리하는 것은 시스템의 성능과 안정성을 보장하는 데 매우 중요하다. Preempt RT와 같은 실시간 운영체제는 작업 스케줄링에 있어서 우선순위를 효율적으로 관리할 수 있는 여러 메커니즘을 제공한다. 이 장에서는 작업 우선순위를 설정하고 관리하는 방법에 대해 다룬다.

실시간 시스템에서의 우선순위 개념

실시간 시스템에서는 작업의 중요도에 따라 각 작업에 우선순위를 부여한다. 이러한 우선순위는 주어진 작업이 제한된 시간 내에 완료될 수 있도록 하며, 시스템의 전체적인 타임라인을 관리하는 데 중요한 역할을 한다.

우선순위와 스케줄링 정책

Preempt RT에서는 작업의 우선순위를 기반으로 하는 여러 스케줄링 정책이 존재한다. 주요 스케줄링 정책으로는 다음과 같은 것들이 있다.

우선순위 할당의 원칙

우선순위를 할당할 때는 다음과 같은 원칙을 고려해야 한다.

우선순위 역전 문제와 해결 방안

실시간 시스템에서 가장 중요한 문제 중 하나는 우선순위 역전(priority inversion) 문제이다. 우선순위 역전은 낮은 우선순위를 가진 작업이 높은 우선순위를 가진 작업보다 먼저 실행되는 상황을 의미한다. 이는 공유 자원 접근이나 동기화 메커니즘에서 발생할 수 있다.

우선순위 역전의 수학적 모델링

우선순위 역전의 상황을 모델링하기 위해, 작업 \mathbf{T_1}, \mathbf{T_2}, \mathbf{T_3}이 각각 우선순위 P_1, P_2, P_3를 가지며, P_1 > P_2 > P_3라고 가정한다. 일반적으로, \mathbf{T_1}이 실행되다가 공유 자원 R에 접근하는 경우, R을 이미 점유하고 있는 \mathbf{T_3}가 실행 완료될 때까지 \mathbf{T_1}은 대기해야 한다. 이때, 만약 \mathbf{T_2}가 실행된다면, \mathbf{T_1}보다 먼저 실행될 수 있는 상황이 발생하게 된다. 이를 수학적으로 표현하면 다음과 같다:

\text{대기 시간} = \mathbf{T_1}(\text{자원} \, R) + \mathbf{T_3}(\text{실행 시간}) + \mathbf{T_2}(\text{실행 시간})

이는 \mathbf{T_1}의 응답 시간을 예기치 않게 증가시켜 시스템의 실시간 성능을 저하시키는 결과를 초래할 수 있다.

우선순위 상속 프로토콜 (Priority Inheritance Protocol)

우선순위 역전 문제를 해결하기 위한 대표적인 방법 중 하나는 우선순위 상속 프로토콜(Priority Inheritance Protocol, PIP)이다. 이 프로토콜에 따르면, 낮은 우선순위를 가진 작업이 높은 우선순위를 가진 작업이 필요로 하는 자원을 점유하고 있을 때, 낮은 우선순위의 작업은 임시로 높은 우선순위를 상속받아 실행된다. 상속된 우선순위는 해당 자원이 해제될 때까지 유지된다.

수식으로 표현하면, 작업 \mathbf{T_3}가 자원 R을 점유하고 있을 때, 만약 우선순위 P_1을 가진 작업 \mathbf{T_1}R에 접근하려고 한다면, \mathbf{T_3}의 우선순위는 P_1로 상승한다. 따라서:

P_3' = \max(P_3, P_1)

이로 인해, \mathbf{T_3}는 더 높은 우선순위로 처리되며, \mathbf{T_1}이 자원에 접근할 수 있는 시간을 단축할 수 있다.

우선순위 천장 프로토콜 (Priority Ceiling Protocol)

우선순위 역전 문제를 보다 적극적으로 해결하기 위해 우선순위 천장 프로토콜(Priority Ceiling Protocol, PCP)이 사용될 수 있다. 이 프로토콜은 우선순위 상속 프로토콜보다 더 강력한 보장을 제공하며, 잠재적인 우선순위 역전 문제를 사전에 방지할 수 있다.

우선순위 천장 프로토콜의 동작 원리

우선순위 천장 프로토콜은 시스템의 각 자원에 대해 그 자원이 접근할 수 있는 작업들 중 가장 높은 우선순위 값을 "천장 우선순위(priority ceiling)"로 설정한다. 작업이 자원에 접근하려고 할 때, 그 작업의 우선순위가 현재 할당된 자원의 천장 우선순위보다 낮다면 해당 작업은 블록되고, 시스템은 자원을 이미 점유한 작업에게 천장 우선순위를 부여한다.

예를 들어, 자원 R의 천장 우선순위가 P_c이고, 현재 작업 \mathbf{T_1}의 우선순위가 P_1이라 할 때:

P_1 \geq P_c

조건을 만족하는 경우에만 \mathbf{T_1}은 자원 R에 접근할 수 있다. 그렇지 않은 경우, 자원을 점유한 다른 작업의 우선순위가 P_c로 상승하게 된다.

수학적 표현

우선순위 천장 프로토콜을 적용할 경우, 작업 \mathbf{T_1}이 자원 R에 접근하려고 할 때의 우선순위 비교는 다음과 같이 수학적으로 표현될 수 있다:

P_{\text{effective}} = \max(P_{\text{current}}, P_{\text{ceiling}})

여기서 P_{\text{effective}}는 실제로 적용되는 우선순위이다. 이 값은 자원을 점유한 작업이 천장 우선순위를 상속받아 블록이 최소화된 상태에서 수행되도록 한다.

동적 우선순위 할당

실시간 시스템에서는 작업의 특성과 시스템 상태에 따라 우선순위가 동적으로 변경될 수 있다. 이를 통해 시스템 자원을 보다 효율적으로 사용할 수 있다. 동적 우선순위 할당 기법에는 다음과 같은 것들이 있다:

이러한 동적 우선순위 할당 방법은 시스템의 유연성을 증가시키며, 예기치 못한 부하가 발생했을 때도 효율적인 자원 관리를 가능하게 한다.

우선순위 기반 스케줄링의 실시간 성능 분석

우선순위 기반 스케줄링의 성능을 평가하는 방법으로는 응답 시간 분석(Response Time Analysis, RTA)이 주로 사용된다. RTA는 각 작업이 주어진 시간 내에 완료될 수 있는지 확인하기 위해 작업의 최악의 응답 시간을 계산한다.

응답 시간 계산

작업 \mathbf{T_i}의 응답 시간 R_i는 다음과 같이 계산된다:

R_i = C_i + \sum_{j \in hp(i)} \left\lceil \frac{R_i}{T_j} \right\rceil C_j

여기서:

이 식을 반복적으로 계산하여 R_i가 수렴할 때까지 구한다. 최종적으로 R_i가 작업의 마감시간보다 작다면, 해당 작업은 실시간 요구사항을 만족한다고 볼 수 있다.

우선순위 관리의 실제 적용

실제 시스템에서 우선순위를 관리할 때는 작업의 특성과 요구사항을 면밀히 분석하여 최적의 우선순위를 설정해야 한다. 또한, 동시성 문제를 해결하기 위한 우선순위 상속 프로토콜이나 우선순위 천장 프로토콜을 적절히 사용하여 시스템의 안정성을 보장해야 한다.

다양한 실시간 스케줄링 알고리즘과 우선순위 관리 전략을 통해, Preempt RT 환경에서 실시간 애플리케이션의 효율적이고 안정적인 동작을 달성할 수 있다.