嵌入式操作系统内核原理和开发(等值block内存池设计).doc

嵌入式操作系统内核原理和开发(等值block内存池设计).doc

ID:61499527

大小:48.50 KB

页数:7页

时间:2021-02-07

嵌入式操作系统内核原理和开发(等值block内存池设计).doc_第1页
嵌入式操作系统内核原理和开发(等值block内存池设计).doc_第2页
嵌入式操作系统内核原理和开发(等值block内存池设计).doc_第3页
嵌入式操作系统内核原理和开发(等值block内存池设计).doc_第4页
嵌入式操作系统内核原理和开发(等值block内存池设计).doc_第5页
资源描述:

《嵌入式操作系统内核原理和开发(等值block内存池设计).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式操作系统内核原理和开发(等值block内存池设计)内存池设计是嵌入式系统的一个重要环节,之前我们也讨论过相关的内容。但是,看了rawos的代码之后,我觉得rawos的内存池设计更有特点。整个内存池的设计非常健壮,不但考虑了字节对齐的问题,而且还引入了等待调度机制,这是我所没有想到的。所以,在此我很愿意和大家分享这份优秀的代码。闲话不多说,我们看看rawos的mempool数据结构是什么样的,[cpp]viewplaincopy1typedefstructMEM_POOL2{3RAW_COMMON_BLOCK_OBJECTcommon_block_obj;45/*Def

2、inethenumberofavailablememoryblocksinthepool.*/6RAW_U32raw_block_pool_available;78/*Definetheheadpointeroftheavailableblockpool.*/9RAW_U8*raw_block_pool_available_list;1011}MEM_POOL;12内存池的结构非常简单,主要包括了通用阻塞结构、block数值,block起始指针。内存池下面可以包括若干个block,每个block的大小都是相等的,同时block之间是通过链表串联在一起的,这个我们看了后面的代

3、码就明白了。mempool的处理函数不多,就三个,初始化、申请、释放函数。[cpp]viewplaincopy13RAW_U16raw_block_pool_create(MEM_POOL*pool_ptr,RAW_U8*name_ptr,RAW_U32block_size,RAW_VOID*pool_start,RAW_U32pool_size)14{1516//MEM_POOL*tail_ptr;/*Workingblockpoolpointer*/17RAW_U32blocks;/*Numberofblocksinpool*/18RAW_U8*block_ptr;/*

4、Workingblockpointer*/19RAW_U8*next_block_ptr;/*Nextblockpointer*/20RAW_U8*end_of_pool;/*Endofpoolarea*/21RAW_U8block_align_mask;2223#if(RAW_BLOCK_FUNCTION_CHECK>0)24/*Checkforinvalidpoolsize.*/251if(pool_size<(block_size+block_size)){23returnRAW_BLOCK_SIZE_ERROR;4}56if(pool_ptr==0){78retur

5、nRAW_NULL_OBJECT;9}1011if(pool_start==0){1213returnRAW_NULL_POINTER;14}1516#endif1718block_align_mask=sizeof(void*)-1u;1920if(((RAW_U32)pool_start&block_align_mask)){2122returnRAW_INVALID_ALIGN;2324}2526if((pool_size&block_align_mask)){2728returnRAW_INVALID_ALIGN;29}3031if((block_size&bloc

6、k_align_mask)){3233returnRAW_INVALID_ALIGN;34}3536/*Initthelist*/37list_init(&pool_ptr->common_block_obj.block_list);3839/*Setupthebasicblockpoolfields.*/40pool_ptr->common_block_obj.name=name_ptr;41pool_ptr->common_block_obj.block_way=0;4243/*Calculatetheendofthepool'smemoryarea.*/44end_o

7、f_pool=(RAW_U8*)pool_start+pool_size;12/*Walkthroughthepoolarea,settinguptheavailableblocklist.*/3blocks=0;4block_ptr=(RAW_U8*)pool_start;5next_block_ptr=block_ptr+block_size;67while(next_block_ptr<=end_of_pool){89blocks++;1011if(next_block_ptr==end_of_pool){1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。