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에서 정보 전달은 경계에 따라 세 방식으로 나뉜다.

통신 범위메커니즘
① Intra OS-ApplicationRTE 내부
② Inter ECUCOM 경유
Inter OS-ApplicationIOC (OS 제공)

사용 목적

  • 메모리 격리를 넘나드는 통신 — 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를 깨우는 시나리오:

  1. Core0의 SWC가 Rte_Call_<port>_<op>(..., <data>) 호출
  2. 이 RTE 호출은 IocSend_<Id>(<data>)로 매핑 → 데이터가 sender·receiver 공유 IOC 버퍼로 복사
  3. Rte_Call 내부에서 OS call로 Task activation (= notification)
  4. 깨어난 Task가 IocReceive로 IOC 버퍼 데이터를 읽음
  5. 읽은 데이터를 RTE server runnable에게 전달

Notification 없이 동작할 경우: receiver 쪽에서 주기 Task가 buffer를 polling해 새 데이터를 확인하는 방식.

같이 보기