시분할 시스템 하에서 우선순위 기반 스케줄링을 통해 우선순위가 높은 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 스케줄링을 해야되는 경우에 호출