嵌入式操作系统内核原理和开发.docx
《嵌入式操作系统内核原理和开发.docx》由会员分享,可在线阅读,更多相关《嵌入式操作系统内核原理和开发.docx(12页珍藏版)》请在第壹文秘上搜索。
1、嵌入式操作系统内核原理和开发(最快、最优、最差内存安排算法)前面我们说到了基于链表的内存安排算法。但是之前我们也说过,其实内存安排一般有三个原则,最快、最优和最差。最快比较好理解,就是查找到合适的节点就马上安排内存,我们在前面一篇博客采纳的就是这个方法。最优呢,就是查找可以满意当前内存安排的最小节点,这样不会有很大的铺张,但是有可能会产生碎片节点。最终一种就是最差安排算法,说是最差效果未必最差。由于在大的内存安排的时候至少不会很快产生内存碎片,对整个系统的稳定来说有可能是好事。所以这三种方法很难说哪一种好,哪一种不好,需要结合详细的应用场景客观进行分析。不过话说回来,内存碎片是无论如何都避开不
2、了的。首先,为了敏捷对这三种安排算法进行配置,我们定义了宏开关,需要哪个就把那个开关放开。临时默认打开的算法的是最快安排算法。1 ffdefineMAX_SPEED_MALLOC12 ffdefineMIN_SIZE_MALLOC03 #defineMAX_SIZE_MALLOC0由于之前已经争论过最快安排算法,所以这里着重争论的最优安排算法和最差安排算法。又由于两者的差别微小,所以单独分析其中一种算法也行。就拿最优安排算法来说,为了查找到最小的节点,我们需要对整个链表进行遍历,这个还是比较消耗时间的。4 while(pCur)5 (6 if(pCur-size(size+sizeof(MNG
3、_NODE)7 if(NULL=pFindpFind-sizepCur-size)9 10 pFind=pCur;H)12 )1314 pPre=PCUr;15 pCur=pCur-next;16 )查找到PFind这个我们需要的节点之后,还需要从PFreeLiSt中删除该节点。所以,我们需要进一步的推断和分析,17 if(NULL=pFind)18 returnNULL;1920 pPre=find_previous_node_in_list(pFind,pFreeList);21 if(NULL=pPre)22 pFreeList=pFreeList-next;23 else24 pPre
4、-next=pFind-next;2526returnpFind;首先推断pFind前面有没有节点,假如没有表示pFreeList就是pFind,那么pFreeList需要自行向后退缩;当然假如当前的PFind节点是有前节点的,那么只需要把前节点的next指针重新更改一下即可。当然,这里还对原来的查找节点函数作了一下修改,使之更合理更通用。27/*28*function:findpreviousnode29*/3031MNG_NODE*find_previous_node_in_list(MNG_NODE*pNode,MNG_N0DE*pList)3233MNG_NODE*pFind=pLis
5、t;34MNG_NODE*pPre=NULL;3536 while(pFind&pFind!=pNode)37 (38 pPre=pFind;39 pFind=pFind-next;40 )42if(NULL=pFind)43returnNULL;4445returnpPre;46)上面也只是说了个也许,详细的内容可以参见下面的源代码。既可以在VC上编译,也可以在GCC上面编译,都没有问题。当然,假如本地OS没有编译器,可以选择网上在线编译,也是个不错的选择。47/*48*malloc&freeinlinknodealgorithm49*/5051ffinclude52#include5354
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 操作系统 内核 原理 开发