정의

OSEK/VDX는 CPU를 두고 겨루는 주체를 운영체제가 관리하는 인터럽트 서비스 루틴(ISR)과 태스크 둘로 보고, 인터럽트 레벨·스케줄링을 위한 논리 레벨·태스크 레벨의 세 처리 레벨을 정의한다.[1]

인터럽트는 하드웨어가 일으키는 실행 흐름이라 스케줄러의 결정 밖에서 시작되고, 운영체제 서비스를 부르는 순간 비로소 스케줄러와 만난다. OSEK/VDX 규격은 그 만남을 처리 레벨의 위계와 ISR 범주 구분으로 정리한다.

처리 레벨

세 처리 레벨 사이에는 인터럽트가 태스크에 우선한다는 규칙이 선다. 인터럽트 처리 레벨은 하나 이상의 인터럽트 우선순위 레벨로 이루어지고, 각 ISR은 정적으로 배정된 인터럽트 우선순위 레벨을 갖는다. ISR을 어느 인터럽트 우선순위 레벨에 배정할지는 구현과 하드웨어 아키텍처에 달렸다. 태스크 레벨 안에서는 태스크가 사용자가 배정한 우선순위에 따라 스케줄되며, 런타임 컨텍스트는 실행이 시작될 때 점유되고 태스크가 끝나면 반환된다.[1]

스케줄러에 우선순위를 부여한다는 것은 논리적 개념일 뿐이며, 실제로 우선순위를 쓰지 않고도 구현할 수 있다. 규격은 태스크 우선순위와 특정 마이크로프로세서 아키텍처의 하드웨어 인터럽트 레벨 사이의 관계에 대해 어떤 규칙도 두지 않는다. 처리 레벨은 연속된 값의 범위로 정의되고, 운영체제 우선순위를 하드웨어 우선순위에 어떻게 대응시킬지는 구현이 정한다.

두 ISR 범주

인터럽트를 처리하는 함수는 운영체제 서비스를 쓰는지에 따라 두 범주로 나뉜다.[1]

구분범주 1범주 2
OS 서비스쓰지 않는다. 인터럽트를 켜고 끄는 일부 서비스만 예외쓸 수 있다
실행 환경없음운영체제가 사용자 루틴을 위한 ISR 프레임을 준비한다
인터럽트 배정시스템 생성 시 사용자 루틴이 인터럽트에 배정된다
태스크 관리 영향없음. ISR이 끝나면 인터럽트가 발생한 명령 바로 그 자리에서 처리가 이어진다종료 시 재스케줄링이 일어날 수 있다
오버헤드가장 작다더 크다

구성 언어의 ISR 객체는 CATEGORY 속성으로 범주를 지정하며, 허용되는 값은 1과 2뿐이다. ISR이 접근하는 자원과 메시지도 같은 객체의 참조 속성으로 선언한다.[2]

재스케줄링

ISR 안에서는 재스케줄링이 일어나지 않는다. 재스케줄링은 범주 2 ISR이 끝나는 시점에, 선점 가능한 태스크가 인터럽트당했고 다른 인터럽트가 활성이 아닐 때 일어난다. 인터럽트 루틴에서 태스크를 활성화하면 그 태스크는 활성 상태인 인터럽트 루틴이 모두 끝난 뒤에 스케줄된다.[1]

인터럽트는 선점 가능한 태스크와 선점 불가한 태스크를 모두 인터럽트할 수 있다. 인터럽트를 스케줄하는 것은 하드웨어이고 태스크를 스케줄하는 것은 스케줄러라는 분업이 여기서 드러난다. 인터럽트 우선순위의 최대 개수는 쓰이는 컨트롤러와 구현에 달려 있으며, 인터럽트 스케줄링은 하드웨어 의존적이어서 규격이 규정하지 않는다.

서비스 호출 제한

규격은 각 시스템 서비스를 어떤 상황에서 부를 수 있는지 표 하나로 못 박는다. 태스크 레벨, 범주 1 ISR, 범주 2 ISR, 다섯 훅 루틴, 알람 콜백이 그 표의 열이고, 표에 표시되지 않은 조합에서의 거동은 정의되지 않는다.[1]

범주 1 ISR에서 허용되는 것은 인터럽트를 켜고 끄는 서비스들뿐이다 — DisableAllInterrupts와 EnableAllInterrupts, SuspendAllInterrupts와 ResumeAllInterrupts, SuspendOSInterrupts와 ResumeOSInterrupts가 그것이다. 범주 2 ISR에서는 태스크 활성화, 이벤트 설정, 자원 획득과 반환, 알람 설정과 취소까지 훨씬 넓은 집합을 쓸 수 있다. 훅 루틴에서는 대부분의 서비스가 허용되지 않는데, 이 제약은 시스템 복잡도를 줄이기 위한 것이다. 훅 루틴별 차이는 OSEK 훅 루틴에서 다룬다.

빠른 인터럽트 금지·허용 함수의 전형적인 용도는 짧은 임계 구역을 보호하는 것이다. 모든 인터럽트를 끄는 짝과 범주 2 인터럽트만 끄는 짝이 따로 있으며, 보호된 임계 구역 안에서 인터럽트로부터 복귀하는 것은 허용되지 않는다. 금지 호출에는 반드시 짝이 되는 허용 호출이 있어야 하고, 그 짝 사이에서 부를 수 있는 운영체제 서비스는 같은 종류의 중첩된 짝뿐이다.

범주 1 ISR과 태스크 활성화

범주 1 ISR에서는 ActivateTask나 SetEvent를 부를 수 없다. 범주 1 인터럽트는 태스크 관리에 영향을 주지 않고, ISR이 끝나면 인터럽트가 발생한 명령 바로 그 자리에서 처리가 그대로 이어지기 때문이다.[1]

[1]
OSEK/VDX Steering Committee, “OSEK/VDX Operating System, Version 2.2.3,” OSEK/VDX Steering Committee, Specification, Feb. 2005. Accessed: Aug. 26, 2026. [Online]. Available: https://www.irisa.fr/alf/downloads/puaut/TPNXT/images/os223.pdf
[2]
OSEK/VDX Steering Committee, “OSEK/VDX System Generation — OIL: OSEK Implementation Language, Version 2.5,” OSEK/VDX Steering Committee, Specification, Jul. 2004. Accessed: Aug. 26, 2026. [Online]. Available: https://www.irisa.fr/alf/downloads/puaut/TPNXT/images/oil25.pdf