OIL(OSEK Implementation Language)은 OSEK/VDX를 쓰는 애플리케이션의 구성을 기술하는 언어다. OSEK의 목표인 소프트웨어 이식성을 위해 정해졌다. 다루는 범위는 ECU 안의 CPU 하나이며, ECU 네트워크는 다루지 않고 CPU마다 OIL 기술이 하나다.[1]

객체와 속성

OIL은 OSEK 시스템 객체를 모두 OIL 객체로 기술하고, 객체마다 속성과 참조의 집합으로 기술한다. 객체마다 고유한 이름이 있다. 참조는 다른 객체로 가는 단방향 링크이며, 값으로 대상 객체의 이름을 적는다.[1]

OSEK OS의 시스템 객체는 사용자가 모두 정적으로 정하며, 객체를 동적으로 만드는 시스템 서비스는 없다.[2]

OIL 2.5의 객체는 다음과 같다.[1]

OIL 객체나타내는 것
CPU애플리케이션이 도는 CPU. 다른 모든 객체를 담는 컨테이너다.
OS그 CPU에서 도는 OSEK OS. CPU 하나에 정확히 하나를 둔다.
APPMODE애플리케이션의 동작 모드. CPU 하나에 적어도 하나를 둔다.
TASK운영체제가 다루는 태스크
ISR운영체제가 지원하는 ISR
RESOURCE공유 자원에 대한 태스크와 ISR의 접근을 조정하는 resource
EVENT태스크가 반응할 수 있는 이벤트. 마스크로 나타낸다.
COUNTER알람의 하드웨어·소프트웨어 틱 소스
ALARMcounter 값에 따라 만료되어 태스크를 활성화하거나 이벤트를 설정하거나 callback 루틴을 부르는 알람
COM통신 하위 시스템
MESSAGEOSEK COM(Communication)이 정의한 메시지의 공급자 쪽 속성
NETWORKMESSAGE같은 메시지의 OEM(Original Equipment Manufacturer) 쪽 속성
IPDUOSEK COM이 정의한, 외부 통신에 쓰는 메시지를 나르는 단위
NM네트워크 관리 하위 시스템

OS, COM, NM 객체를 뺀 나머지는 한 애플리케이션 정의에 같은 종류를 여럿 둘 수 있다. 태스크는 자기가 접근하는 resource와, extended 태스크라면 반응할 이벤트를 참조한다. 알람은 자기가 배정된 counter 하나를 참조하고, 만료 동작에 따라 활성화할 태스크나, 설정할 태스크와 이벤트를 참조한다.[1]

구현 정의와 애플리케이션 정의

OIL 기술은 주 OIL 파일 하나와, 그 파일이 include하는 파일들로 이루어진다. 내용은 두 부분이다.[1]

  • 구현 정의: 특정 OSEK 구현에 대해 OIL 객체마다 모든 속성과 그 특성을 정한다. 표준 속성을 모두 담아야 하고, 값의 범위를 좁힐 수 있으며, 구현 고유의 속성을 더할 수 있다. 다만 새 OIL 객체를 만들거나 문법을 바꿀 수는 없다. 구현 정의는 따로 파일로 만들어 OSEK 구현과 함께 배포하고, 사용자의 OIL 파일에서 include할 수 있다.
  • 애플리케이션 정의: 그 CPU에 올라가는 애플리케이션이 쓰는 객체와 그 속성 값을 적는다. 구현 정의에 없는 속성은 쓸 수 없고, 값은 구현 정의가 정한 특성을 따라야 한다.[1]

OIL 파일은 BNF(Backus-Naur Form)와 비슷한 표기로 정한 문법을 따르며, 키워드, 속성, 객체 이름은 대소문자를 구분한다. OIL 기술은 손으로 쓰거나 시스템 구성 도구로 만들 수 있다. OIL 파일은 여러 개일 수 있는데, 예를 들어 공급자가 만드는 CPU 고유의 구성 파일과 OEM이 주는 네트워크 전체의 구성 파일이 따로 있을 수 있다.[1]

문법 요소

OIL은 속성 사이의 의존 관계를 조건부 속성으로 나타낸다. ENUM과 BOOLEAN 속성은 매개변수를 가질 수 있고, 이런 의존은 얼마든지 중첩할 수 있다. 매개변수는 ENUM의 열거자나 BOOLEAN의 TRUE·FALSE 값마다 따로 정하며, 그 값 뒤의 중괄호 안에 적는다. 매개변수에는 어떤 속성 타입이든 쓸 수 있다. 한 조건부 속성의 여러 갈래에 이름이 같은 속성이 있으면 타입도 같아야 한다.[1]

