OSEK ⁄ VDX

OSEK Real-Time OS : 특징2(Event, Alarm, Hook) 및 실습

시그널보내 2023. 7. 17. 13:24

1. Event

  • 다른 task가 발생시킴, Interrupt일 수도 있음
  • extended tasks일때만 제공
  • 실행순서를 정해줄때 사용
  • preemptible 와 non-preemptible 일때 서로 스케줄링 behavior가 달라짐

1) preemptable(priority : T1 > T2)

  • T2가 수행중인 상태에서 이벤트를 발생시키면 스케줄러가 활성화된다.
  • T1은 waiting 상태에서 ready상태로 변경된다.
  • T1의 우선순위가 T2보다 높고 preemptive이기 때문에 작업이 전환된다.

2) non-preemptable(priority : T1 > T2)

  • non-preemptive스케줄링일때 이벤트가 발생하고 스케줄러가 rescheduling을 해도 T2의 작업을 중간에 끝내지 않고 작업을 마치고 나서 T1으로 전환한다.

2. Alarm

Counter

  • 시간의 흐름에 따라 증가하는 카운터
  • tick 으로 측정하며 1tick = 1msec

Alarm

  • 시간의 흐름에 따라 다양한 일을 처리하기 위함(task, event set, callback function등)
  • 카운터가 특정수치에 도달하면 알람이 발생한다.
💡 callback function : 개발자가 만든 함수를 라이브러리가 호출하는 경우

3. Hook

1) Hook 개념

  • OS가 지정한 특정한 지점에서 특정 동작을 하기 위함
  • Hook용도
    • 시스템 시작
    • system shutdown
    • error handling

① : 하드웨어(물리)로 시스템 부팅

② : OS시작

③ : OS초기화

④ : Hook 지점 → 개발자가 특정 기능을 넣을 수 있음(OS초기화, 커널시작지점 사이)

⑤ : 커널 시작 지점

 

  • context switching이 일어날때 2개의 훅 루틴이 발생한다(PreTaskHook, PostTaskHook)
  • 두 루틴은 디버깅할때 혹은 context switching시간을 측정할때 사용된다.


4. 실습

OSEK OS구현은 오픈소스인 ERIKA3를 사용했으며 아두이노 우노에 OS를 올려 실습을 진행했다.

1) Alarm

[해석]

  1. 우선순위는 Task2가 더 높으며 모두 Preemptive이다.
  2. Alarm을 통해서 두 Task는 정확히 5초에 Task가 발생하며 이때 우선순위가 더 높은 Task2가 시작된다. Task1은 ready상태에 있다.
  3. 3초후 Task2가 종료됨과 동시에 Task1이 시작한다.
  4. 다시 3초 후 Task1이 종료된다.
  5. Task1의 주기가 10이기 때문에 다시 10초에 Task1 실행.
  6. 3초후 Task종료 후 20초일때 Task2 실행