カーネルのメモリ管理の概要
カーネルのメモリ管理とSOLIDメモリマップの関係
カーネルが管理するメモリ領域とSOLIDメモリマップデザイナで表示されるメモリ領域の関係を図に示します。
(メモリマップデザイナについては SOLID-IDE メモリマップデザイナ を参照してください。)
各項目についての詳細は以下のとおりです。
カーネル内部で管理される領域
- 管理テーブル変数
タスクをはじめとするRTOS資源の管理テーブルとして使用される領域です。 アイドル状態(タスクが動作していない状態)にカーネルが使用するスタックもここに含まれます。 領域のサイズは資源の最大数によって変動します。
- リンカで割り当てられるセクション:
静的リンク領域(.bssあるいはCOMMON)
- メモリマップデザイナで割り当てられる領域:
SOLID(SOLID_CORE属性)
各資源の最大数はkernel_cfg.cで静的に定義された資源の数と動的生成(オプション)資源の最大数の合計となります。 (静的および動的資源最大数の設定及び記述方法については カーネル起動パラメータの設定 を参照ください)
各資源1個あたりで必要となる管理テーブルのメモリサイズについては参考資料として以下の表(CSVファイル)が格納されていますので参照ください
solid-os\rtos\toppers_asp3\info\table_footprint_resource_cb.csv
- カーネルメモリプール
カーネルの内部でメモリ領域を動的に確保する際に使用されます。 プール領域のサイズを変更する方法については カーネルメモリプールのサイズを変更するには を参照ください
- リンカで割り当てられるセクション:
静的リンク領域(.bssあるいはCOMMON)
- メモリマップデザイナで割り当てられる領域:
SOLID(SOLID_CORE属性)
- 自動確保されるバッファ領域
RTOS資源に関してカーネル内部で管理領域を割り当てる必要がある場合、 カーネルメモリプールから引き当てられます。 カーネル内部で管理領域を割り当てる条件や割り当てられる領域のサイズは資源やサービスコールのパラメータ、kernel_cfg.cの設定により変動します。 目安となるメモリ容量について参考資料として以下の表(CSVファイル)が格納されていますので参照ください
solid-os\rtos\toppers_asp3\info\table_footprint_resource_heap.csv
- タスクスタック
各タスクが使用するスタック領域です。(タスク生成時のスタック先頭アドレスとしてユーザー変数のアドレスを渡した場合を除く)
- リンカで割り当てられるセクション:
(SOLIDで包括的に確保するため個別の指定なし)
- メモリマップデザイナで割り当てられる領域:
OSSTACK(SOLID_RESERVE属性)
カーネルメモリプールのサイズを変更するには
カーネルメモリプールのサイズを変更したい場合には以下のソースコードに定義されている定数 KMM_SIZE を変更してアプリケーションをビルドしてください。
修正するファイル:solid-os\rtos\toppers_asp3\asp3\config\kernel_cb_store.c
/*
* Memory Area Allocated by Kernel
*/
#define KMM_SIZE (4096/* perferred stack size */ * 16)
static MB_T _kernel_memory[TOPPERS_COUNT_SZ(KMM_SIZE, sizeof(MB_T))];
const size_t _kernel_mpksz = TOPPERS_ROUND_SZ(KMM_SIZE, sizeof(MB_T));
MB_T *const _kernel_mpk = _kernel_memory;