구현 정의에서 속성에 WITH_AUTO를 붙이면 그 값을 생성기가 계산할 수 있고, 애플리케이션 정의와 기본값에 AUTO를 쓸 수 있다. OS 객체의 STATUS 속성은 자동 배정을 지원하지 않는다.[1]

기본값은 애플리케이션 정의에 속성이 빠졌을 때 생성기가 쓰는 값이다. 선택 속성에는 기본값이 필수이며, 기본값을 쓰지 않게 하려면 NO_DEFAULT를 주고 그 속성을 애플리케이션 정의에 적어야 한다. 표준 속성에는 명세가 따로 허용하지 않는 한 기본값을 둘 수 없다.[1]

다른 파일은 ISO/ANSI-C와 같은 꼴의 #include <file>과 #include "file"로 포함한다. 앞 꼴은 도구에 지정한 검색 경로를, 뒤 꼴은 포함하는 파일이 있는 디렉터리를 쓴다. 객체, 속성, 값에는 콜론 뒤에 큰따옴표로 감싼 설명을 붙일 수 있고, 설명의 해석은 구현이 정한다. 구현 고유의 추가 매개변수는 선택 속성에만 둘 수 있으며, 이식성을 위해 표준 속성에는 둘 수 없다.[1]

판과 호환

OIL의 판은 OSEK OS와 OSEK COM 명세의 판에 대응한다.[1]

OIL대응하는 판앞 판과의 호환
2.0OSEK OS 2.0r1—
2.1OSEK OS 2.0r1호환되지 않음. OIL 안의 문법과 의미를 넓혔다.
2.2명세에 적히지 않음호환됨. 새 표준 속성만 더했다.
2.3OSEK OS 2.2호환됨. 새 표준 속성만 더했다.
2.4OSEK OS 2.2·2.2.x, OSEK COM 3.0·3.0.x호환되지 않음. TASK와 ISR 객체의 ACCESSOR 속성을 MESSAGE 속성으로 바꾸고 MESSAGE 객체를 완전히 다시 정의했다.
2.52.4와 같음호환되지 않음. MESSAGE 객체를 공급자 쪽 MESSAGE와 OEM 쪽 NETWORKMESSAGE로 나눴다.

OIL은 객체와 표준 속성의 집합을 둘 정한다. 전체 집합은 OSEK OS와 기능을 다 갖춘 OSEK COM을 다루며 conformance class BCC1, BCC2, ECC1, ECC2, CCCA, CCCB, CCC0, CCC1을 지원한다. 부분집합은 내부 통신만 하는 OSEK OS를 다루며 BCC1, BCC2, ECC1, ECC2, CCCA, CCCB를 지원한다. OIL 구현은 둘 가운데 하나를 지원해야 한다. 내부 통신용 부분집합과 표준 속성의 기본값은 OIL 2.4에서 들어왔다.[1]

System Generator와 빌드

OIL 명세가 예로 드는 개발 과정에서 System Generator는 OIL 구성 파일을 입력으로 받아 C 코드 파일을 만드는 도구다. 이 코드와 사용자 소스 코드가 컴파일러로 들어가고, 링커가 실행 파일 하나를 만든다. OS 커널이나 OSEK COM 같은 하위 시스템은 소스 코드로 배포되면 애플리케이션과 함께 컴파일되고, 라이브러리로 배포되면 링커가 통합한다.[1]

시스템 생성과 거기 쓰는 도구는 구현마다 다르다. OSEK OS 2.2.3 명세는 구현과 시스템 생성에 관한 사항을 OIL 명세로 넘긴다.[2] OSEK/VDX OIL은 ISO 17356-6:2006으로 국제 표준이 됐다.[3]

[1]
“OSEK/VDX System Generation, OIL: OSEK Implementation Language, Version 2.5,” OSEK/VDX, 2004. Accessed: Sep. 30, 2026. [Online]. Available: https://web.archive.org/web/20041012220755/http://www.osek-vdx.org:80/mirror/oil25.pdf
[2]
“OSEK/VDX Operating System Specification, Version 2.2.3,” OSEK/VDX, 2005. Accessed: Sep. 30, 2026. [Online]. Available: https://web.archive.org/web/20060219185811/http://osek-vdx.org/mirror/os223.pdf
[3]
ISO, “ISO 17356-6:2006 Road vehicles — Open interface for embedded automotive applications — Part 6: OSEK/VDX Implementation Language (OIL).” 2006. Accessed: Sep. 30, 2026. [Online]. Available: https://www.iso.org/standard/40080.html