OSEK/VDX OS
Task: OS가 제어하는 프로그램의 기본 단위
Task - Task State Model
- Basic task의 states
- running, ready, suspended
- Extended task
* running, ready, suspended, waiting


Task - Scheduling
- Scheduling되어 Task가 runing 상태에 있을 때 더 높은 Priority를 가지는 Task가 activate 된다면?
- scheduling 방식에 따라 다른 동작을 취함 (Full Preemptive, Non preemptive)
- Full Preemptive의 경우 Task가 activate 되었을 경우 다시 Scheduling하여 더 높은 우선순위를 가진 Task가 먼저 수행됨
- Non Preemptive의 경우 task가 activation 되더라도 scheduling이 일어나지 않고 현재의 task를 끝까지 수행
Task - Context Switching

Task - PreTaskHook / PostTaskHook
- TaskHook 이란?
- 디버깅이나 타이밍 정보 측정 등을 위하여 Task 동작 전후로 사용자가 작성하여 사용할 수 있는 루틴
- 동작 순서 : PreTaskHook -> Task running -> PostTaskHook
Event: Waiting state를 지원하는 task에 대하여 task간 동작 순서를 동기화할 수 있는 mechanism 제공, Task의 동작 순서를 동기화하기 위해 사용
Event
- Event mechanism
- Running state의 extended task는 지정된 이벤트가 발생할 때까지 wait state에서 대기
- Wating state의 extended task는 대기하고 있던 최소 한 개의 이벤트가 발생되면 ready state로 전이
- 이벤트가 이미 발생된 상태에서 동작중인 extended task가 해당 이벤트를 wait 하는 경우 그 Task는 running 상태 유지
- 사용시 제약
- Event를 사용할 수 있는 것은 Extenede Task에서만 가능
- Task가 Wating 상태를 지원해야 하기 때문
- Event를 set하는 것은 Basic Task 에서도 가능
Interrupt: 주변 장치에서 발생한 상태 변화 Ex) CAN signal receive, Timer expired
Interrupt
- Interrupt 특징
- Interrupt는 Task들을 선점함
- (Full preemptive, Non preemptive 상관 없이) : Context switching 발생
- Interrupt는 Category 1과 Category 2로 분류 가능
- 우선순위: Interrupt level > Logical level for scheduler > Task level
- Interrupt 분류
- Category1 Interrupt
- OS 서비스를 사용하지 않는 Interrupt Service Routine
- function 호출하듯이 Interrupt 사용하면 됨
- Category2 Interrupt
- OS 서비스를 사용하는 Interrupt Service Routine
- 루틴 안에서 ActivateTask를 호출할 수도 있다. -> context를 저장하고 호출해야함
Exception: CPU 내부에서 발생 ex) divide by zero
Interrupt: CPU 외부 하드웨어 장치에서 발생
Trap(Software Interrupt): system call 구현에 사용, 코드로 인해 발생
- Interrupt와 Task 간 스케줄링
- category 2 ISR의 경우에는 종료 후 task에 대하여 rescheduling 수행
- Nested interrupts of different category 문제
category 1 ISR 도중에 category 2 ISR 발생하여 task를 activate 시키는 경우 category 1 ISR 끝났을 때 OS를 call 하지 않아 activate시킨 task에 대하여 unbounded delay가 발생
Ex. solution) 모든 Category 1 ISR의 priority가 Category 2 ISR보다 같거나 높으면 됨

Alarm: Counter에 기반하며, 특정 시점에 도달하였을 경우 지정된 동작 (task activation, set event 혹은 alarm-callback) 함으로써 반복적인 이벤트를 발생시킬 수 있도록 하는 OS의 객체
Alarm
- 주요 용도
- OS 내 구성된 Task를 주기적으로 실행 시키기 위하여 사용
- Counter
- Counter는 소스(e.g. Timer)의 값을 TICK 단위의 상수 값으로 변경시킴 (e.g. 1ms -> 1tick)
- OSEK OS는 S/W 혹은 H/W Timer와 연결된, 적어도 하나의 COUNTER를 제공
Resource: 우선순위가 다른 여러 task가 공유된 자원에 병행 접근 하는 것을 조정 (임계 영역 보호), 예) 스케쥴러, 프로그램 순서, 메모리나 H/W 구역 (다른 코어 간에는 사용할 수 없음)
Resource
- 우선순위 역전현상

- Priority Ceiling Protocol
- 우선순위 낮은 Task가 resource를 가지고 preemption될 때 발생할 수 있는 교착상태 해결을 위한 방법
- Resource를 얻는 순간에 resource에 지정된 priority로 task의 priority가 상승
- Resource를 release 하는 순간에 task는 원래의 priority로 돌아가고 Scheduling Policy가 preemptive일 경우 scheduling이 발생
- 동일한 Resource를 사용하는 group 내에서 task가 resource를 점유하는 경우 group간 task 사이에서는 선점되지 않음
AUTOSAR OS
AUTOSAR OS 개요
AUTOSAR OS는? 기존의 OSEK OS를 기반으로 하여 추가적인(아래 그림 참고) 기능들이 부가됨.

Scedule Table
Scadule Table의 정의: 고정적으로 정의되어 있는 expiry point들의 집합
- 지정된 Offset이 지나 Expiry point에 도달하게 되면 각 expiry point에 정의된 Action을 수행하게 됨
- 지정된 duration 내에서 각각의 expiry point를 실행 (설정에 따라 반복하여 수행 가능)
Stack Monitoring
- 사용 목적
- Stack이 설정된 값보다 초과되어 사용되고 있지 않은 지 검사 (Overflow)
- 설정으로 사용여부를 결정할 수 있음
Protection Hook
OS에 의해 감지되는 심각한 에러의 발생을 알리기 위한 Interface 채널
- 사용 목적
- 심각한 (Serious) 에러가 발생했을 때 OS에 의해 호출 (내용은 User에 의해 작성)
Timing Protection
Timing Protection 이란? Task 및 ISR이 지정된 시간에 동작할 수 있도록 timing fault가 발생 시 이에 대한 에러 처리를 수행
OS-Application
OS-Application 이란? OS object (Tasks, ISRs, Alarms, Schedule tables, Counters) 들의 모음
IOC
IOC 란? 정보 전달 방법
1. Intra OS-Application communication : RTE 내부
2. Inter ECU communication : COM에 의한 방식
3. Inter OS-Application communication (IOC) : OS에 의한 방식
- 사용 목적
- Memory가 보호되는 application 사이에서의 communication
- Multi-Core를 지원하여 core간 정보 교환을 수행할 수 있도록 함
Call Trusted Function
- 주요 기능
- Trusted OS-Application은 자기의 함수를 Trusted function으로 외부에 제공
- Non Trusted OS-Application은 CallTrustedFunction API를 이용하여 Trusted OS-Application의 함수를 호출
- 사용 제한
- 동일한 Core 내의 application 간에만 사용할 수 있음

Memory Protection
Memory Protection 이란? 실행 프로그램(Task/ISR)이 특정 메모리 영역에 (Stack, Data, Code) 에 대하여 권한 없이 접근하지 못하도록 보호하는 서비스
Service Protection
- 사용 목적
- 잘못된 OS Service (API) 사용에 의해 OS에 문제가 생기는 것을 방지
- OSEK에서 포함하지 못한 case에 OSEK OS의 error status를 적용함