OSEK ⁄ VDX

OSEK Real-Time OS : 특징1(Task, 스케줄링, 인터럽트)

시그널보내 2023. 7. 16. 00:58

1. Task

일반적인 OS에서의 process생성과정은(생성, 준비, 실행, 대기, 종료) 5가지 방식으로 나뉘지만 OSEK OS에서는 조금 다르다. Task는 크게 2가지 방식으로 나뉜다.

1) Basic task state model

  • running : task가 CPU를 할당받아 작업하는 상태. 한 번에 한 작업만이 이 상태에 있을 수 있으며, 다른 모든 상태는 여러 작업이 동시에 적용될 수 있다.
  • suspend : running 상태인 직업이 “terminate(종료)”명령을 받으면 일시중지인 상태로 작업이 비활성화 된다. “activate”명령을 받으면 ready상태로 돌아간다.
  • ready : running상태의 작업이 preemptive스케줄링에 의해 우선순위가 밀릴때 ready상태로 들어온다. suspend상태에서 activate명령을 받을때도 ready상태로 변한다.

2) Extended task state model

전체적인 방식은 Basic task state model과 동일하나 waiting 상태가 추가되었다.

  • waiting : 실행중인 task가 wait명령을 받아서 Event를 기다리고 있는 상태.

3) Task activation

비활성화 되어있는 task를 활성화 시켜준다. Task API중 ActivateTaskChainTask 를 이용하면 활성화된다.


2. Task Scheduling

  • task switching : OSEK OS에서의 context switching
    • 스케줄러가 다음 실행할 task를 고른다
  • 우선순위 기반 스케줄링
    • 개별 task는 모두 고유의 우선순위를 할당받는다
    • 0이 가장 낮은 우선순위, 숫자가 높을수록 우선순위가 높아진다.
    • 우선순위가 system이 동작하는 동안은 바뀌지 않는다.
    • 동일한 우선순위의 작업이 큐에 있다면 FIFO방식으로 동작한다.
  • Preemptive 와 non-preemptive 스케줄링 둘다 지원하므로 섞어서도 사용 가능하다.

1) Preemptive

  • T1의 우선순위가 높기 때문에 T2가 실행하고 있어도 중간에 T1 activate가 들어오면 T1이 실행된다.

2) non-preemptive

  • T1의 우선순위가 높아도 non-preemptive이기 때문에 중간에 T1의 activate가 들어와도 바로 실행하지 않고 ready상태로 들어가서 대기한 다음 T2의 작업이 끝나야 T1이 동작한다.

3. Interrupt processing

OSEK OS에서는 ISR이 2부류로 나뉜다.

1) ISR Category 1

  • 운영체제를 사용하지 않는다 → direct로 H/W사용
  • 오버헤드가 가장 적다. → 가볍고 빠르다

2) ISR Category2

  • OSEK OS의 API를 사용한다.
  • 오버헤드가 있지만 다양한 기능을 활용할 수 있다.

참고자료

Specification OSEK OS 2.2.3 (irisa.fr)