OSEK resource는 OSEK OS에서 공유 자원 접근을 조율하는 단위 객체다. 서로 다른 우선순위의 태스크들이 메모리, 하드웨어 영역, 스케줄러, 코드의 특정 구간 같은 공유 자원을 함께 쓸 때, 운영체제는 resource를 통해 그 접근을 조율한다. OSEK/VDX OS 2.2.3 명세는 resource를 임계 구역에 배정하고, 태스크가 GetResource로 임계 구역에 들어가 ReleaseResource로 나오게 한다. 또 우선순위 역전과 교착 상태를 막으려고 OSEK 우선순위 상한 프로토콜을 정한다.[1] OSEK/VDX의 구성 언어 OIL은 RESOURCE를 시스템 객체의 하나로 둔다.[2]

Ceiling priority

OSEK/VDX OS 2.2.3 명세는 resource마다의 ceiling priority를 실행 중에 바꾸지 않고, 시스템을 생성하는 단계에서 미리 고정해 둔다. 그 값은 그 resource나 그것에 이어진(linked) resource를 쓰는 태스크 가운데 우선순위가 가장 높은 태스크 이상이면서, resource를 쓰지 않는 태스크 가운데 그보다 우선순위가 높은 태스크 모두보다 낮게 정한다. 또 resource를 얻는 순간 태스크의 우선순위를 ceiling priority까지 올리고(이미 그 이상이면 그대로 둔다), 돌려주는 순간 얻기 전 값으로 내리도록 정한다.[1] 자원을 잡는 즉시 우선순위를 올리는 이 규칙의 일반형은 우선순위 상한 프로토콜에서 다룬다.

그 결과 resource를 쥔 태스크가 실행되는 동안, 같은 resource를 쓸 수 있는 태스크는 우선순위가 그보다 높지 않아 running에 들어가지 못한다. resource 접근은 waiting 상태를 낳지 않으므로 이 태스크는 ready로 남고, resource가 풀리면 running에 들어갈 수 있다. 그 resource를 쓰지 않고 우선순위가 ceiling priority보다 높은 태스크와, 그 resource를 쓰지 않는 인터럽트는 그동안에도 실행된다.[1]

ceiling priority 이하의 우선순위를 가진 태스크는 이 때문에 늦어질 수 있지만, 그 지연은 낮은 우선순위 태스크가 resource를 쥐는 최대 시간으로 묶인다. 선점할 수 있는 태스크가 resource를 풀면 그 자리가 재스케줄링 지점이다.[1]

이 명세는 OSEK OS를 단일 프로세서 운영체제로 정한다.[1] AUTOSAR R25-11 OS 명세는 resource를 같은 코어에 묶인 태스크 사이에서만 쓰게 하고, 서로 다른 코어의 태스크 사이 상호 배제에는 스핀락을 둔다.[3]

사용 규칙

OSEK/VDX OS 2.2.3 명세는 resource 관리를 모든 conformance class에 필수로 둔다. resource 관리는 두 태스크가 같은 resource를 동시에 쥐지 못하고, 우선순위 역전이 일어나지 않으며, 이 resource들로 교착 상태가 생기지 않고, resource 접근이 waiting 상태를 낳지 않음을 보장한다.[1]

이 명세는 resource를 쓰는 규칙을 아래처럼 정한다.[1]

  • 쥐고 있는 resource를 또 얻는 중첩 접근은 금지된다.
  • 여러 resource를 쥘 때는 나중에 얻은 것부터 먼저 돌려준다(LIFO, Last In, First Out).
  • resource를 쥔 채 TerminateTask, ChainTask, Schedule, WaitEvent를 부를 수 없고, ISR도 resource를 쥔 채 끝날 수 없다.
  • extended status에서 GetResource는 어떤 태스크나 ISR이 이미 쥔 resource를 얻으려 하거나, 부른 쪽의 정적 우선순위가 ceiling priority보다 높으면 E_OS_ACCESS를 돌려준다. ReleaseResource는 어느 태스크나 ISR도 쥐지 않은 resource를 돌려주려 하거나, 다른 resource를 먼저 돌려줘야 하면 E_OS_NOFUNC를 돌려준다. ReleaseResource도 부른 쪽의 정적 우선순위가 그 resource의 ceiling priority보다 높으면 E_OS_ACCESS를 돌려준다.[1]

