内核实验五(μCOS-II的内存管理)
- 格式:ppt
- 大小:341.50 KB
- 文档页数:13
实验五ucOS II内存管理及显示驱动实验一、实验目的●回顾uC/OS II 在Cortex-M3(LM3S9B2芯片)平台上的移植,以及RS232串口、TFT显示等驱动程序的加载。
●回顾µC/OS-II任务管理的基本函数调用,任务堆栈、任务控制块、任务就绪表的结构和作用。
●掌握操作系统存储管理方法,以及在uC/OS II 中采用的存储光管理方法。
●掌握uC/OS II中和存储管理相关的基本函数,实现原理以及应用方法。
●应用µC/OS-II中的存储管理机制处理简单的实际问题。
二、实验环境与设备1、实验独立进行,每位学生上交一份实验报告及其相应的程序。
2、安装Windows操作系统(Windows Xp)的计算机,并且已经安装VC 6.0编程调试软件。
3、安装Keil for ARM 仿真调试软件,JLink软件,超级终端或者串口精灵等辅助调试工具。
4、Cortex-M3(LM3S9B92内核)评估板,串口线,USB线,电源等。
三、预习要求1. 基础内容在ANSI C 中是使用malloc 和free 两个函数来动态分配和释放内存。
例如在Linux 系统中就是这样。
但在嵌入式实时系统中,多次这样的操作会导致内存碎片,因为嵌入式系统尤其是uCOS是实地址模式,这种模式在分配任务堆栈时需要整块连续的空间,否则任务无法正确运行。
且由于内存管理算法的原因,malloc 和free的执行时间也是不确定。
这点是实时内核最大的矛盾。
基于以上的原因uC/OS‐II中把连续的大块内存按分区管理。
每个分区中包含整数个大小相同的内存块,但不同分区之间的内存快大小可以不同。
用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。
释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。
同时uCOS‐II 根据以上的处理封装了适合于自己的动态内存分配函数OSMemGet()和OSMemPut(),但是使用这两个函数动态分配内存前需要先创建内存空间即内存分块。
实验1《任务的创建、删除、挂起、恢复》实验学时: 2 实验地点:二综x203 实验日期:2013/12/13一、实验目的1.实验环境的建立2.任务的接口函数的应用二、实验内容1.设计一个只有一个任务Task1,当程序运行后任务的工作就是每秒在显示器上显示一个字符“M”。
2.在任务Task1中在创建一个任务Task2 。
当程序运行后,任务Task1的工作在显示器上显示一个字符“M”;Task2 则是在显示器上显示字符“Y”。
3. 要求任务Task2运行20次后,挂起任务Task1;任务Task2运行40次后,恢复任务Task1。
4. 当任务Task1运行5次时,用函数OSSchedLock()对调度器进行加锁;而当任务Task1运行到第10次时,再用函数OSSchedUnlock()对调度器进行解锁,并运行该程序。
5. 使任务Task1能删除任务Task2。
三、实验方法包括实验方法、原理、技术、方案等。
四、实验步骤1.将BC45文件夹拷贝到C分区根目录下。
2.将software文件夹拷贝到任意分区根目录下。
3. 分别完成实验1、2、3、4、5五、实验结果1. DOS窗口每秒显示一个字符“M”。
每行显示10个“M”字符,行与行的间隔是一行。
按ESC键程序退出2. DOS窗口交替显示字符"M"和“Y”,每隔一秒显示一次。
每行显示10个字符,行与行之间的间隔是一行。
按ESC键程序退出3.DOS窗口开始交替显示字符"M"和“Y”,显示20次以后,Task1挂起,只显示“Y”,当Task2运行40次以后,Task1恢复,然后开始Task1,Task2交替运行。
4.DOS窗口开始交题显示字符"M"和“Y”,显示5次以后,Task1将任务调度器上锁,此时只有“M”打印,当Task1运行10次后,Task1,Task2开始交替运行。
5.DOS窗口开始交替显示字符“M”和“Y”,显示10次后,只显示“Y”六、实验结论对实验数据和结果进行分析描述,给出实验取得的成果和结论。
ucore操作系统学习(⼆)ucorelab2物理内存管理分析⼀、lab2物理内存管理介绍 操作系统的⼀个主要职责是管理硬件资源,并向应⽤程序提供具有良好抽象的接⼝来使⽤这些资源。
⽽内存作为重要的计算机硬件资源,也必然需要被操作系统统⼀的管理。
最初没有操作系统的情况下,不同的程序通常直接编写物理地址相关的指令。
在多道并发程序的运⾏环境下,这会造成不同程序间由于物理地址的访问冲突,造成数据的相互覆盖,进⽽出错、崩溃。
现代的操作系统在管理内存时,希望达到两个基本⽬标:地址保护和地址独⽴。
地址保护指的是⼀个程序不能随意的访问另⼀个程序的空间,⽽地址独⽴指的是程序指令给出的内存寻址命令是与最终的物理地址⽆关的。
在实现这两个⽬标后,便能够为多道并发程序运⾏时的物理内存访问的隔离提供⽀持。
每个程序在编译、链接后产⽣的最终机器代码都可以使⽤完整的地址空间(虚拟地址),⽽不需要考虑其它的程序的存在。
ucore通过两个连续的实验迭代,lab2和lab3分别实现了物理内存管理和虚拟内存管理(利⽤磁盘缓存⾮⼯作集内存,扩展逻辑上的内存空间)。
ucore的每个实验都是建⽴在前⼀个实验迭代的基础上的,要想更好的理解lab2,最好先理解之前lab1中的内容()。
lab2在lab1平坦模型段机制的基础上,开启了80386的分页机制,并建⽴了内核页表;同时通过硬件中断探测出了当前内存硬件的布局,并以此为依据根据可⽤的内存建⽴了⼀个物理内存管理框架,通过指定某种分配算法,负责处理所有的物理内存页分配与释放的请求。
lab2的代码结构和执⾏流程与lab1差别不⼤,其主要新增了以下功能: 1. bootmain.S中的物理内存探测 2. 在新增的entry.S内核⼊⼝程序中开启了80386页机制 3. kern_init内核总控函数中通过pmm_init函数进⾏整个物理内存管理器的构建初始化⼆、lab2实验细节分析2.1 物理内存布局探测 为了进⾏物理内存的管理,操作系统必须先探测出当前硬件环境下内存的布局,了解具体哪些物理内存空间是可⽤的。
摘要:分析了μC/OS-II实时操作系统在内存管理上存在的不足,提出了改进方法,通过一个具体实例描述了该方法的实现。
关键词:实时操作系统内存管理微处理器链接器μC/OS-II是一种开放源码的实时操作系统,具有抢先式、多任务的特点,已被应用到众多的微处理器上。
虽然该内核功能较多,但还是有不甚完善的地方。
笔者在分析使用中发现,内核在任务管理(包括任务调度、任务间的通信与同步)和中断管理上是比较完善的,具有可以接受的稳定性和可靠性;但在内存管理上显得过于简单,内存分区的建立方式有不合理之处。
1 内存管理不足之处的分析在分析许多μC/OS-II的应用实例中发现,任务栈空间和内存分区的创建采用了定义全局数组的方法,即定义一维或二维的全局数组,在创建任务或内存分区时,将数组名作为内存地址指针传递给生成函数。
这样实现起来固然简单,但是不够灵活有效。
编译器会将全局数组作为未初始化的全局变量,放到应用程序映像的数据段。
数组大小是固定的,生成映像后不可能在使用中动态地改变。
对于任务栈空间来说,数组定义大了会造成内存浪费;定义小于了任务栈溢出,会造成系统崩溃。
对于内存分区,在不知道系统初始化后给用户留下了多少自由内存空间的情况下,很难定义内存分区所用数组的大小。
总之利用全局数组来分配内存空间是很不合理的。
另外,现在的μC/OS-II只支持固定大小的内存分区,容易造成内存浪费。
μC/OS-II将来应该被改进以支持可变大小的内存分区。
为了实现这一功能,系统初始化后能清楚地掌握自由内存空间的情况是很重要的。
2 解决问题的方法为了能清楚掌握自由内存空间的情况,避免使用全局数组分配内存空间,关键是要知道整个应用程序在编译、链接后代码段和数据段的大小,在目标板内存中是如何定位的,以及目标板内存大小。
对于最后一条,系统编程人员当然是清楚的,第一条编译器会给出,而如何定位是由编程人员根据具体应用环境在系统初始化确定的。
因此,系统初始化时,如果能正确安排代码段和数据段的位置,就能清楚地知道用户可以自由使用的内存空间起始地址。
μC/OS-II通信机制之内核分析摘要:本文主要着重对μC/OS-III通信机制的内核分析,研究μC/OS-II内核通信机制的实现方式及实现的技巧,同时分析其中不足之处。
1.引言μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。
它被广泛应用于微处理器、微控制器和数字信号处理器。
uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。
没有提供输入输出管理,文件系统,网络等额外的服务。
但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。
μC/OS-II这款操作系统内核简单易学,通过对其源代码的分析,可以加深我们对操作系统内核的理解,为学习linux等大型操作系统打下基础。
2.操作系统中任务间的通信机制内核中多个任务之间不可避免的存在相互协同的关系,来完成一定的内核功能。
这种协同最直观的就是任务间相互通信。
包括VxWorks 等所有的嵌入式操作系统一般都会提供许多任务间通信的方法,通常包括:(1)共享内存,数据的简单共享。
(2)信号量,基本的互斥和同步。
(3)消息队列和管道,同一CPU 内多任务间消息传递。
(4)Socket 和远程调用,任务间透明的网络通信。
(5)Signals,用于异常处理。
在μC/OS-II中设计了五种通讯机制,或者说是同步机制,分别是信号量(semaphore),互斥体(mutual exclusion semaphore),事件组(event flag),邮箱(message box)和队列(queue)。
3. uC/OS-II中通信机制实现的方式分析在uC/OS-II中是如何通信机制呢?这几种通信机制有什么关系?或者说有什么共同点有什么不同点?在实现上有哪些步骤是相同的?下面将就这几个问题进行分析论述。
我们知道通信机制是发生在任务之间的,换句话说任务与通信机制存在着关联。