2009年6月12日 星期五

uc/OSII 上的memory managment

在 ANSI C 中可以用 malloc() 和 free() 兩個函式動態地分配記憶體和釋放記憶體。但是,在嵌入式即時操作系統中,多次這樣做會把原來 很大的一塊連續記憶體區域,逐漸地分割成許多非常小而且彼此又不相鄰的記憶體區域,也就是記憶體破碎。由於這些碎片的大量存在,使得程式到後來連非常小的記憶體也分配不到。 Task Stack malloc() 函式來分配堆疊時,曾經討論過記憶體破碎的問題。另外,由於記憶體管理演算法的原因,malloc() 和 free() 函式執行時間是不確定的。

在 uC/OS-II 中,kernel 把連續的大塊記憶體按分區來管理。每個分區中包含有整數個大小相同的記憶體塊,為了便於記憶體的管理,在 uC/OS-II 中使用記憶體控制塊 (Memory Control Blocks, MCB) 的資料結構來跟蹤每一個記憶體分割區,系統中的每個記憶體分割區都有它自己的 MCB。

沒有留言:

張貼留言