修订记录
版本 |
作者 |
修订记录 |
日期 |
V1.0 |
姜勇 |
生成初稿 |
2014.09.26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
引言
内存管理在实时系统中需要具备分配、回收速度快,管理内存容量跨度大(小到几KB,大到几十MB),碎片少等特性。FANS-RT 依据以上特性设计实现内存管理模块。
1 目的
本文本主要描述FANS-RT实时系统内存管理设计方案,从方案上为内存管理性能、效率、安全方面提供实现方法。
2 预期读者和阅读建议
本文档面向多种读者对象:
软件工程师:以本文档描述为依据编写程序实现功能。
测试工程师:根据本文档编写测试用例,并对软件产品进行功能性测试和非功能性测试。
其他人员:所有希望了解fans-rt内存管理的人员。
3 定义和名词解释
英文:Memory manager 中文:内存管理器
解释:在操作系统中负责内存分配和回收的功能部件称为内存管理器(也可称为堆管理器)。Fans-RT的内存管理器包括页管理器和行管理器。
英文:Performance 中文:性能
解释:指内存管理器连续分配从1~1024单位内存后再释放这些内存所消耗的总时间。
英文:Efficiency 中文:效率
解释:指内存管理器连续分配从1~1024单位内存后所占用的内存空间与1~1024单位内存空间总和的比例。
英文:In-fighting 中文:内耗
解释:指内存管理器在内存分配、释放等内存管理过程中,由于管理需要而产生不能被应用程序直接访问的空间的一种现象。
英文:Available region 中文:可用域
解释:指内存芯片或CPU/MCU片上内存在CPU寻址空间内形成的连续内存区域。域的大小由芯片容量决定,域的起始(物理)地址由硬件连线决定。CPU/MPU内部的内存称为片上内存,内存芯片称为片外内存。
英文:Unavailable region 中文:不可用域
解释:指CPU地址空间内并不存在实际内存单元的区域,CPU的总线宽度能够满足访问这些地址域的需求,但程序访问这些域可能产生无法预料的后果。
英文:Page 中文:页
解释:内存管理中的最大分配单位,页的长度是静态指定的,页所包含的字节数必须为2的N次方(通常可以指定为1K、2K、4K、8K、16K等等),每个页的首字节地址必须以页长度对齐。系统中的每一个可用域在初始化之后被划分为若干个页,这些初始化之后的可用域称为系统堆,系统堆由内核统一管理,负责在系统堆上对页进行分配和回收的功能部件称为页管理器。
英文:Segment 中文:段
解释:页管理器在内存分配活动中所产生的多个连续页面组成的内存空间称为段,段中所有内存地址都是连续的,段的长度总是页的整数倍。
英文:Page Table 中文:页表
解释:每一个页管理器使用一个线性表对各自的系统堆进行管理,这个线性表称为页表,堆中的每个页面与页表中的每个元素(页表项)一一对应。系统中的所有段由页表项形成的链表进行管理,每一段的首页表项和尾页表项有意义,除首尾页之外的其他表项无意义。对于包含多个页的段,首页表项包含当前节所在链表的上一个节的尾页ID和首页到当前节尾页的距离(尾页和首页ID的差值)以及4个标志位(首尾页标志位、独立页标志位、保留位),尾页表项包含当前段所在链表上的下一个段的首页ID和尾页到当前段首页的距离以及4个标志位(首尾页标志位、独立页标志位、保留位)。对于只有一个页的段,首页即是尾页,表项中不包含首页到尾页的距离,只有链表中上一段的尾页ID和下一段的首页ID。
英文:Heap 中文:堆
解释:堆是用于为应用程序分配较小内存的一个连续内存空间的集合,堆是由应用程序创建,应用程序初始化时从系统全局内存中分配若干个页形成一个堆,并将堆中的内存划分为若干个块(Block),应用程序在申请小块内存时从堆中进行分配。
英文:Block 中文:块
解释:内存管理中的最小分配单位,块的长度是可以动态指定(创建任务堆时指定),块所包含的字节数必须是2的N次方(通常可以指定为8字节、16字节、32字节等等),每个块的首地址必须是块长度的整数倍,一个页内包含若干个块。系统启动过程中从系统堆中分配出一段(若干个页)作为用户堆共享给所有任务,普通任务申请内存时从用户堆中进块分配,分配的内存大小为用户请求大小所覆盖的最小块数,系统中只提供唯一一个全局共享的用户堆给所有任务,如果系统提供的用户堆不能满足分配需求,应由内存使用量较大的任务自行通过系统API接口创建新堆。负责从用户堆中为应用(任务)分配和回收块的功能部件称为堆管理器。
英文:Line 中文:行
解释:堆管理器在内存分配活动中所产生的多个连续行组成的内存空间称为行,行中所有内存地址都是连续的,行的长度总是块的整数倍。
英文:Bound 中文:边界
解释:边界分为左边界和右边界,左边界是指一段(行)中编号最小的内存页(块),右边界是指一段(节)中编号最大的内存页(行)。处于边界上的页称为边界页,处于边界上的行成为边界行。左边界页即上文中提到的首页,右边界页即上文提到的尾页。
英文:Internal fragmentation 中文:内部碎片
解释:内部碎片就是已经被分配出去却不能被利用的内存空间;内部碎片是处于行或页内部的存储块。占有这些行或页的应用并不使用这个存储块。而在应用占有这块存储块时,系统无法利用它。直到应用释放它,或应用结束时,系统才有可能利用这个存储块。
英文:External fragmentation 中文:外部碎片
解释:外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的应用的内存空闲空间。外部碎片是出于任何已分配行或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续,使得系统无法满足当前申请。
4 参考资料
<奔腾II/III处理器系统结构> 电子工业出版社 张昆藏 编著
<Intel 微处理器> 机械工业出版社 Barry.B.Brey 著
<Cortex-M3权威指南> Joseph Yiu 著 宋岩 译
<Linux内核修炼之道> 人民邮电出版社 任桥伟 编著
<数据结构> 清华大学出版 严蔚敏吴伟民 编著
<Cortex-M3技术参考手册>
<RT-Thread源代码>
<Linux 内核源代码>