IOC (Inter OS-Application Communication) — AUTOSAR OS(SC3 이상)가 제공하는 OS-Application 간 정보 전달 서비스. Memory Protection으로 격리된 OS-Application 사이, 그리고 Multi-Core의 서로 다른 core 간 통신을 OS 레벨에서 보장한다. Send/Receive가 공유 메모리를 경유하며, 인터페이스는 각 전송 조합마다 generator가 unique하게 생성한다.
AUTOSAR 통신 3계층 내 위치
AUTOSAR에서 정보 전달은 경계에 따라 세 방식으로 나뉜다.
사용 목적
- 메모리 격리를 넘나드는 통신 — Memory Protection으로 서로의 data 영역에 접근할 수 없는 App. 간 안전한 데이터 교환
- Multi-Core core 간 통신 — 서로 다른 core에 배치된 App. 간 정보 전달 (Call Trusted Function은 same-core 제약이 있어 이 영역을 커버하지 못함)
기능 (Functionality)
- Topology: 1:1 / N:1 / N:M 지원
- Data item: atomic이든 complex structure이든 하나의 memory block으로 구성
- 하나의 전송에 여러 data item을 묶어 보내는 것은 1:1에서만 가능
- Queueing: unqueued / queued 모두 지원. queued일 경우 IOC queue length를 정의해야 함
- 하나의 communication 동작을 특정하는 5요소: sender · receiver · data type · notification · queueing
인터페이스 모델
IOC는 generic API가 아니라 전송 조합별 unique 인터페이스를 제공한다.
- 각 전송 조합(sender/receiver/data type/notification/queueing)마다 generator가 고유 IOC service (
IocSend_<Id>/IocReceive_<Id>등)를 생성 - Send service는 receiver와 공유하는 메모리에 write, receiver는 해당 공유 메모리에서 read
- Notification (옵션) — 데이터가 준비되면 사용자 callback 호출 또는 receiver Task activation
IOC with Notification — 사용 흐름
RTE 레이어에서 시작해 IOC 버퍼로 내려가고, receiver Task를 깨우는 시나리오:
- Core0의 SWC가
Rte_Call_<port>_<op>(..., <data>)호출 - 이 RTE 호출은
IocSend_<Id>(<data>)로 매핑 → 데이터가 sender·receiver 공유 IOC 버퍼로 복사 Rte_Call내부에서 OS call로 Task activation (= notification)- 깨어난 Task가
IocReceive로 IOC 버퍼 데이터를 읽음 - 읽은 데이터를 RTE server runnable에게 전달
Notification 없이 동작할 경우: receiver 쪽에서 주기 Task가 buffer를 polling해 새 데이터를 확인하는 방식.