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중 ActivateTask 와 ChainTask 를 이용하면 활성화된다.
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)