OSEK OS는 OSEK/VDX가 정한 차량용 실시간 운영체제다. 멀티태스킹 운영체제이며, 분산된 임베디드 제어 유닛에서 쓰는 단일 프로세서 운영체제다.[1][2] 운영체제 객체는 모두 시스템 생성 단계에서 정적으로 정하며, 객체를 동적으로 만드는 시스템 서비스는 없다.[1] 국제 표준으로는 ISO 17356-3이다.[2]

OS 객체

사용자는 어떤 객체를 몇 개 쓰고 각각 어떤 속성을 갖는지 미리 정해 OIL로 적어 둔다.[1][3] OIL 명세가 예로 드는 개발 과정에서는 System Generator가 OIL 구성 파일로 C 코드를 만든다.[3]

OSEK OS의 객체와 그것을 적는 OIL 객체는 다음과 같다.[1][3]

객체OIL 객체하는 일
태스크TASK함수 실행의 틀. 스케줄러가 태스크의 실행 순서를 정한다.
ISRISR인터럽트를 처리한다.
이벤트EVENT태스크를 동기화한다. extended 태스크에만 딸린다.
resourceRESOURCE공유 자원에 여러 태스크가 함께 접근할 때 그 접근을 조정한다. ISR까지 넓힐 수 있다.
counterCOUNTER타이머나 각도 센서처럼 반복되는 사건을 틱 단위의 값으로 센다.
알람ALARMcounter가 정해 둔 값에 이르면 만료되어 태스크를 활성화하거나, 이벤트를 설정하거나, callback 루틴을 부른다.

운영체제가 부르고 사용자가 구현하는 hook 루틴도 있다.[1]

OSEK OS 구현은 프로세서 안의 메시지 처리를 갖추어야 한다. 최소 기능은 OSEK COM(Communication) 명세의 conformance class CCCA이고, 그 밖에 받아들이는 등급은 CCCA의 상위 집합인 CCCB뿐이다.[1]

처리 레벨

OSEK OS는 처리 레벨 셋을 두고, 위 레벨이 아래 레벨보다 우선순위가 높다.[1]

  • 인터럽트 레벨: 하나 이상의 인터럽트 우선순위 레벨로 이루어지며, ISR마다 인터럽트 우선순위 레벨이 정적으로 정해진다.
  • 스케줄러의 논리 레벨: 인터럽트 레벨 아래, 태스크 레벨 위에 놓인 논리적 개념이다. 우선순위를 직접 쓰지 않고도 구현할 수 있다.
  • 태스크 레벨: 태스크가 사용자가 정한 우선순위에 따라 스케줄링된다.[1]

인터럽트는 태스크보다 앞선다. 선점할 수 없는 태스크도 인터럽트에는 끊긴다.[1]

Conformance class

Conformance class는 애플리케이션의 요구와 시스템의 능력에 따라 운영체제 기능을 묶은 등급이며, 실행 중에 바꿀 수 없다. 구현은 등급 가운데 일부만 지원해도 되지만, 지원하는 등급은 그 등급 전체를 갖추어야 한다. 등급은 넷이며, 태스크 활성화를 여러 번 요청할 수 있는지, 태스크 종류, 우선순위당 태스크 수로 가른다.[1]

이 명세는 등급마다 구현이 적어도 갖춰야 할 개수를 정한다. 애플리케이션이 이를 넘지 않아야 이식성을 기대할 수 있다. 등급마다의 정의와 최소 개수는 다음과 같다.[1]

등급태스크 종류활성화를 여러 번 요청한 우선순위에 태스크 여럿태스크 우선순위 수suspended가 아닌 태스크 수태스크당 이벤트 수
BCC1basic안 됨안 됨88—
BCC2basic됨됨88—
ECC1basic, extended안 됨안 됨16168
ECC2basic, extendedbasic 태스크만 됨됨16168

resource는 BCC1이 RES_SCHEDULER 하나만, 나머지 등급은 RES_SCHEDULER를 포함해 8개를 적어도 지원한다. internal resource는 2개, 알람과 application mode는 1개를 모든 등급이 적어도 지원한다.[1]

시작과 종료

CPU가 리셋되면 하드웨어별 초기화 코드가 돈 뒤, application mode를 인자로 StartOS를 불러 운영체제를 시작한다. 운영체제는 내부 초기화를 마치고, 사용자 인터럽트를 모두 끈 채로 StartupHook을 부른다. StartupHook이 돌아오면 사용자 인터럽트를 켜고 스케줄링을 시작한다.[1]

