🌱 Core 14. RTOS - Heap Memory Management
Ở post trước chúng ta đã cùng tìm hiểu về phần cứng sử dụng để xây dựng một hệ điều hành RTOS. Một hệ điều hành RTOS trên vi điều khiển bao gồm các task được phân bổ bộ nhớ trên vùng nhớ Heap (Thuộc RAM). Việc cấp phát và quản lý bộ nhớ này là vô cùng quan trọng.
💛 Bài viết này là phần tìm hiểu của bạn Đặng Văn Sơn, người anh em cùng team FPT. Mình xin gửi lời cảm ơn của anh em đọc được bài viết này đến bạn.
Về cơ bản, trong RTOS cần quản lý RTOS cho các yếu tố: các Tasks, cho các cơ chế Semaphore, Queue, Mutex, và việc cấp phát động (Dynamic memory allocation). Như các bạn đã biết thì vùng nhớ Heap trên RAM sẽ thường được sử dụng với hàm malloc() và free() trong C. Tức là vùng nhớ này có thể dùng để cấp phát động cho một biến/mảng/..., sau đó có thể giải phóng để tiết kiệm bộ nhớ.
Có 5 cách cơ bản để cấp phát bộ nhớ cho RTOS:
👉 Heap_1: Đây là cách cấp phát cơ bản nhất và không cho phép giải phóng bộ nhớ.
- Ưu điểm của phương pháp triên khai này là đơn giản, dễ sử dụng, chỉ cần cấp phát mảng tĩnh cố định trên Heap.
- Nhược điểm của nó là không giải phóng bộ nhớ được, nên chỉ dùng với những ứng dụng mà chúng ta không cần xóa các Task, Semaphore, Mutex, ...
👉 Heap_2: cho phép giải phóng bộ nhớ, nhưng không đặt các vùng Task cạnh nhau.
👉 Heap_3: Cách này sử dùng các hàm theo thư viện chuẩn C, đó là malloc() và free() để cấp phát và giải phóng bộ nhớ.
👉 Heap_4: Giống như Heap_2 tuy nhiên cho phép sử dụng lại các vùng Free Space.
👉 Heap_5: Không giống như Heap_4, Heap_5 không bị giới hạn trong việc cấp phát bộ nhớ từ một mảng được khai báo tĩnh duy nhất; Heap_5 có thể cấp phát bộ nhớ từ nhiều không gian bộ nhớ riêng biệt.
Điều này khá hữu ích khi RAM được phân cách thành nhiều vùng như hình trên.
👉 Các cách phân bổ bộ nhớ trên Heap khác quan trọng khi thiết kế RTOS, tùy vào ứng dụng cụ thể cũng như tài nguyên của hệ thống, chúng ta sẽ có những cách thiết kế khác nhau.
>>>= Follow ngay =<<<
Để theo dõi những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