OSEK OS 개요
OSEK OS는 기본적인 실시간 운영체제를 정의한다. 구체적으로 멀티 태스킹, 이벤트/자원 관리, 인터럽트 관리, 알람, 에러 처리 다섯 가지 기능을 제공한다.
멀티 태스킹이란 한 CPU 위에서 여러 개의 태스크를 동시에 수행시키는 기능을 의미한다. OSEK OS를 통해 병렬적으로 여러 프로세스가 제한된 시간을 지켜서 작업을 수행할 수 있다.
CPU 점유를 위해 경쟁하는 요소들은 태스크, 인터럽트가 있다. 이런 프로세스의 우선순위를 정하고 실제 어떤 프로세스가 CPU를 점유할지를 판단하는 것이 스케줄러이다. 앞으로 태스크, 인터럽트, 스케줄러에 대해 알아보도록 하겠다.
Processing Levels
OSEK은 세가지 프로세스 레벨을 정의한다 : Interrupt level, Logical level for scheduler, Task level
Interrupts는 tasks보다 높은 우선 순위를 갖는다.
Task Management
태스크란 동시적으로 CPU를 점유하기 위해 경쟁하는 서로 다른 독립적인 실행 단위(thread)이다.
태스크는 스케줄 가능하다.
태스크는 함수들의 동시적이고 비동기적인 실행을 위한 프레임워크를 제공한다.
애플리케이션의 태스크는 OIL 파일에서 TASK system generation object를 통해 생성(generate)된다.
OSEK OS 는 다음과 같은 두 종류의 태스크를 제공한다 : Basic tasks / Extended tasks
Basic Task는 running, ready, suspended 상태를 갖고 extended task는 추가적으로 waiting 상태를 갖는다.
- Running : 태스크가 현재 수행 중이다.
- Ready : 다른 태스크가 수행을 마치기를 기다리고 있는 중이다.
- Waiting : 태스크가 어떤 이벤트가 발생하기를 기다리며 수행을 일시 중단한 상태이다.
- Suspended : 태스크가 종료한 상태이다. 종료된 태스크는 다시 시작될 수 있다.
Basic Tasks(BT)
BT는 더 높은 우선권의 task나 Interrupt 가 없는 한 끝날 때가지 실행된다.
BT는 최소한의 자원을 활용하고 프로세스간 동기화가 필요하지 않을 때 사용된다.
Extended Tasks(ET)
ET는 BT와 다르게 waiting 상태가 존재한다.
task를 끝내지 않고 우선권이 더 낮은 task가 CPU을 점유하도록 양보할 수 있다.
ET는 동기화가 필요한 작업이 필요할 때 사용할 수 있다.
Task Properties
Priorities:
- 0은 가장 낮은 우선권을 의미한다.
- 높은 숫자일수록 높은 우선권을 의미한다.
- Interrupts는 Task와 우선권 scale이 분리되어 있다.
- Priority는 정적으로 할당되며 실행 중에 변경할 수 없다.
Stack:
- 정적으로 할당된다.
- 최소 크기는 스케줄링 정책, task에 의해 사용되는 서비스, 인터럽트, 에러 핸들링 정책, 프로세서 타입 등에 따라 결정된다.
APIs for multi-tasking
DeclareTask() - 태스크의 존재를 선언한다.
ActivateTask() - 태스크를 시작시킨다.
TerminateTask() - 태스크를 종료시킨다.
ChainTask() - 현재 태스크를 종료시키고 다른 태스크를 시작시킨다.
Schedule() - 스케줄러를 호출한다.
GetTaskID() - 현재 수행중인 태스크를 반환한다.
GetTaskState() - 태스크의 상태를 반환한다.
Scheduler
각 태스크마다 별도의 메모리 영역을 할당하고 이 영역에 각 태스크의 상태를 저장하여 여러 태스크가 CPU 하나를 공유할 수 있도록 한다.
스케줄러는 ready 상태에 있는 태스크들 중에 다음에 수행할 태스크를 선택한다. 우선순위가 높은 태스크가 먼저 선택되며, 같은 우선순위의 태스크가 여러 개 존재할 경우, 가장 오래 전에 ready 상태가 된 태스크가 선택된다.
스케줄링 정책은 full / non / mixed-preemptive이냐에 따라 테스크 인터럽트 수준이나 메모리 점유율 등이 결정된다.
Non-Preemptive Scheduling
실행 중인 task가 끝날 때까지 다른 task가 실행될 수 없다.
T1이 T2보다 우선순위가 높더라도 T2가 running 상태에 있기 때문에 T2가 suspended로 가야 T1이 running상태로 진입할 수 있다.
Full Preemptive Scheduling
언제라도 높은 우선권의 task가 준비되면 기존에 실행 중인 task를 중단하고 높은 우선권의 task를 실행할 수 있다.
T1이 T2보다 우선순위가 높기 때문에 T2가 running 상태에 있더라도 T1이 running상태에 진입하고 아직 끝나지 않은 T2는 다시 ready 상태로 바뀐다.
'기술 > 개발 지식' 카테고리의 다른 글
OSEK - NM (0) | 2020.01.14 |
---|---|
OSEK - OS(3) (0) | 2020.01.13 |
OSEK - OS (2) (0) | 2020.01.13 |
OSEK - Overview (0) | 2020.01.10 |
OSEK - 역사 (0) | 2020.01.10 |