문제: 우선순위 전도(Priority Inversion) 상황 시나리오와 해결 기법
우선순위 전도(Priority Inversion)란?
우선순위 전도(Priority Inversion)는 높은 우선순위의 작업이 낮은 우선순위의 작업에 의해 간접적으로 차단되어 작업 수행이 지연되는 상황을 말합니다. 이 문제는 실시간 시스템에서 특히 중요한데, 특정 작업이 시간 내에 완료되지 않으면 시스템 전체의 성능이나 안정성에 큰 영향을 줄 수 있기 때문입니다.
우선순위 전도 시나리오
1. 작업 A (높은 우선순위), 작업 B (중간 우선순위), **작업 C (낮은 우선순위)**가 시스템에서 동시에 실행되고 있다고 가정합니다.
2. 낮은 우선순위의 작업 C가 특정 자원을 점유하고 있는 상황에서, 높은 우선순위의 작업 A가 실행되기 위해 해당 자원을 필요로 합니다.
3. 작업 A는 높은 우선순위이기 때문에 작업 C보다 먼저 실행되어야 하지만, 자원을 작업 C가 이미 점유하고 있어 작업 A는 대기 상태로 전환됩니다.
4. 그 사이에 중간 우선순위의 작업 B가 실행되면서 작업 C의 실행을 막게 됩니다. 이로 인해 작업 A는 자원을 기다리는 동안, 자신보다 낮은 우선순위의 작업들에 의해 계속 지연됩니다.
이와 같은 상황에서 높은 우선순위의 작업이 낮은 우선순위 작업보다 늦게 완료되는 역설적 현상이 발생하게 됩니다. 이는 실시간 시스템에서 특히 치명적입니다.
해결 기법
우선순위 전도 문제를 해결하는 대표적인 기법으로는 우선순위 상속(Priority Inheritance)과 우선순위 천장(Priority Ceiling) 기법이 있습니다.
우선순위 상속(Priority Inheritance)
• 개념: 자원을 점유한 낮은 우선순위의 작업이 높은 우선순위의 작업에게 점유권을 양보하지 않고 계속해서 자원을 사용함으로써 발생하는 전도를 방지하기 위해, 낮은 우선순위 작업의 우선순위를 임시로 높여주는 방식입니다.
• 작동 원리: 자원을 점유 중인 낮은 우선순위의 작업이, 높은 우선순위 작업이 필요로 하는 자원을 점유하고 있을 때, 해당 낮은 우선순위 작업의 우선순위를 일시적으로 높여 높은 우선순위 작업과 동일하게 설정합니다. 그러면 낮은 우선순위의 작업이 먼저 자원을 해제할 수 있게 되며, 그 후 높은 우선순위 작업이 해당 자원을 사용할 수 있게 됩니다.
• 장점: 우선순위 전도를 최소화하여 실시간 작업의 지연을 줄일 수 있습니다.
• 단점: 다수의 작업들이 얽혀 있는 경우에는 우선순위 상속이 복잡해질 수 있습니다.
우선순위 천장(Priority Ceiling)
• 개념: 시스템 내의 특정 자원에 대해 미리 설정한 최대 우선순위 값을 지정하여, 해당 자원을 점유하는 작업이 그 우선순위 이하의 작업들에 대해 우선순위 전도가 발생하지 않도록 보장하는 방식입니다.
• 작동 원리: 특정 자원을 점유하는 작업의 우선순위가 해당 자원의 “천장 우선순위”보다 낮을 경우, 자원을 점유하려는 순간 작업의 우선순위를 천장 우선순위로 일시 상승시킵니다. 이는 해당 자원이 높은 우선순위 작업에 의해 점유된 상태에서 발생할 수 있는 우선순위 전도를 방지합니다.
• 장점: 우선순위 상속보다 구현이 단순하며 예측 가능성을 높일 수 있습니다.
• 단점: 자원마다 천장 우선순위를 설정해야 하기 때문에 설정에 시간이 걸리며, 실시간 시스템 전체에 걸친 우선순위 설계가 필요합니다.
요약
우선순위 전도 문제는 실시간 스케줄링에서 중요한 문제로, 우선순위 상속(Priority Inheritance)과 우선순위 천장(Priority Ceiling) 기법이 대표적인 해결책입니다.
우선순위 상속(Priority Inheritance)과 우선순위 천장(Priority Ceiling) 기법의 차이를 더 쉽게 설명하겠습니다. 두 기법 모두 우선순위 전도(Priority Inversion) 문제를 해결하기 위해 고안된 방법이지만, 각각 적용되는 방식과 상황이 다릅니다.
개념
우선순위 상속은 자원을 사용하고 있는 낮은 우선순위 작업이, 자신보다 높은 우선순위의 작업에 방해가 되지 않도록 임시로 우선순위를 높여주는 방식입니다. 쉽게 말해, 낮은 우선순위 작업이 높은 우선순위 작업을 방해하지 않고 필요한 자원을 빨리 해제할 수 있도록 돕는 것입니다.
작동 과정
1. 낮은 우선순위 작업 C가 자원(예: 파일)을 점유하고 있을 때, 높은 우선순위 작업 A가 그 자원을 필요로 하면, 원래는 A가 C보다 먼저 실행되어야 하지만 자원을 기다려야 하므로 기다리게 됩니다.
2. 이때, 작업 C의 우선순위를 임시로 A의 우선순위로 높여줍니다.
3. 우선순위가 높아진 C가 자원을 빠르게 사용 완료 후, 자원을 해제합니다.
4. 자원이 해제되면, 높은 우선순위 작업 A가 자원을 획득하여 정상적으로 작업을 진행합니다.
5. 자원을 해제한 후 C는 원래 우선순위로 돌아갑니다.
장점과 단점
• 장점: 필요한 상황에서만 낮은 우선순위 작업의 우선순위를 높여주므로, 시스템의 자원 사용 효율을 유지할 수 있습니다.
• 단점: 우선순위가 복잡하게 얽힌 여러 작업이 있을 경우, 여러 단계로 상속이 발생하면서 오히려 시스템의 성능을 저하시킬 수 있습니다.
개념
우선순위 천장은 각 자원에 미리 최대 우선순위(천장)를 설정해 두고, 자원을 사용할 때 그 우선순위로 잠시 상향 조정하여 우선순위 전도 상황을 미리 방지하는 방식입니다. 즉, 자원을 사용하기 전에 해당 자원을 사용하는 작업이 얼마든지 높은 우선순위에서 처리될 수 있도록 미리 설정하는 것입니다.
작동 과정
1. 자원(예: 파일)에 대해 **최대 우선순위(천장 우선순위)**를 미리 설정해 둡니다. 예를 들어 자원 X의 천장 우선순위를 10이라고 설정합니다.
2. **작업 C(낮은 우선순위)**가 자원 X를 사용하고자 하면, 이 작업의 우선순위가 자동으로 자원의 천장 우선순위 10으로 높아집니다.
3. 그 사이에 **작업 A(높은 우선순위)**가 자원을 필요로 하더라도, 작업 C가 천장 우선순위로 설정된 상태에서 작업을 마치므로, A는 기다리지 않고 C가 자원을 해제할 때까지 대기합니다.
4. 작업 C가 자원을 해제하면, 작업 A가 자원을 사용할 수 있게 되고, C는 원래의 낮은 우선순위로 돌아갑니다.
장점과 단점
• 장점: 시스템의 우선순위를 미리 계획하고 자원에 따라 제한할 수 있으므로, 우선순위 전도를 사전에 방지할 수 있습니다.
• 단점: 각 자원에 천장 우선순위를 미리 설정하는 작업이 필요하며, 자원의 수가 많아지면 천장 우선순위를 설정하는 관리가 복잡해질 수 있습니다.
요약 비교
• 우선순위 상속은 필요한 순간에만 낮은 우선순위 작업의 우선순위를 높이는 방식입니다. 자원을 해제할 때 우선순위가 다시 돌아옵니다.
• 우선순위 천장은 자원에 미리 최대 우선순위를 설정해, 자원을 사용하는 모든 작업이 그 우선순위를 따라가도록 하는 방식입니다. 작업이 자원을 사용하면 해당 우선순위가 임시 적용됩니다.
이렇게 두 방법 모두 우선순위 전도를 방지할 수 있지만, 상황에 맞는 방식이 더 효율적일 수 있습니다.