资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
嵌入式实时操作系统嵌入式实时操作系统COSCOS原理原理与实践与实践6 6作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践第6章 内存管理6.1 内存管理数据结构6.1.1内存控制块6.1.2 内存控制块实体6.1.3 空闲内存控制块链表6.1.4 内存分区6.2 内存控制块初始化6.3 创建内存分区6.4内存分区获取6.5内存分区释放6.6查询内存分区的状态6.7内存管理实例习题作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.2内存控制块初始化内存控制块初始化表6.4内存初始化函数OS_MemInit()解析 可见OS_MemInit,对内存控制块MCB进行了初始化,构建了空闲MCB链表。但并未执行创建内存分区及分配内存的操作。作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.3创建内存分区创建内存分区内存分区在操作系统初始化的时候并不存在。在使用一个内存分区之前,必须先定义一个二维数组,但这个二维数组仍未成为内存分区。通过调用函数OSMemCreate,使用一个MCB对其进行管理,才成为一个内存分区。OSMemCreate返回一个指向内存控制块的指针,供内存管理的其他操作函数调用。OSMemCreate有四个参数。第一个参数是addr,就是内存分区的首地址,即从哪里开始创建内存分区,应是作为分区的二维数组的首地址。第二个参数是nblks,表示需要创建的内存分区中内存块的总数。第三个参数是INT32U blksize,表示每一个内存块的大小,第四个参数是指向整数的指针perr,用来返回函数运行过程中的信息。表6.5创建内存分区函数OSMemCreate()解析作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践首先,当操作系统需要创建内存分区时,调用OSMemCreate()函数,并通过参数传递需要建立内存分区的属性,包括:内存分区的首地址,内存分区中内存块的数量,内存分区中内存块的大小,以及返回信息代码的地址。然后,检查判断是否执行函数参数检查,以保证内存分区的创建成功。如果执行函数参数检查,则判断:内存分区地址是否有效,内存分区地址大小是否一致,内存分区是否至少含有两个内存块,每个内存块是否起码可以容纳一个指针。最后,执行创建内存分区的算法,创建一个内存分区,并返回内存控制块的地址,供系统调用。内存分区创建的算法是:将内存分区首地址加内存块大小得到下一个内存块地址,然后再加内存块大小得到下一个内存块地址,如此循环(内存块数量-1)次,直至最后一个内存块创建完成。在其过程中,通过指针建立内存块的链接表,并将最后一个内存控制块内的指针指向空地址。 作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.4内存分区获取内存分区获取创建之后,形成了一个空闲内存块链表,而给链表由内存控制块MCB来管理。现在就可以申请内存分区了,内存分区获取函数是OSMemGet。应用程序需要从已建立的内存分区中申请一个内存块时,可以调用OSMemGet函数。该函数有两个参数,第一个参数为pmem,也就是前节创建内存分区函数所返回的内存控制块的指针。另一个参数为perr,用于返回函数执行的信心。表6.6分配一个内存块OSMemGet()解析1首先进行参数检查,查看QCB指针是否有效。2判断是否有空闲的内存块,如果没有就设置perr为OS_ERR_MEM_NO_FREE_BLKS,然后返回空指针。3从链表中摘下表头,返回取下的内存块的地址。这样就申请到了内存块。 作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.5内存分区释放内存分区释放内存分区的释放,就是将内存块归还给空闲内存块链表,也可以理解为归还给内存分区。内存分区释放函数是OSMemPut。内存分区释放函数是OSMemPut有两个参数,一个是内存控制块MCB的地址,一个是将释放的内存块的地址。OSMemPut返回整数型的操作过程的信息号。表6.7释放一个内存块OSMemPut解析1.首先进行参数检查,查看QCB指针是否有效,内存块指针是否有效。2.检查内存块是不是满的,判断条件是是否空闲的块数大于等于最大块数。如果是满的不能释放。这种情况一定是异常引起的。 3.将释放的块归还给空闲内存块链表,插入到表头然后返回。从本节的OSMemPut和上节OSMemGet,很明显,实现了内存的动态分配,并且一次分配和释放最小是一个内存块,保证了内存中不会存在很多小的碎片。作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.6查询内存分区的状态查询内存分区的状态表6.9 查询内存分区状态函数OSMemQuery()解析作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践6.7内存管理实例内存管理实例内存管理的核心是内存的动态分配和释放。本例程将首先创建一个内存分区,然后向请求内存分区和释放内存分区。 表6.10 内存分区管理例程该例程的流程为:1.创建分区,如果创建失败则给出出错信息,删除本任务。如果创建成功给出成功的提示。2.进入主循环。本任务是一个无限循环结构。每6次循环将require的值取逻辑反,这样6次请求后6次释放。3.根据require的值进行请求或释放,根据返回的结果信息给出提示。4.调用OSMemQuery提取分区信息,打印出来。继续循环。作者卢有亮作者卢有亮图书图书PPT和全部代码下载和全部代码下载http:/www.broadview.com.cn/15441嵌入式实时操作系统原理与实践嵌入式实时操作系统原理与实践习题习题1.论述论述C/OS-II的内存管理机制。的内存管理机制。2.请说明内存分区的内存控制块请说明内存分区的内存控制块MCB的关系。的关系。3.内存管理使用循环队列管理内存块,请说明使用循环队列管理内存块的优内存管理使用循环队列管理内存块,请说明使用循环队列管理内存块的优点。点。4.MCB空闲链表是在空闲链表是在C/OS-II的什么函数中生成的,画出该函数的流程。的什么函数中生成的,画出该函数的流程。5.OSMemCreate创建内存分区,请问创建内存分区的过程中有没有生成新创建内存分区,请问创建内存分区的过程中有没有生成新的内存空间?为什么?的内存空间?为什么?画出创建内存分区的流程。画出创建内存分区的流程。6.如何获得一个内存分区,在什么情况下不能获得内存分区,如何判断?如何获得一个内存分区,在什么情况下不能获得内存分区,如何判断?7.为什么要释放内存分区?如何释放一个内存分区,在什么情况下不能释放为什么要释放内存分区?如何释放一个内存分区,在什么情况下不能释放内存分区,如何判断?内存分区,如何判断?8.编写任务,任务编写任务,任务A实现创建两个有任务分区实现创建两个有任务分区P1和和P2,创建后向任务创建后向任务B发消息,发消息,任务任务B接收到消息后,开始向分区接收到消息后,开始向分区P1中写满中写满1,向分区向分区P2中写满中写满2,然后发消,然后发消息给任务息给任务A,任务,任务A接收到消息后将两个分区的内容打印出来。请上机实践。接收到消息后将两个分区的内容打印出来。请上机实践。 结束语结束语谢谢大家聆听!谢谢大家聆听!17
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号