본문 바로가기

기술/개발 지식

OSEK - OS (1)

OSEK OS 개요

OSEK OS는 기본적인 실시간 운영체제를 정의한다. 구체적으로 멀티 태스킹, 이벤트/자원 관리, 인터럽트 관리, 알람, 에러 처리 다섯 가지 기능을 제공한다.

멀티 태스킹이란 한 CPU 위에서 여러 개의 태스크를 동시에 수행시키는 기능을 의미한다. OSEK OS를 통해 병렬적으로 여러 프로세스가 제한된 시간을 지켜서 작업을 수행할 수 있다.

CPU 점유를 위해 경쟁하는 요소들은 태스크, 인터럽트가 있다. 이런 프로세스의 우선순위를 정하고 실제 어떤 프로세스가 CPU를 점유할지를 판단하는 것이 스케줄러이다. 앞으로 태스크, 인터럽트, 스케줄러에 대해 알아보도록 하겠다.

Processing Levels

OSEK은 세가지 프로세스 레벨을 정의한다 : Interrupt level, Logical level for scheduler, Task level

Interruptstasks보다 높은 우선 순위를 갖는다.

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는 더 높은 우선권의 taskInterrupt 가 없는 한 끝날 때가지 실행된다.

BT는 최소한의 자원을 활용하고 프로세스간 동기화가 필요하지 않을 때 사용된다.

Extended Tasks(ET)

ETBT와 다르게 waiting 상태가 존재한다.

task 끝내지 않고 우선권이 낮은 task CPU 점유하도록 양보할 있다.

ET는 동기화가 필요한 작업이 필요할 때 사용할 수 있다.

Task Properties

Priorities:

 - 0은 가장 낮은 우선권을 의미한다.

 - 높은 숫자일수록 높은 우선권을 의미한다.

 - InterruptsTask와 우선권 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