Timing protection은 AUTOSAR OS가 태스크와 category 2 ISR의 시간 동작을 감시해 timing fault를 찾고 그 전파를 막는 기능이다. 태스크와 category 2 ISR에만 적용되며, category 1 ISR은 보호하지 않는다. scalability class 가운데 SC2와 SC4에 든다.[1]
Timing fault
실시간 시스템에서 timing fault는 태스크나 인터럽트가 실행 중에 마감 시한을 놓치는 것이다. 그런데 마감을 놓친 태스크나 ISR이 원인이 아닐 수 있다. 관련 없는 태스크나 ISR이 너무 오래 간섭하거나 막으면, 그 fault가 번져 다른 태스크나 ISR이 마감을 놓친다.[1]
고정 우선순위 선점형 OS에서 마감을 지키는지는 세 요인으로 정해진다. 실행 시간, 우선순위가 낮은 태스크나 ISR이 공유 resource를 잠그거나 인터럽트를 막아 생기는 blocking 시간, 도착 간격이다. AUTOSAR OS는 timing protection에 deadline monitoring을 두지 않고, 대신 이 세 요인을 실행 중에 통제한다.[1]
Execution budget
Execution budget은 태스크나 ISR에 허용되는 최대 실행 시간이다. 태스크는 SUSPENDED나 WAITING 상태로 들기 전까지 RUNNING 상태로 있던 순시간을 재고, 여러 번 활성화된 basic 태스크는 활성화마다 잰다. OS는 태스크가 SUSPENDED나 WAITING으로 넘어갈 때, ISR은 반환할 때 budget을 다시 채운다.[1]
execution budget을 넘으면 OS는 protection hook을 E_OS_PROTECTION_TIME으로 부른다. 다만 deferrable server로 설정한 태스크는 hook을 부르는 대신 BUDGET_EXHAUSTED 상태로 옮겨, budget이 다시 채워질 때까지 스케줄하지 않는다.[1]
Lock budget
Lock budget은 태스크나 category 2 ISR이 resource를 쥐거나 인터럽트를 막고 있어도 되는 가장 긴 시간이다. 모든 인터럽트를 막는 시간, OS 인터럽트(category 2)를 막는 시간, resource마다의 점유 시간에 따로 둔다. lock budget을 넘으면 OS는 protection hook을 E_OS_PROTECTION_LOCKED로 부른다.[1]
Time frame
Time frame은 같은 태스크나 ISR이 연이어 도착하는 사이의 최소 간격이다. 태스크는 활성화(SUSPENDED에서 READY로)나 release(WAITING에서 READY로)를, category 2 ISR은 OS가 인터럽트를 알아챈 때를 도착으로 친다. time frame보다 일찍 도착하면 OS는 그 활성화나 release를 수행하지 않거나 ISR을 실행하지 않고, protection hook을 E_OS_PROTECTION_ARRIVAL로 부른다.[1]
태스크에 두는 time frame은 활성화와 release를 OsTaskTimeFrame마다 한 번으로 제한한다. 큐에 쌓이는 활성화도 저마다 새 도착으로 치므로, 큐가 차는 속도도 이것으로 제한된다. category 2 ISR에 두는 time frame은 쉴 새 없이 인터럽트를 내는 인터럽트 소스에서 ECU를 지키는 데 쓸 수 있다. 네트워크의 다른 ECU가 보낸 프레임마다 인터럽트를 내는 CAN 컨트롤러가 그런 예다.[1]
위반 처리
위반을 찾으면 OS는 protection hook을 부르고, 그 반환값에 따라 이어서 할 일을 정한다.[1] 반환값마다의 처리는 AUTOSAR OS에서 다룬다.