Application mode는 운영체제가 서로 다른 운영 모드로 시작할 수 있게 하는 것이며, 모드는 커널이 시작하기 전에 정한다. 모드마다 자동으로 시작할 태스크와 알람을 OIL 파일에서 정적으로 따로 정할 수 있다. 운영체제가 시작한 뒤에는 application mode를 바꿀 수 없다.[1]

application mode는 서로 완전히 배타적인 동작 모드를 위한 것이다. 리셋은 정상 동작 중에도 일어날 수 있어 모드를 정하는 코드는 빨라야 하므로, 명세는 핀 상태처럼 판정하기 쉬운 조건만으로 모드를 정하기를 권한다. 기본 application mode인 OSDEFAULTAPPMODE는 StartOS에 늘 유효한 인자다.[1]

Autostart는 운영체제가 시작하면서 현재 application mode에 선언된 태스크를 활성화하고 알람을 켜는 것이며, 태스크를 먼저 활성화한 뒤 알람을 켠다. 우선순위가 같은 autostart 태스크끼리의 활성화 순서는 정해지지 않는다.[1]

ShutdownOS는 운영체제를 멈춘다. 애플리케이션이 비상 정지 같은 때 부를 수 있고, 운영체제도 치명적 오류로 정의되지 않은 내부 상태에 이르면 스스로 부른다. 운영체제는 ShutdownHook을 부른 뒤 멈추며, ShutdownHook이 돌아온 뒤의 동작은 구현이 정한다. 운영체제가 ShutdownOS를 부를 때는 인자로 E_OK를 넘기지 않는다.[1]

Context별 서비스 호출 제한

시스템 서비스는 태스크, ISR, hook 루틴, 알람 callback 루틴에서 부르며, 서비스마다 부를 수 있는 context가 다르다. context마다 부를 수 있는 서비스는 다음과 같다.[1]

context부를 수 있는 서비스
태스크StartOS를 뺀 모든 서비스
category 1 ISR인터럽트를 멈추고 되살리는 서비스 여섯
category 2 ISRActivateTask, GetTaskID, GetTaskState, 인터럽트 서비스 여섯, GetResource, ReleaseResource, SetEvent, GetEvent, GetAlarmBase, GetAlarm, SetRelAlarm, SetAbsAlarm, CancelAlarm, GetActiveApplicationMode, ShutdownOS
ErrorHookGetTaskID, GetTaskState, SuspendAllInterrupts, ResumeAllInterrupts, GetEvent, GetAlarmBase, GetAlarm, GetActiveApplicationMode, ShutdownOS
PreTaskHook, PostTaskHookErrorHook에서 부를 수 있는 서비스 가운데 ShutdownOS를 뺀 것
StartupHookGetActiveApplicationMode, ShutdownOS
ShutdownHookGetActiveApplicationMode
알람 callback 루틴SuspendAllInterrupts, ResumeAllInterrupts

그래서 TerminateTask, ChainTask, Schedule, WaitEvent, ClearEvent는 태스크만 부를 수 있다. 이 다섯을 인터럽트 레벨에서 부르면 extended status에서 E_OS_CALLEVEL을 돌려준다. 표에 없는 조합의 동작은 정의되지 않는다.[1]

서비스가 오류를 돌려주면 출력 인자의 값은 정의되지 않는다. 운영체제 안에서 오류를 검사하는 순서는 정해지지 않으므로, 오류가 여럿 겹치면 어느 상태를 돌려줄지는 구현에 달렸다.[1]

OSEKtime OS와의 관계

OSEK OS는 time-triggered 운영체제인 OSEKtime OS와 한 시스템에서 함께 돌 수 있으며, 이때 OSEK OS는 OSEKtime OS의 idle 시간을 쓰고 그 인터럽트와 태스크는 OSEKtime OS의 것보다 우선순위가 낮다.[1]

AUTOSAR OS와의 관계

OSEK OS는 단일 프로세서를 전제한다.[1] AUTOSAR Classic Platform R25-11의 OS 명세는 OSEK OS를 바탕으로 삼아, 그것의 확장과 제한으로 AUTOSAR OS를 정한다.[4]

[1]
“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
[2]
ISO, “ISO 17356-3:2005 Road vehicles — Open interface for embedded automotive applications — Part 3: OSEK/VDX Operating System (OS).” 2005. Accessed: Sep. 30, 2026. [Online]. Available: https://www.iso.org/standard/40079.html
[3]
“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
[4]
“Specification of Operating System (AUTOSAR CP R25-11),” AUTOSAR, 2025. Accessed: Sep. 30, 2026. [Online]. Available: https://www.autosar.org/fileadmin/standards/R25-11/CP/AUTOSAR_CP_SWS_OS.pdf