From 91048f91359869d6364ef57110a2076ece16f3c6 Mon Sep 17 00:00:00 2001 From: Mochi Date: Sat, 18 Feb 2017 15:33:51 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A1=E3=83=A2=E3=83=AA=E9=A0=98=E5=9F=9F?= =?utf8?q?=E7=AE=A1=E7=90=86=E3=82=B5=E3=83=96=E3=83=A2=E3=82=B8=E3=83=A5?= =?utf8?q?=E3=83=BC=E3=83=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/kernel/Makefile | 10 +- src/kernel/MemMng/MemMngArea.c | 593 +++++++++++++++++++++++++++++++++++++++++ src/kernel/MemMng/MemMngArea.h | 16 ++ src/kernel/MemMng/MemMngInit.c | 8 +- src/kernel/include/Cmn.h | 26 ++ src/kernel/include/MemMng.h | 22 +- 6 files changed, 665 insertions(+), 10 deletions(-) create mode 100644 src/kernel/MemMng/MemMngArea.c create mode 100644 src/kernel/MemMng/MemMngArea.h create mode 100644 src/kernel/include/Cmn.h diff --git a/src/kernel/Makefile b/src/kernel/Makefile index d537148..2b06724 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -1,7 +1,7 @@ #******************************************************************************# #* src/kernel/Makefile *# -#* 2016/12/16 *# -#* Copyright (C) 2016 Mochi. *# +#* 2017/02/17 *# +#* Copyright (C) 2016-2017 Mochi. *# #******************************************************************************# #******************************************************************************# #* マクロ設定 *# @@ -16,6 +16,7 @@ KERNEL_NAME = kernel SRCS = InitCtrl/InitCtrlInit.c \ MemMng/MemMngInit.c \ MemMng/MemMngGdt.c \ + MemMng/MemMngArea.c \ IntMng/IntMngInit.c \ IntMng/IntMngIdt.c \ IntMng/IntMngHdl.c \ @@ -33,8 +34,9 @@ CFLAGS = -O \ -I../include # LDフラグ -LDFLAGS = -melf_i386 \ - -lc +LDFLAGS = -melf_i386 \ + -lc \ + -lMLibBasic #******************************************************************************# diff --git a/src/kernel/MemMng/MemMngArea.c b/src/kernel/MemMng/MemMngArea.c new file mode 100644 index 0000000..e2d3bae --- /dev/null +++ b/src/kernel/MemMng/MemMngArea.c @@ -0,0 +1,593 @@ +/******************************************************************************/ +/* src/kernel/MemMng/MemMngArea.c */ +/* 2017/02/18 */ +/* Copyright (C) 2017 Mochi. */ +/******************************************************************************/ +/******************************************************************************/ +/* インクルード */ +/******************************************************************************/ +/* 共通ヘッダ */ +#include +#include +#include +#include +#include + +/* 外部モジュールヘッダ */ +#include + +/* 内部モジュールヘッダ */ + + +/******************************************************************************/ +/* 定義 */ +/******************************************************************************/ +/** メモリ領域情報数 */ +#define AREA_INFO_NUM ( 1000000 ) + +/** メモリ領域アライメント */ +#define AREA_ALIGNMENT ( 0x1000 ) + +/* メモリ領域情報使用フラグ */ +#define AREA_INFO_UNUSED ( 0 ) /** メモリ領域情報使用中 */ +#define AREA_INFO_USED ( 1 ) /** メモリ領域情報未使用 */ + +/** メモリ領域情報構造体 */ +typedef struct { + MLibBasicListNode_t node; /**< 連結リストノード情報 */ + uint32_t used; /**< 使用フラグ */ + void *pAddr; /**< 先頭アドレス */ + size_t size; /**< サイズ */ +} AreaInfo_t; + +/** メモリ領域管理テーブル構造体 */ +typedef struct { + MLibBasicList_t usedList; /**< 使用中メモリ領域リスト */ + MLibBasicList_t freeList; /**< 未使用メモリ領域リスト */ + MLibBasicList_t emptyList; /**< 空メモリ領域情報リスト */ + AreaInfo_t areaInfo[ AREA_INFO_NUM ]; /**< メモリ領域情報 */ +} AreaTbl_t; + + +/******************************************************************************/ +/* 変数定義 */ +/******************************************************************************/ +/** メモリ領域管理テーブル */ +static AreaTbl_t gAreaTbl; + + +/******************************************************************************/ +/* ローカル関数プロトタイプ宣言 */ +/******************************************************************************/ +/* 指定メモリ領域割当 */ +static void *AreaAlloc( AreaInfo_t *pFree ); + +/* 指定メモリ領域割当(一部) */ +static void *AreaAllocPartially( AreaInfo_t *pFree, + size_t size ); + +/* 指定メモリ領域解放(結合) */ +static CmnRet_t AreaFree( AreaInfo_t *pFree, + AreaInfo_t *pUsed ); + +/* 指定メモリ領域解放(最後尾挿入) */ +static CmnRet_t AreaFreeAfterTail( AreaInfo_t *pUsed ); + +/* 指定メモリ領域解放(前挿入) */ +static CmnRet_t AreaFreeBefore( AreaInfo_t *pFree, + AreaInfo_t *pUsed ); + + +/******************************************************************************/ +/* グローバル関数定義 */ +/******************************************************************************/ +/******************************************************************************/ +/** + * @brief メモリ領域割当 + * @details 指定したサイズを満たすメモリ領域を割り当てる。 + * + * @param[in] size 割当サイズ + * + * @retval NULL 失敗 + * @retval NULL以外 割り当てたメモリ領域の先頭アドレス + * + * @note 割当サイズが4Kバイトアライメントでない場合は、割当サイズが4Kバ + * イトアライメントに合うよう加算して、メモリ領域を割り当てる。 + */ +/******************************************************************************/ +void *MemMngAreaAlloc( size_t size ) +{ + void *pAddr; /* 割当メモリ領域先頭アドレス */ + AreaInfo_t *pFree; /* 未使用メモリ領域情報 */ + + /* 初期化 */ + pAddr = NULL; + pFree = NULL; + + /* サイズチェック */ + if ( size == 0 ) { + /* 不正 */ + + return NULL; + + } else { + /* 正常 */ + + /* アライメント計算 */ + size = MLIB_BASIC_ALIGN( size, AREA_ALIGNMENT ); + } + + /* 割当可能な未使用メモリ領域検索 */ + do { + /* 未使用メモリ領域情報取得 */ + pFree = ( AreaInfo_t * ) + MLibBasicListGetNextNode( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pFree ); + + /* 取得結果判定 */ + if ( pFree == NULL ) { + /* メモリ領域情報無 */ + + return NULL; + } + + /* 割当可能判定 */ + } while ( pFree->size < size ); + + /* 未使用メモリ領域サイズ比較 */ + if ( pFree->size == size ) { + /* 必要サイズと一致 */ + + /* 同サイズの未使用メモリ領域からメモリ割当 */ + pAddr = AreaAlloc( pFree ); + + } else { + /* 必要サイズを超過 */ + + /* 超過サイズの未使用メモリ領域からメモリ割当 */ + pAddr = AreaAllocPartially( pFree, size ); + } + + return pAddr; +} + + +/******************************************************************************/ +/** + * @brief メモリ領域解放 + * @details 指定したメモリアドレスが先頭アドレスのメモリ領域を解放する。 + * + * @param[in] *pAddr 先頭アドレス + * + * @retval CMN_SUCCESS 正常終了 + * @retval CMN_FAILURE 異常終了 + */ +/******************************************************************************/ +CmnRet_t MemMngAreaFree( void *pAddr ) +{ + CmnRet_t ret; /* 関数戻り値 */ + MLibRet_t retMLib; /* MLib関数戻り値 */ + AreaInfo_t *pFree; /* 未使用メモリ領域情報 */ + AreaInfo_t *pInfo; /* 使用中メモリ領域情報 */ + + /* 初期化 */ + ret = CMN_FAILURE; + retMLib = MLIB_FAILURE; + pFree = NULL; + pInfo = NULL; + + /* 引数チェック */ + if ( pAddr == NULL ) { + /* 不正 */ + + return CMN_FAILURE; + } + + /* 該当メモリ領域情報検索 */ + do { + /* 使用中メモリ領域情報取得 */ + pInfo = ( AreaInfo_t * ) + MLibBasicListGetPrevNode( &( gAreaTbl.usedList ), + ( MLibBasicListNode_t * ) pInfo ); + + /* 取得結果判定 */ + if ( pInfo == NULL ) { + /* メモリ領域情報無 */ + + return CMN_FAILURE; + } + + /* 先頭アドレス比較 */ + } while ( pInfo->pAddr != pAddr ); + + /* 使用中メモリ領域リストから削除 */ + retMLib = MLibBasicListRemove( &( gAreaTbl.usedList ), + ( MLibBasicListNode_t * ) pInfo ); + + /* 削除結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return CMN_FAILURE; + } + + while ( true ) { + /* 未使用メモリ領域情報取得 */ + pFree = ( AreaInfo_t * ) + MLibBasicListGetNextNode( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pFree ); + + /* メモリ領域位置関係比較 */ + if ( pFree == NULL ) { + /* メモリ領域情報無 */ + + /* 未使用メモリ領域リストの最後尾に挿入 */ + ret = AreaFreeAfterTail( pInfo ); + + } else if ( ( pInfo->pAddr + pInfo->size ) < pFree->pAddr ) { + /* 未使用メモリ領域より前 */ + + /* 前に挿入 */ + ret = AreaFreeBefore( pFree, pInfo ); + + } else if ( ( pFree->pAddr + pFree->size ) < pInfo->pAddr ) { + /* 未使用メモリ領域より後 */ + + /* 次の未使用メモリ領域 */ + continue; + + } else { + /* 未使用メモリ領域に隣接 */ + + /* 結合 */ + ret = AreaFree( pFree, pInfo ); + } + + break; + } + + return ret; +} + + +/******************************************************************************/ +/** + * @brief メモリ領域管理初期化 + * @details メモリ領域管理テーブルを初期化する。 + */ +/******************************************************************************/ +void MemMngAreaInit( void ) +{ + uint32_t index; /* メモリ領域情報インデックス */ + MLibRet_t retMLib; /* MLib関数戻り値 */ + MLibBasicListNode_t *pEmpty; /* 空メモリ領域情報 */ + + /* 初期化 */ + index = 0; + retMLib = MLIB_FAILURE; + pEmpty = NULL; + + /* 使用中メモリ領域リスト初期化 */ + retMLib = MLibBasicListInit( &( gAreaTbl.usedList ) ); + + /* 初期化結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]カーネルパニック */ + } + + /* 未使用メモリ領域リスト初期化 */ + retMLib = MLibBasicListInit( &( gAreaTbl.freeList ) ); + + /* 初期化結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]カーネルパニック */ + } + + /* 空メモリ領域情報リスト初期化 */ + retMLib = MLibBasicListInit( &( gAreaTbl.emptyList ) ); + + /* 初期化結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]カーネルパニック */ + } + + /* メモリ領域情報初期化 */ + memset( gAreaTbl.areaInfo, 0, sizeof ( gAreaTbl.areaInfo ) ); + + for ( index = 0; index < AREA_INFO_NUM; index++ ) { + /* 空メモリ領域情報参照変数設定 */ + pEmpty = ( MLibBasicListNode_t * ) &( gAreaTbl.areaInfo[ index ] ); + + /* 空メモリ領域情報リスト挿入 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.emptyList ), + pEmpty ); + + /* 挿入結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]カーネルパニック */ + + } + } + + return; +} + + +/******************************************************************************/ +/* ローカル関数定義 */ +/******************************************************************************/ +/******************************************************************************/ +/** + * @brief 指定メモリ領域割当 + * @details 指定した未使用メモリ領域を割り当てる。 + * + * @param[in] *pFree 未使用メモリ領域情報 + * + * @retval NULL 失敗 + * @retval NULL以外 割当メモリ領域の先頭アドレス + */ +/******************************************************************************/ +static void *AreaAlloc( AreaInfo_t *pFree ) +{ + MLibRet_t retMLib; /* MLib関数戻り値 */ + + /* 未使用メモリ領域リストから削除 */ + retMLib = MLibBasicListRemove( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pFree ); + + /* 削除結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return NULL; + } + + /* 使用中メモリ領域リストに追加 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.usedList ), + ( MLibBasicListNode_t * ) pFree ); + + /* 追加結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return NULL; + } + + /* メモリ領域先頭アドレス返却 */ + return pFree->pAddr; +} + + +/******************************************************************************/ +/** + * @brief 指定メモリ領域割当(一部) + * @details 指定した未使用メモリ領域から指定した領域サイズのメモリ領域を割 + * り当てる。 + * + * @param[in] *pFree 未使用メモリ領域情報 + * @param[in] size 割当てサイズ + * + * @retval NULL 失敗 + * @retval NULL以外 割当メモリ領域の先頭アドレス + */ +/******************************************************************************/ +static void *AreaAllocPartially( AreaInfo_t *pFree, + size_t size ) +{ + MLibRet_t retMLib; /* MLib関数戻り値 */ + AreaInfo_t *pEmpty; /* 空メモリ領域情報 */ + + /* 初期化 */ + retMLib = MLIB_FAILURE; + + /* 空メモリ領域情報リストからメモリ領域情報取得 */ + pEmpty = ( AreaInfo_t * ) + MLibBasicListRemoveTail( &( gAreaTbl.emptyList ) ); + + /* 取得結果判定 */ + if ( pEmpty == NULL ) { + /* メモリ領域情報無 */ + + return NULL; + } + + /* 空メモリ領域情報設定 */ + pEmpty->used = AREA_INFO_USED; /* 使用フラグ */ + pEmpty->pAddr = pFree->pAddr; /* 先頭アドレス */ + pEmpty->size = size; /* サイズ */ + + /* 空メモリ領域情報を使用中メモリ領域リストに追加 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.usedList ), + ( MLibBasicListNode_t * ) pEmpty ); + + /* 追加結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return NULL; + } + + /* 未使用メモリ領域情報設定 */ + pFree->pAddr += size; /* 先頭アドレス */ + pFree->size -= size; /* サイズ */ + + /* メモリ領域先頭アドレス返却 */ + return pEmpty->pAddr; +} + + +/******************************************************************************/ +/** + * @brief 指定メモリ領域解放(結合) + * @details 指定した使用中メモリ領域を指定した未使用メモリ領域に結合する。 + * + * @param[in] *pFree 解放先未使用メモリ領域情報 + * @param[in] *pUsed 使用中メモリ領域情報 + * + * @retval CMN_SUCCESS 正常終了 + * @retval CMN_FAILURE 異常終了 + */ +/******************************************************************************/ +static CmnRet_t AreaFree( AreaInfo_t *pFree, + AreaInfo_t *pUsed ) +{ + size_t size; /* 未使用メモリ領域サイズ */ + MLibRet_t retMLib; /* MLib関数戻り値 */ + AreaInfo_t *pNext; /* 未使用メモリ領域の次のメモリ領域情報 */ + + /* 初期化 */ + size = pFree->size; + retMLib = MLIB_FAILURE; + pNext = NULL; + + /* メモリ領域位置関係比較 */ + if ( pUsed->pAddr > pFree->pAddr ) { + /* 使用中メモリ領域が未使用メモリ領域の前 */ + + /* 未使用メモリ領域先頭アドレス設定 */ + pFree->pAddr = pUsed->pAddr; + } + + /* 未使用メモリ領域サイズ設定 */ + pFree->size += pUsed->size; + + /* 使用中メモリ領域情報初期化 */ + memset( pUsed, 0, sizeof ( AreaInfo_t ) ); + + /* 使用中メモリ領域情報を空メモリ領域情報リストの最後尾に挿入 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.emptyList ), + ( MLibBasicListNode_t * ) pUsed ); + + /* 挿入結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]トレース情報 */ + } + + /* 未使用メモリ領域の次のメモリ領域情報取得 */ + pNext = ( AreaInfo_t * ) + MLibBasicListGetNextNode( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pFree ); + + /* 取得結果判定 */ + if ( pNext == NULL ) { + /* メモリ領域情報無 */ + + return CMN_SUCCESS; + } + + /* メモリ領域隣接判定 */ + if ( ( pFree->pAddr + pFree->size ) == pNext->pAddr ) { + /* 隣接する */ + + /* 次メモリ領域情報を未使用メモリ領域リストから削除 */ + retMLib = MLibBasicListRemove( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pNext ); + + /* 削除結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* 未使用メモリ領域サイズ復元 */ + pFree->size = size; + + return CMN_FAILURE; + } + + /* 未使用メモリ領域サイズ設定 */ + pFree->size += pNext->size; + + /* 次メモリ領域情報初期化 */ + memset( pNext, 0, sizeof ( AreaInfo_t ) ); + + /* 次メモリ領域情報を空メモリ領域情報リストの最後尾に挿入 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.emptyList ), + ( MLibBasicListNode_t * ) pUsed ); + + /* 挿入結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + /* [TODO]トレース情報 */ + } + } + + return CMN_SUCCESS; +} + + +/******************************************************************************/ +/** + * @brief 指定メモリ領域解放(最後尾挿入) + * @details 指定した使用中メモリ領域を未使用メモリ領域リストの最後尾に挿入 + * する。 + * + * @param[in] *pUsed 使用中メモリ領域情報 + * + * @retval CMN_SUCCESS 正常終了 + * @retval CMN_FAILURE 異常終了 + */ +/******************************************************************************/ +static CmnRet_t AreaFreeAfterTail( AreaInfo_t *pUsed ) +{ + MLibRet_t retMLib; /* MLib関数戻り値 */ + + /* 最後尾挿入 */ + retMLib = MLibBasicListInsertTail( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pUsed ); + + /* 挿入結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return CMN_FAILURE; + } + + return CMN_SUCCESS; +} + + +/******************************************************************************/ +/** + * @brief 指定メモリ領域解放(前挿入) + * @details 指定した使用中メモリ領域を指定した未使用メモリ領域の前に挿入す + * る。 + * + * @param[in] *pFree 未使用メモリ領域情報 + * @param[in] *pUsed 使用中メモリ領域情報 + * + * @retval CMN_SUCCESS 正常終了 + * @retval CMN_FAILURE 異常終了 + */ +/******************************************************************************/ +static CmnRet_t AreaFreeBefore( AreaInfo_t *pFree, + AreaInfo_t *pUsed ) +{ + MLibRet_t retMLib; /* MLib関数戻り値 */ + + /* 指定した未使用メモリ領域の前に挿入 */ + retMLib = MLibBasicListInsertPrev( &( gAreaTbl.freeList ), + ( MLibBasicListNode_t * ) pFree, + ( MLibBasicListNode_t * ) pUsed ); + + /* 挿入結果判定 */ + if ( retMLib != MLIB_SUCCESS ) { + /* 失敗 */ + + return CMN_FAILURE; + } + + return CMN_SUCCESS; +} + + +/******************************************************************************/ diff --git a/src/kernel/MemMng/MemMngArea.h b/src/kernel/MemMng/MemMngArea.h new file mode 100644 index 0000000..1bf518d --- /dev/null +++ b/src/kernel/MemMng/MemMngArea.h @@ -0,0 +1,16 @@ +/******************************************************************************/ +/* src/kernel/MemMng/MemMngArea.h */ +/* 2017/02/18 */ +/* Copyright (C) 2017 Mochi. */ +/******************************************************************************/ +#ifndef MEMMNG_AREA_H +#define MEMMNG_AREA_H +/******************************************************************************/ +/* グローバル関数プロトタイプ宣言 */ +/******************************************************************************/ +/* メモリ領域管理サブモジュール初期化 */ +extern void MemMngAreaInit( void ); + + +/******************************************************************************/ +#endif diff --git a/src/kernel/MemMng/MemMngInit.c b/src/kernel/MemMng/MemMngInit.c index de7f480..a2f872e 100644 --- a/src/kernel/MemMng/MemMngInit.c +++ b/src/kernel/MemMng/MemMngInit.c @@ -1,7 +1,7 @@ /******************************************************************************/ /* src/kernel/MemMng/MemMngInit.c */ -/* 2016/12/05 */ -/* Copyright (C) 2016 Mochi. */ +/* 2017/02/18 */ +/* Copyright (C) 2016-2017 Mochi. */ /******************************************************************************/ /******************************************************************************/ /* インクルード */ @@ -11,6 +11,7 @@ /* 外部モジュールヘッダ */ /* 内部モジュールヘッダ */ +#include "MemMngArea.h" #include "MemMngGdt.h" @@ -29,6 +30,9 @@ void MemMngInit( void ) /* GDT管理サブモジュール初期化 */ MemMngGdtInit(); + /* メモリ領域管理サブモジュール初期化 */ + MemMngAreaInit(); + return; } diff --git a/src/kernel/include/Cmn.h b/src/kernel/include/Cmn.h new file mode 100644 index 0000000..9e0699c --- /dev/null +++ b/src/kernel/include/Cmn.h @@ -0,0 +1,26 @@ +/******************************************************************************/ +/* src/kernel/include/Cmn.h */ +/* 2017/02/10 */ +/* Copyright (C) 2017 Mochi. */ +/******************************************************************************/ +#ifndef CMN_H +#define CMN_H +/******************************************************************************/ +/* インクルード */ +/******************************************************************************/ +#include + + +/******************************************************************************/ +/* 定義 */ +/******************************************************************************/ +/* 処理結果 */ +#define CMN_SUCCESS ( 0 ) /** 成功 */ +#define CMN_FAILURE ( -1 ) /** 失敗 */ + +/* 処理結果構造体 */ +typedef int32_t CmnRet_t; + + +/******************************************************************************/ +#endif diff --git a/src/kernel/include/MemMng.h b/src/kernel/include/MemMng.h index b47ff4a..ce50c6e 100644 --- a/src/kernel/include/MemMng.h +++ b/src/kernel/include/MemMng.h @@ -1,6 +1,6 @@ /******************************************************************************/ /* src/kernel/include/MemMng.h */ -/* 2017/01/15 */ +/* 2017/02/17 */ /* Copyright (C) 2016-2017 Mochi. */ /******************************************************************************/ #ifndef MEMMNG_H @@ -12,6 +12,9 @@ #include #include +/* 外部モジュールヘッダ */ +#include + /******************************************************************************/ /* 定義 */ @@ -38,10 +41,14 @@ /* グローバル関数宣言 */ /******************************************************************************/ /*--------------*/ -/* MemMngInit.c */ +/* MemMngArea.c */ /*--------------*/ -/* メモリ管理初期化 */ -extern void MemMngInit( void ); +/* メモリ領域割当 */ +extern void *MemMngAreaAlloc( size_t size ); + +/* メモリ領域解放 */ +extern CmnRet_t MemMngAreaFree( void *pAddr ); + /*-------------*/ /* MemMngGdt.c */ @@ -56,5 +63,12 @@ extern uint16_t MemMngGdtAdd( void *pBase, uint8_t opSize ); +/*--------------*/ +/* MemMngInit.c */ +/*--------------*/ +/* メモリ管理初期化 */ +extern void MemMngInit( void ); + + /******************************************************************************/ #endif -- 2.11.0