OS-Application — AUTOSAR OS(SC3 이상)에서 도입된 OS 객체의 기능적 그룹 단위. Task, ISR, Alarm, Schedule Table, Counter를 하나의 application으로 묶어 메모리 보호·접근 권한·재시작 단위로 취급한다. OSEK/VDX에는 없는 개념으로, AUTOSAR가 Memory Protection·Service Protection·IOC를 구현하기 위한 토대 역할을 한다.
정의와 특징
- 구성: Task / ISR / Alarm / Schedule Table / Counter 등 OS object의 모음
- OS-Application을 사용하면 모든 OS object는 어떤 OS-Application에 속해야 한다 (Resource는 예외 — 어느 App.에도 속하지 않고, object별로 접근 권한만 명시)
- 하나의 OS-Application의 object는 모두 동일한 core에 있어야 한다 (Multi-Core에서 App. 단위로 core 배치)
상태 모델
| 상태 | 의미 |
|---|---|
APPLICATION_ACCESSIBLE | App.의 object들에 접근 가능 (OS 시작 시 default) |
APPLICATION_RESTARTING | App. object에 접근 불가능한 상태. AllowAccess()로 ACCESSIBLE로 복귀 가능 |
APPLICATION_TERMINATED | App. 종료. 재진입 불가 |
전이는 TerminateApplication(ApplicationID, RestartOption)으로 유발된다:
RestartOption = RESTART→APPLICATION_RESTARTINGRestartOption = NO_RESTART→APPLICATION_TERMINATED
APPLICATION_RESTARTING은 Protection Hook의 PRO_TERMINATEAPPL_RESTART 반환 시에도 진입하며, App. 초기화가 끝나면 내부에서 AllowAccess()를 호출해 서비스를 재개한다.
접근 권한
- 동일 OS-Application 내부 — object 간 자유 접근
- 다른 OS-Application의 object 접근 — 명시적 설정 필요. object별로 어떤 App.이 자신에게 접근할 수 있는지 선언
이 접근 제어는 Service Protection과 맞물려 권한 없는 cross-App 접근 시 E_OS_ACCESS 반환으로 이어진다.
Trusted vs Non-Trusted
| 속성 | Trusted OS-Application | Non-Trusted OS-Application |
|---|---|---|
| 동작 모드 | Privileged | Non-privileged |
| Memory Protection | 다른 App./OS module data에 접근 가능 | 자기 code·data만 접근, 다른 App. data 쓰기 불가 |
| Timing/Memory monitoring | disable 가능 | 항상 활성 |
| OS API 접근 | 제한 없음 | 제한적 (예: ShutdownOS 호출 무시) |
| 제공 역할 | 다른 App.에 service 제공 가능 (Call Trusted Function) | 제공 불가. Call Trusted Function으로 Trusted 서비스를 호출만 |
Call Trusted Function
Non-Trusted OS-App.이 Trusted OS-App.의 함수를 호출하기 위한 메커니즘. Trusted App.이 자기 함수를 “Trusted function”으로 외부에 노출하면, Non-Trusted App.은 CallTrustedFunction API로 호출할 수 있다. 호출 중에는 Trusted App. 컨텍스트로 privilege가 상승한다.
사용 제한: 동일 core 내의 App. 간에만 사용 가능. Cross-core 통신은 IOC를 사용해야 한다.
주요 API
권한 검사
ApplicationType CheckObjectOwnership(ObjectTypeType ObjectType, ObjectID ID);
// 특정 object가 어느 App.에 속해 있는지 반환
ApplicationType CheckObjectAccess(ApplicationType AppID, ObjectTypeType ObjectType, ObjectID ID);
// 주어진 App.이 특정 object에 접근 권한이 있는지 확인상태 관리
StatusType GetApplicationState(ApplicationType ApplicationID, ApplicationStateRefType Value);
// 현재 App. 상태 조회
StatusType TerminateApplication(ApplicationType ApplicationID, RestartOption);
// App. 종료. RESTART이면 APPLICATION_RESTARTING, NO_RESTART이면 APPLICATION_TERMINATED
StatusType AllowAccess(void);
// 현재 동작 중인 App.의 상태를 RESTARTING → ACCESSIBLE 로 전이설정 구성 요소
OS-Application 설정 시 다음 항목을 지정한다:
- Application 이름·동작 Core·Trusted/Non-Trusted
- 소속 Task / ISR / Alarm / Counter / Schedule Table
- App. 전용 Hook (App ErrorHook, App StartupHook, App ShutdownHook)
- Partition — RTE partition과 1:1 매칭 (SW-C 배치와 OS-App.의 대응)
- Restart 시 activation 될 Task