🔔RTOS(Real Time Operating System)란?
: 내장형 시스템에서는 일반적으로 설계 시 리소스 및 시간 제약이 발생한다. 실시간 운영 체제(RTOS)는 멀티태스킹 및 작업 통합을 간소화하기 위해 사용되는 경량 OS다. 또한 "실시간"이란 물리적 속도가 아닌 실행 시간의 예측 가능성/결정성을 나타낸다.
일반적으로 RTOS는 그 결정성으로 인해 엄격한 실시간 요구 사항을 충족하는 것으로 입증이 된다.
RTOS의 주요 개념:
작업
작업(프로세스/스레드라고도 함)은 무한 루프로 실행되는 독립 기능이며, 일반적으로 작업별로 하나의 기능을 담당한다. 작업은 각각의 시간(임시 분리)에 메모리 스택(공간 분리)에서 독립적으로 실행됩니다. 액세스 가능한 메모리 영역을 제한하고 액세스 위반 시 결함 예외를 트리거하는 하드웨어 메모리 보호 장치(MPU)를 사용하여 작업 간 공간 분리를 보장 가능하다. 일반적으로 내부 주변 장치는 메모리가 매핑되므로 MPU를 사용하여 주변 장치에 대한 액세스도 제한할 수 있다.
작업 상태는 다음과 같이 구분된다.
차단 – 작업에서 이벤트(예: 지연 타임아웃, 데이터/리소스 가용성) 대기 중
준비 완료 – CPU에서 작업을 실행할 준비가 되었지만 다른 작업에서 CPU를 사용 중이므로 작업이 아직 실행되지 않음
실행 중 – CPU에서 실행하도록 작업이 할당됨
스케줄러
RTOS의 스케줄러는 CPU에서 실행할 작업을 제어하며, 예약 알고리즘을 사용할 수 있다.
✅우선 예약 – 우선 순위가 더 높은 다른 작업이 준비되면 작업 실행이 중단 가능
✅조건 예약 – 현재 실행 중인 작업이 양보하는 경우에만 작업이 전환
우선 예약을 사용하면 실시간 제약 조건을 이행하기 위해 우선 순위가 더 높은 작업이 우선 순위가 더 낮은 작업을 중단할 수 있다. 하지만 이 경우 컨텍스트 전환에 따른 부담이 증가한다.
작업 간 통신(ITC)
일반적으로 여러 작업에서 정보 또는 이벤트를 서로 공유해야 한다. 가장 쉬운 공유 방법은 RAM에서 공유된 전역 변수를 직접 읽고 쓰는 것이지만, 경합 조건으로 인해 데이터가 손상될 위험이 있으므로 바람직하지 않다. 대신 setter 및 getter 함수로 액세스할 수 있는 파일 범위 정적 변수 읽고 쓰는 것이 좋다. 그러면 setter/getter 함수 내에서 상호 제외 개체(mutex)를 사용하거나 인터럽트를 비활성화하여 경합 조건을 방지할 수 있다. 더 좋은 방법은 스레드로부터 안전한 RTOS 개체(예: 메시지 대기열)를 사용해 작업 간에 정보를 전달하는 것이다.
작업을 차단하고 RTOS 개체를 사용 가능할 때까지 대기할 수 있으므로, RTOS 개체는 정보 공유 외에 작업 실행을 동기화할 수도 있다.
✅메시지 대기열
- 데이터 전달을 위한 FIFO(First-in First-out) 대기열
- 복사 또는 참조(포인터)를 통해 데이터 전송 가능
- 작업 간이나 인터럽트와 작업 간에 데이터를 전송하는 데 사용됨
✅세마포어
- 특정 리소스의 가용성을 기록하기 위한 참조 카운터로 처리될 수 있음
- 이진 또는 계수 세마포어
- 리소스 사용을 보호하거나 작업 실행을 동기화하는데 사용된다
✅뮤텍스
- 이진 세마포와 비슷하며, 일반적으로 단일 리소스 사용을 보호하는 데 사용됨(MUTual EXclusion)
- FreeRTOS 뮤텍스는 우선 순위 반전(우선 순위가 높은 작업이 우선 순위가 낮은 작업에 대해 대기를 종료하는 조건) 문제를 방지하기 위해 우선 순위 상속 메커니즘과 함께 제공된다.
✅사서함
- 단일 변수를 공유하는 간단한 스토리지 위치
- 단일 요소 대기열로 간주될 수 있음
✅이벤트 그룹
- 조건 그룹(세마포, 대기열, 이벤트 플래그 등의 가용성)
- 작업을 차단하고 특정 조합 조건을 이행하기 위해 대기할 수 있음
- Zephyr as a Polling API 및 FreeRTOS as QueueSets에서 사용 가능
시스템 틱
RTOS는 시간 측정을 위한 시간축이 필요하다. 시간축은 일반적으로 주기적 하드웨어 타이머 인터럽트 단위로 증분되는 시스템 틱 카운터 변수 형태이다. 시스템 틱을 사용하면 단 하나의 단일 하드웨어 타이머로 많은 시간 기반 서비스(작업 실행 간격, 대기 타임아웃, 시간 조각화)를 유지할 수 있습니다. 하지만 틱 속도가 높아도 RTOS 시간축 분해능만 증가하고 소프트웨어가 더 빠르게 실행되지 않는다.
🔔RTOS를 사용하는 이유?
✅조직
응용 제품을 항상 베어 금속 방식으로 작성할 수 있지만, 코드 복잡성이 증가하므로 일부 구조에서는 응용 제품을 여러 부분으로 관리하여 개별적으로 유지하는 것이 도움이 될 수 있습니다. 또한 체계적인 개발 방식과 비슷한 설계 언어를 사용하여 새로운 팀원이 코드를 이해하여 빠르게 참여할 수 있습니다. RFCOM Technologies는 다른 RTOS에서 Texas Instruments의 Hercules, Renesas의 RL78 및 RX, STMicroelectronics의 STM32와 같은 다른 마이크로 컨트롤러를 사용하여 응용 제품을 개발했습니다. 비슷한 설계 패턴을 사용하여 다른 마이크로 컨트롤러와 다른 RTOS에서 응용 제품을 개발할 수 있습니다.
✅모듈성
분할 및 정복. 다른 작업에서 기능을 분리하면 다른 기능을 차단하지 않고 새 기능을 쉽게 추가할 수 있다. 단 새 기능이 CPU, 주변 장치와 같은 공유 리소스에 부담을 주지 않아야 한다. RTOS를 사용하지 않는 개발은 일반적으로 모든 기능이 루프에 포함되는 대규모 무한 루프를 발생한다. 루프 내에서 기능을 변경하면 다른 기능에 영향을 주어서 소프트웨어를 수정하고 유지 관리하기 어려워진다.
✅통신 스택 및 드라이버
TCP/IP, USB, BLE 스택, 그래픽 라이브러리와 같은 많은 추가 드라이버 또는 스택이 기존 RTOS용으로 개발되어 이식된다. 응용 제품 개발자는 소프트웨어의 응용 계층에 집중하여 출시 시간을 크게 단축할 수 있다.
🔔유용한 정보
✅정적 할당
RTOS 개체에 대한 메모리 정적 할당은 컴파일 시간 중에 각 RTOS 개체에 대해 RAM의 메모리 스택을 예약하는 것을 의미합니다. freeRTOS에서 정적 할당 함수의 예로는 xTaskCreateStatic()이 있다. 이 함수는 발생 가능한 잘못된 할당을 처리하는 부담을 완화하고 응용 제품의 결정력을 높여서 RTOS 개체가 성공적으로 생성될 수 있도록 보장한다.
작업에 필요한 스택 크기 결정의 측면에서 필요한 것보다 더 큰 스택 크기로 작업을 실행한 다음 런타임에 스택 사용을 확인하여 높은 워터마크를 결정할 수 있습니다. 또한 정적 스택 분석 도구를 사용할 수 있다.
✅운영 체제 추상화 계층(OSAL) 및 의미 있는 추상화
하드웨어 추상화 계층(HAL)과 마찬가지로 RTOS 추상화 계층을 사용하면 응용 소프트웨어를 다른 RTOS로 쉽게 마이그레이션할 수 있다. RTOS의 기능이 매우 유사하므로 OSAL를 생성하는 것도 복잡하지 않다.
하지만 내기준에서는 복잡하다.
결론
RTOS는 스케줄러, 작업, 작업 간 통신 RTOS 개체와 같은 기능과 통신 스택 및 드라이버를 제공한다. RTOS를 사용하면 개발자가 내장형 소프트웨어의 응용 계층에 집중하여 멀티태스킹 소프트웨어를 쉽고 빠르게 설계할 수 있다. 하지만 다른 도구와 마찬가지로 더 많은 가치를 창출하려면 RTOS를 적절히 사용해야 한다. 안전하고 보안되고 효과적인 내장형 소프트웨어를 만들기 위해 개발자는 RTOS 기능을 사용할 시기와 RTOS를 구성하는 방법을 알아야 한다.
'교재 및 CS공부 > CS스터디' 카테고리의 다른 글
[CS스터디]면접을 위한 CS 전공지식 노트 #11 (0) | 2022.12.20 |
---|---|
[CS스터디]면접을 위한 CS 전공지식 노트 #10 (0) | 2022.11.08 |
[CS스터디]면접을 위한 CS 전공지식 노트 #9 🎗 (2) | 2022.11.04 |
[CS스터디]면접을 위한 CS 전공지식 노트 #8 (0) | 2022.11.03 |
[CS스터디]면접을 위한 CS 전공지식 노트 #7 (0) | 2022.10.26 |
댓글