인터럽트 수준으로 넓히기

이 명세는 resource 관리를 인터럽트 수준까지 넓히는 것을 선택 사항으로 두고, category 2 ISR에서도 GetResource와 ReleaseResource를 부를 수 있게 한다. 이 확장에서 ISR은 모든 태스크보다 높은 가상 우선순위를 받으므로, ceiling priority는 그 resource를 쓰는 태스크와 ISR의 우선순위 가운데 가장 높은 것 이상이 된다. resource 관리를 인터럽트까지 넓혀 쓰면, 운영체제는 ISR이 실행 중에 쥘 수 있는 resource가 모두 풀린 뒤에만 그 ISR을 처리한다.[1]

RES_SCHEDULER

이 명세는 스케줄러를 모든 태스크가 쓸 수 있는 resource로 다루며, RES_SCHEDULER라는 resource를 미리 만들어 두게 한다. 태스크는 RES_SCHEDULER를 얻어 다른 태스크의 선점을 막을 수 있고, 인터럽트는 RES_SCHEDULER의 상태와 상관없이 받아 처리된다.[1]

Internal resource

이 명세는 사용자에게 보이지 않아 GetResource와 ReleaseResource로 다룰 수 없는 resource를 internal resource로 정의하고, 그 밖의 동작(우선순위 상한 프로토콜 등)은 일반 resource와 같게 둔다. 또 internal resource를 태스크에만 쓰게 하고, 시스템 생성 때 태스크 하나에 많아야 하나를 배정하게 한다.[1] OIL은 RESOURCEPROPERTY 값으로 STANDARD, LINKED, INTERNAL을 두고, INTERNAL을 애플리케이션이 접근할 수 없는 internal resource로 정한다.[2]

명세에 따라 운영체제는 태스크가 실행을 시작할 때 internal resource를 그 태스크에 쥐여 주고, 태스크가 재스케줄링 지점에 이르면 거둬들인다. 태스크가 선점될 때는 풀리지 않는다. 그래서 같은 internal resource를 배정받은 태스크 그룹은 그룹 안에서 비선점 태스크처럼 동작한다. 재스케줄링은 재스케줄링 지점에서만 일어나고, 그룹의 가장 높은 우선순위보다 높은 태스크에는 선점된다. 이를 써서 태스크 그룹 안의 원치 않는 재스케줄링을 막을 수 있다. 선점할 수 없는 태스크는 RES_SCHEDULER와 같은 우선순위의 internal resource가 배정된 특수한 그룹이다.[1]

resource를 쥔 채 부를 수 없는 서비스의 제한은 internal resource에는 걸리지 않는다. 그 서비스들 안에서 internal resource를 다루기 때문이다. 다만 internal resource를 풀기 전에 표준 resource를 모두 풀어야 한다.[1]

Linked resource

이 명세는 드물게 같은 resource를 중첩해 써야 하면 첫 resource와 같은 동작을 하는 둘째 resource를 쓰기를 권한다. 이렇게 같은 동작을 하는 resource를 linked resource라 하며, OIL로 정의할 수 있다.[1]

설정

OSEK/VDX OIL 2.5 명세는 OS 객체에 BOOLEAN 속성 USERESSCHEDULER를 두어 애플리케이션이 RES_SCHEDULER를 쓰는지 정하게 한다. RESOURCE 객체에서 RESOURCEPROPERTY를 LINKED로 두면, 하위 속성 LINKEDRESOURCE로 이어 줄 resource(속성이 STANDARD나 LINKED인 것)를 정한다. linked resource의 사슬은 운영체제의 코드 생성기가 풀어야 한다.[2]

[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]
“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
[3]
“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