2장. 메모리 관리
장 소개 및 범위
전제 조건
FreeRTOS는 C 소스 파일 세트로 제공되므로 유능한 C 프로그래머가 FreeRTOS를 사용하기위한 전제 조건이므로이 장에서는 독자가 다음과 같은 개념에 익숙하다고 가정합니다.
- 다양한 컴파일 및 연결 단계를 포함하여 C 프로젝트가 빌드되는 방법.
- 스택과 힙은 무엇입니까?
- 표준 C 라이브러리 malloc () 및 free () 함수.
동적 메모리 할당 및 FreeRTOS와의 관련성
FreeRTOS V9.0.0에서 커널 개체는 컴파일 타임에 정적으로 할당되거나 런타임에 동적으로 할당될 수 있습니다.
다음 장에서는 태스크, 큐, 세마포어 및 이벤트 그룹과 같은 커널 오브젝트를 소개합니다. FreeRTOS를 최대한 사용하기 쉽게 만들기 위해 이러한 커널 개체는 컴파일 타임에 정적으로 할당되지 않고 런타임에 동적으로 할당됩니다.
FreeRTOS는 커널 개체가 생성 될 때마다 RAM을 할당하고 커널 개체가 삭제될 때마다 RAM을 해제합니다.
이 정책은 설계 및 계획 노력을 줄이고 API를 단순화하며 RAM 공간을 최소화합니다. 이 장에서는 동적 메모리 할당에 대해 설명합니다. 동적 메모리 할당은 C 프로그래밍 개념이며 FreeRTOS 또는 멀티 태스킹과 관련된 개념이 아닙니다.
커널 개체가 동적으로 할당되고 범용 컴파일러에서 제공하는 동적 메모리 할당 체계가 항상 실시간 애플리케이션에 적합하지 않기 때문에 FreeRTOS와 관련이 있습니다. 메모리는 표준 C 라이브러리 malloc () 및 free () 함수를 사용하여 할당 할 수 있지만 다음 이유 중 하나 이상으로 인해 적합하지 않거나 적절하지 않을 수 있습니다.
- 소형 임베디드 시스템에서는 항상 사용할 수있는 것은 아닙니다.
- 그들의 구현은 상대적으로 크고 귀중한 코드 공간을 차지할 수 있습니다.
- 스레드로부터 안전하지 않습니다.
- 결정적이지 않습니다. 함수를 실행하는 데 걸리는 시간은 호출마다 다릅니다.
- 조각화 1가 발생할 수 있습니다.
- 링커 구성을 복잡하게 만들 수 있습니다.
- 힙 공간이 다른 변수에서 사용하는 메모리로 커질 수있는 경우 디버그하기 어려운 오류의 원인이될 수 있습니다.
동적 메모리 할당 옵션
FreeRTOS V9.0.0에서 커널 개체는 컴파일 타임에 정적으로 할당되거나 런타임에 동적으로 할당될 수 있습니다. FreeRTOS의 초기 버전은 메모리 풀 할당 체계를 사용하여 다른 크기의 메모리 블록의 풀이 컴파일 시간에 미리 할당된 다음 메모리 할당 함수에서 반환되었습니다. 이는 실시간 시스템에서 사용하는 일반적인 방식이지만 많은 지원 요청의 원천으로 판명 되었습니다. 주로 RAM을 매우 작은 임베디드 시스템에서 사용할 수 있을만큼 효율적으로 사용할 수 없었기 때문에 체계가 삭제되었습니다. FreeRTOS는 이제 메모리 할당을 이식 가능한 계층의 일부로 처리합니다 (핵심 코드베이스의 일부가 아님). 이는 서로 다른 임베디드 시스템이 다양한 동적 메모리 할당 및 타이밍 요구 사항을 가지고 있기 때문에 단일 동적 메모리 할당 알고리즘이 애플리케이션의 하위 집합에만 적합하다는 사실을 인식한 것입니다. 또한 핵심 코드베이스에서 동적 메모리 할당을 제거하면 애플리케이션 작성자가 적절한 경우 고유한 구현을 제공할 수 있습니다.
FreeRTOS에 RAM이 필요한 경우 malloc()을 호출하는 대신 pvPortMalloc()을 호출합니다.
RAM이 해제되면 free()를 호출하는 대신 커널이 vPortFree()를 호출합니다.
pvPortMalloc()에는 표준 C 라이브러리 malloc() 함수와 동일한 프로토 타입이 있고
vPortFree()에는 표준 C 라이브러리 free() 함수와 동일한 프로토 타입이 있습니다.
pvPortMalloc () 및 vPortFree ()는 공용 함수이므로 응용 프로그램 코드에서 호출할 수도 있습니다.
FreeRTOS V9.0.0에서 커널 개체는 컴파일 타임에 정적으로 할당되거나 런타임에 동적으로 할당될 수 있습니다. FreeRTOS에는 pvPortMalloc() 및 vPortFree()의 다섯 가지 예제 구현이 함께 제공됩니다.
FreeRTOS 애플리케이션은 예제 구현 중 하나를 사용하거나 자체적으로 제공할 수 있습니다.
다섯 가지 예제는 각각 freeRTOS / Source / portable / MemMang 디렉터리에 있는 heap_1.c, heap_2.c, heap_3.c, heap_4.c 및 heap_5.c 소스 파일에 정의되어 있습니다.
범위
독자들에게 다음 사항을 잘 이해하는데 목적이 있습니다.
- FreeRTOS가 RAM을 할당하는 경우.
- FreeRTOS와 함께 제공되는 5 가지 예제 메모리 할당 체계.
- 선택할 메모리 할당 체계
'OS > FreeRTOS' 카테고리의 다른 글
RTOS 이해하기 2-2[기초] (0) | 2020.12.13 |
---|---|
RTOS 이해하기 1-4[기초] (0) | 2020.12.10 |
RTOS 이해하기 1-3[기초] (0) | 2020.12.10 |
RTOS 이해하기 1-2[기초] (0) | 2020.12.10 |
RTOS 이해하기 1-1[기초] (0) | 2020.12.10 |