마이크로 컨트롤러(MCU)를 다루고 프로그래밍하는 임베디드 분야에서는 사실 RTOS의 필요성을 못느낄 수도 있는데, 사실 나도 그렇다. 운영체제(Operation System)는 프로그램 실행 관리를 수행하는 소프트웨어이다.
운영체제에는 범용 운영체제와 실시간 운영체제 (Real Time Operating System, RTOS)가 있다.
1. RTOS (Real Time Operating System) 개념
RTOS의 목적은 정해진 시간(실시간)에 데이터 처리를 하기 위한 스케줄링 운영체제이다.
임베디드 시스템이 가지는 시간 제약에는 실행 시작 타이밍이나 언제까지 처리를 완료할 것인지가 있다.
처리를 종료시킨다는 것은 입력 Data를 받아 출력 Data를 출력하기까지의 처리를 완료시키는 것을 의미한다.
시간제약은 임베디드 시스템의 목적과 용도에 따라 달라질 수 있다.
대부분의 임베디드 시스템은 프로그램의 여러 기능이 병렬로 처리 (실제로는 병렬처리가 아니지만) 되어야 하는 서비스를 제공해야하기 때문에 이 시간제약에 대한 전환 처리가 필요하다. 시간제약을 만족하지 못하였을 경우, 여러기능으로 전환해서 처리하려면 바로 이 RTOS (실시간 운영체제)가 필요한것이다.
비교적 적고 단순한 데이터처리 기능이 있는 TASK 시스템에서는 딜레이가 발생되지 않아 (시간제약이 준수됨) 올바르게 동작하지만 데이터가 많은 처리가 있다면 (예를들어 UART, SPI, I2C 통신으로 데이터를 처리해야하는 경우) 0.5초마다 처리해야하는 TASK 함수에 딜레이가 발생하게 된다.
RTOS는 커널로 구동되는데, TASK 함수에 시간제약을 걸어두면 우선순위에 따라 중간중간 인터럽트 하여 효율적으로 TASK를 구현할 수 있다. (시간제약을 준수하고 속도도 빨라지게 된다.)
물론 RTOS를 설치한다고 자동으로 TASK를 처리가 되는 것은 아니며, 처리(TASK)의 운선순위를 부여하여 운영체제에 등록해 두는 등 여러 작업이 필요로 한다.
2. TCB (Task Control Block) 와 스택오버플로우
TASK를 여러가지 사용할 경우 태스크로부터 다른 태스크의 제어 전환을 실시하려면 콘텍스트 스위치라는 메모리 전환이 이루어진다.
콘텍스트 스위치는 특정 태스크로 부터 다른 태스크로 전환을 실시할 때, 앞서 사용하고 있던 태스크의 상태에서 전환하려는 태스크 상태로 CPU 레지스터 등을 전환하는 작업이다.
태스크는 TCB 라고 부르는 관리 테이블로 관리되며 TCB에는 태스크 ID, 태스크의 운선순위, 태스크의 상태, 스택 포인터 등 태스크를 사용하기 위한 정보가 관리된다.
각 태스크의 스택 영역은 시스템 전체에서 태스크에 필요한 만큼 할당된다. 무한한 것이 아니므로 특정 태스크가 자신이 가지고 있는 태스크 영역보다 큰 영역을 사용하면 다른 태스크 스택 영역을 파괴하며 이를 스택 오버플로라 한다.
태스크 설계에 있어서 자신이 만드는 태스크의 스택 영역에 어느 정도 용량이 필요한지를 의식해서 설계하는 것이 바람직하다.
'Embedded System > 소프트웨어 (C,C++)' 카테고리의 다른 글
FreeRTOS 사용하기 (2) | 2024.10.16 |
---|---|
[C++] 클래스 상속(Inheritance) 개념 정리 (0) | 2024.10.01 |
[모듈 제작] 전류 CT 센서 인터페이스 모듈 - RMS 취득 펌웨어 (0) | 2024.08.21 |
[GUI & 터치스크린] LVGL 구현 관련 정리 (0) | 2024.07.31 |
[C/C++] LVGL GUI 라이브러리 (0) | 2024.07.10 |