Protection Hook — AUTOSAR OS가 심각한 런타임 에러를 감지했을 때 호출하는 사용자 정의 복구 훅. OSEK의 ErrorHook이 API 호출 실패를 알려주는 “통지형” 훅이라면, ProtectionHook은 감지된 치명적 이벤트(Stack Overflow, Timing 위반, Memory 침범 등)에 대해 시스템이 어떻게 대응할지를 사용자가 결정하는 “복구 정책” 훅이다. 반환값으로 5가지 복구 옵션 중 하나를 선택한다.
시그니처
ProtectionReturnType ProtectionHook(StatusType FatalError);- 설정에 따라 사용 여부를 선택할 수 있다. 설정되지 않은 상태에서 치명적 에러가 발생하면 OS는 바로
ShutdownOS(FatalError)를 호출한다. - ProtectionHook이 설정된 경우 OS는 훅을 호출하고 반환값에 따라 동작을 결정한다.
- ErrorHook과 달리
StatusType은 에러 코드가 아니라 감지된 protection 사건의 종류를 전달한다.
감지되는 심각한 에러 4종
| 카테고리 | 발생 조건 | FatalError 값 |
|---|---|---|
| Stack Fault | Task/ISR의 stack이 overflow 또는 underflow | E_OS_STACKFAULT |
| Timing Protection | Task/ISR 수행 시간이 예산 초과 / 너무 잦은 activation (inter-arrival 하한 위반) / resource·interrupt 과점유 | E_OS_PROTECTION_TIME · E_OS_PROTECTION_ARRIVAL · E_OS_PROTECTION_LOCKED |
| Instruction Exception | divide-by-zero 등 명령어 실행 예외 | E_OS_PROTECTION_EXCEPTION |
| Memory Protection | 권한 없는 메모리 영역 접근 (Code/Data/Stack) | E_OS_PROTECTION_MEMORY |
각 protection 메커니즘은 AUTOSAR OS의 해당 섹션 참고.
5가지 복구 옵션 (반환값)
ProtectionReturnType ProtectionHook(StatusType FatalError) {
return PRO_IGNORE; // 아무 일도 하지 않음
return PRO_TERMINATETASKISR; // 문제가 발생한 Task/ISR 종료
return PRO_TERMINATEAPPL; // Task/ISR이 속한 OS-Application 종료
return PRO_TERMINATEAPPL_RESTART; // Task/ISR이 속한 OS-Application 재시작
return PRO_SHUTDOWN; // OS 전체 종료
}옵션 선택 가이드:
| 옵션 | 상황 |
|---|---|
PRO_IGNORE | 감지는 했으나 무시 (디버그·로깅용, production 권장 X) |
PRO_TERMINATETASKISR | 해당 Task/ISR만 로컬하게 정리 가능한 경우 |
PRO_TERMINATEAPPL | Task가 속한 OS-Application의 상태 일관성이 깨진 경우 (공용 데이터 손상 등) |
PRO_TERMINATEAPPL_RESTART | 격리된 OS-Application을 재시작해 복구하는 자동차 fault-tolerance 시나리오 |
PRO_SHUTDOWN | 시스템 전체 무결성 의심 (Memory Protection 위반 등) |
OS는 반환된 옵션에 따라 해당 객체 정리(Task/ISR kill, OS-Application terminate/restart, ShutdownOS)를 수행한다.
ErrorHook과의 비교
| 항목 | ErrorHook | ProtectionHook |
|---|---|---|
| 소속 스펙 | OSEK/VDX | AUTOSAR OS 확장 (SC2 이상) |
| 트리거 | OS API 반환값이 E_OK가 아닐 때 | OS가 감지한 심각한 런타임 이벤트 (Stack/Timing/Exception/Memory) |
| 반환 값 | void | ProtectionReturnType — 복구 동작 선택 |
| 전달 정보 | StatusType error + OSErrorGetServiceId() + 파라미터 매크로 | StatusType FatalError (protection 카테고리) |
| 사용 성격 | 통지·로깅·디버깅 중심 | 복구·정책 결정 — 반환이 OS 동작을 좌우 |