uc/os-II的内存改进与实现TLSF算法的详解,移植实现(一) - 一只不安分男人的专栏 - CSDN博客
uc/os-II的内存改进与实现TLSF算法的详解,移植实现(一)
uc/os系统学习
经过了一周的时间,终于成功将TLSF算法移植到uc/os-II上,并移植成功。这一周,茶不思饭不想,女朋友都要分手了。这一周对uc/os系统有了深刻的了解,同时也对经典的TLSF算法的结构有个更加清晰的认识吧。好,正题来了。看我娓娓道来哈!
1.配置环境及软件要求(下载地址在文章最后):
& & vs2013,us/os-ii(pc上可运行),TLSF算法(有中文注释)。ps:我都提供下载地址哈,大家不要担心。
2.先来看下RTOS的DSA概览。(转载网上的啦,不过还是值得了解的)
按照记录以及合并空闲内存块的方法,可将RTOS的DSA分成顺序搜索、索引搜索、分类搜索、位图搜索以及伙伴算法等。这些DSA算法都具有分配真实内存,立即合并空闲内存等特点。
2.1 &顺序搜索算法&
顺序搜索算法采用单向或双向链表维护空闲内存。该算法的时间花费与空闲内存链表长度成正比,时间花费是有界的,但会随着空闲内存块增多而增加,在嵌入式实时系统中并不宜使用。&&&&
& & &2.2 &索引搜索算法&
& & & &索引搜索算法用一种比链表复杂的数据结构来记录空闲内存。常见的如排序二叉树,树中每一个节点代表某一个尺寸的空闲内存,存储该尺寸的空闲内存链表指针。索引搜索算法的数据结构和分配、合并内存较为复杂。
& & 2.3 &分类搜索算法&
& & & &分类算法把所有空闲内存按其尺寸范围划归不同的类,同一类内的内存块链接成一个空闲自由内存链表。所有的空闲内存头指针统一由另一个数组链表维护,每个空闲内存头指针对应该数组一个元素。值得注意的是,属同一类的自由内存,并不要求其物理上是相邻的。
& & & &分类搜索算法中的链表可以是按空闲内存尺寸排序的,也可以是不排序的。分类算法较为复杂,但不必搜索即可查找合适空闲内存,时间花费不随空闲内存的数量而变化,适合于嵌入式系统采用。
& &2.4 &位图搜索算法&
位图搜索算法用一个位图来查找空闲内存,该算法查找空闲内存所需的信息全部存储在一小块内存中,查找响应速度很快。
& & & 3.uc/os-ii的DSA不足之处&
& & &UC/OS-II中的内存管理模块把动态管理的内存分成多个内存区,每一个内存区又分成一定数量相同尺寸的内存块。具体的UC/OS-II中,DSA由OS_MEM.c实现,总共只包含5个函数OSMenInit,,OSMemCreate,OSMemGet,OSMemPut 与OSMemQuery,约100行代码,十分精炼。正是由于其精炼,UC/OS-II的DSA提供的功能十分有限,存在以下不足:&
1) 动态管理的内存块尺寸须在编译时指定,运行时不能更改,限制了系统以后扩展应用程序的灵活性,也造成内存浪费。&
2) 由于同一分区只能提供唯一尺寸的内存块,而应用中一般需使用到不同尺寸的内存块。为了减少资源浪费,此时则需建立两个以上的内存区,加大了维护开销。&
3) 不可能提供确定不同内存区的内存块之间尺寸差距的方案,使内存的浪费不可避免。这是由于系统中可能的应用千变万化,而他们申请的内存块尺寸也不尽相同。&
4) UC/OS-II的DSA可以归类为2.3中的分类搜索算法,但其并未提供如何搜索到合适分类的方法,也未提供向某一分类申请内存失败后如何向下一分类申请内存的方法,而需要程序员自己提供,加重了程序员负担的同时更是降低了程序的可靠性与稳定性。
4.TLSF 基本原理及结构
& & & & TLSF 是一种二级隔离拟合算法,使用位图与链表相结合的方式对内存池进行管理,利用隔离拟合的方法来实现TLSF。我们采用空链表数组并将数组设计为二级数组,第一级数组按照2 的幂(16,32,64,128 等)将空内存块分级,分级的数目称为FLI(First Level Index)。第二级数组将第一级的结果进一步线性划分,用户可自行配置分级的数目SLI(Second Level Index)。每一个链表数组都有一个相关联的位图来记录哪一些列表为空,哪一个列表包含空内存块。TLSF数据结构代码:
typedef struct TLSF_struct {
/* the TLSF's structure signature */
u32_t tlsf_
#if TLSF_USE_LOCKS
TLSF_MLOCK_T
#if TLSF_STATISTIC
/* These can not be calculated outside tlsf because we
* do not know the sizes when freeing/reallocing memory. */
size_t used_
size_t max_
/* A linked list holding all the existing areas */
area_info_t *area_
/* the first-level bitmap */
/* This array should have a size of REAL_FLI bits */
/* the second-level bitmap */
u32_t sl_bitmap[REAL_FLI];
bhdr_t *matrix[REAL_FLI][MAX_SLI];
} tlsf_t;TLSF的数据结构如图:
未完待续!!!
我的热门文章 上传我的文档
下载
收藏
该文档贡献者很忙,什么也没留下。
下载此文档
正在努力加载中...
TLSF算法在嵌入式系统中的研究与实现
下载积分:100
内容提示:TLSF算法在嵌入式系统中的研究与实现
文档格式:DOC|
浏览次数:77|
上传日期: 21:57:10|
文档星级:
全文阅读已结束,如果下载本文需要使用
100 积分
下载此文档
该用户还上传了这些文档
TLSF算法在嵌入式系统中的研究与实现
关注微信公众号试想想如果你有个tlsfgame试想想如果你有个朋友,今天在这个公司,明天在那个公司,今天在这个省定居生活,明天搬到另个省定居生活甚至到国外,你能接受这样的tlsfgame朋友吗?搜索引擎对网站样挑剔!我的个网站因为度国内域名备案审批直不能下来,就临时购买了个美国的主机空间,等到icp备案审批通过后网站搬家到国内,突然间各大搜索引擎的收录信息全没了,心痛啊!因此,般情况下你的网站定居在个服务器上就不要随便搬家了,如果因某些原因非要搬家,就定要做好善后工作,让原来的管家告诉搜索引擎你的网站的新住址等联系信息,否则搜索引擎用原来的联系方式找不着你的网站时就不高兴啦!原则:规范原则。4 博百优首页无用的tlsfgame导出链接太多,建议大家经常分析自己的首页友情链接,给大家推荐种友情链接检查工具:linkhelper,经常分析自己的博百优首页链接。相信我在比赛剩余的这段时间里,把我上面的4点做好的话,我的博百优排名定会提升很多!地址:博百优 笔名:e 真名:武龙杰地址:zzyyshiwzyh20第届站长seo大赛 博百优 交流与学习我的博百优网站排名下降分析华人喷码网建站于2005年底,目前pr5,百度和google收录情况都相当的不错,针对这么个老站做seo那是相当的容易的。友链的tlsfgame分析:检查了下本网站的每个友情链接,在百度里的收录情况基本良好,但发现有个网站无法正常打开,原因是该网站的空间在作调整,因此我马上做出立即调整,先将这个友链删除,等友链空间恢复正常后再重新添加。
共获得金币 0
使用(可批量传图、插入视频等)
&&Ctrl + Enter 快速发布