본문 바로가기

카테고리 없음

RTOS란?

728x90

시분할 시스템 하에서 우선순위 기반 스케줄링을 통해 우선순위가 높은 task가 먼저 작업을 처리할 수 있게 한다.

시분할 시스템이란? : 시간을 쪼개어 하나의 처리 장치에서 두 개 이상의 처리를 가능하게 한 시스템

스케줄링이란? : 운영체제의 동작 기법 중의 하나로 특정 방법에 따라 프로세서들에게 CPU 등의 자원 배정을 하는 것을 뜻한다.

우선순위 기반 스케줄링 방식이란? : 현재 수행중인 task보다 높은 우선순위를 갖는 이벤트가 서비스를 요청할 때 task 전환이 발생

 

 

Non-OS 대비 RTOS의 장단점

- 장점

일관된 작업 수행시간

쉬운 기능 확장

장치 간 의존성 감소

 

- 단점

메모리 소모 증가

 

 

* 클록 Tick

시분할 시스템을 구현하기 위한 RTOS 커널 내부의 기준 시간.

시스템 성능에 따라 1ms ~ 10ms 주기의 타이머 인터럽트로 구현한다.

문맥전환 여부를 판단하기 위해 주기적으로 커널 스케줄러 호출.

시간관리 서비스 함수, 각 종류별 오브젝트의 실행, 블로킹 시간 관리 등에 이용.

타이머 인터럽트 주파수는 configTICK_RATE_HZ 매크로로 설정할 수 있다.

 

*** 주의!) configTICK_RATE_HZ 0 ~ 1000 의 값으로 설정해야 함.

why? )

#define portTICK_PERIOD_MS ((TickType_t) 1000 / configTICK_RATE_HZ)

이므로 1000 초과로 설정하면 결과적으로 0으로 나누는 것으로 처리되어 컴파일 에러 발생

* 메시지 Queue

정의 : Task 메시지(데이터)를 주고받기 위한 queue 형태의 오브젝트

 

 

* 인터럽트

Task와 인터럽트 비교

 

- Task

소프트웨어적으로 구현된다. (task상태, 우선순위 등)

ISR이 실행되지 않을 때에만 실행 가능.

 

- ISR

소프트웨어적으로 작성.

실행 시점과 그 때 실행되는 인터럽트의 종류는 하드웨어에 의해 결정됨.

그 어떤 Task보다도 우선순위가 높다.

Task의 문맥전환을 위해서도 사용됨.

 

- 인터럽트 관리

Interrupt Safe API

FreeRTOS에서는 task 버전과 ISR 버전의 두가지 버전의 함수를 제공

ISR 버전 함수는 “FromISR” 접미사가 붙는다.

 

portYIELD_FROM_ISR() : ISR 처리 직후에 바로 Task 스케줄링을 해야되는 경우에 호출

 

728x90