方彦军 第4章 嵌入式操作系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1嵌入式系统原理与设计第四章嵌入式操作系统2本章简介本章从操作系统的基本概念出发,讲解了操作系统中进程、任务、内核、调度、通信、同步等概念及嵌入式实时操作系统相应特点。针对当前实际应用情况,详细讲解了最为流行,应用最为广泛的几款嵌入式实时操作系统的结构、特点及其移植方法。其中包括免费型的µC/OS-Ⅱ,µCLinux,以及商用型的WinCE。3本章提要123操作系统的基本概念µC/OS-Ⅱ操作系统µCLinux操作系统4WinCE操作系统44.1操作系统的基本概念1.操作系统的定义操作系统OS(OperationSystem)是一组计算机程序的集合,用来有效地控制和管理计算机的硬件和软件资源,即合理地对资源进行调度,并为用户提供方便的应用接口。它为应用支持软件提供运行环境,即对程序开发者提供功能强、使用方便的开发环境。2.操作系统的分类顺序执行系统分时操作系统实时操作系统按程序运行调度方法分54.1.1操作系统的结构和功能实时内核网络组件文件系统2.嵌入式操作系统功能(1)处理器管理:进程控制、进程同步、进程通信和进程调度等。(2)存储器管理:内存分配、内存保护、地址映射、内存扩充等。(3)设备管理:缓冲管理、设备分配、设备处理、形成虚拟逻辑设备等。(4)文件管理:对文件存储空间的管理、目录管理、文件的读/写管理以及文件的共享与保护等。(5)用户接口:将文字、图形和图像集成在一起,用容易识别的图标将系统的各种功能、应用程序和文件直观地表示。1.嵌入式操作系统结构图形用户接口64.1.1操作系统的结构和功能图4.1嵌入式实时操作系统的体系结构应用程序接口(API)基本模块内存管理文件管理任务调度内核扩展模块网络模块图形用户接口数据库接口驱动程序、硬件抽象层、板级支持包OS层中间层应用程序应用程序应用层硬件(Hardware)74.1.2多进程和多线程操作系统核心(Kernel)进程线程线程进程图4.2进程与线程的关系1、进程:可以简单地认为是一个程序的唯一执行。2、线程:一个进程的常用形式。线程在CPU的寄存器中有各自不同的值集合,但是共存于一个主存储空间中。84.1.3任务等待或挂起休眠就绪运行中断挂起等待消息收到消息挂起时间到中断中断结束任务调度任务被占先创建任务删除任务图4.3任务状态转换图•休眠态(Dormant):指任务驻留在内存空间中,并未被内核所调度。•就绪态(Ready):指任务已经准备好,可以运行,等待调度。•运行态(Running):指任务获得了CPU的控制权,正在运行中。•挂起态(Pending):也叫等待态(Waiting),指任务等待事件发生。•被中断态(Interrupt):指发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂时不能运行,而进入了被中断状态。94.1.4任务切换1、任务切换(ContextSwitch):指CPU寄存器内容切换。•入栈:内核将这些内容保存在该任务的当前状态保存区,也就是该任务自己的栈区之中。•出栈:入栈工作完成后,把要运行任务的当前状态从该任务的栈区中装入CPU寄存器。2、任务切换特点:增加了应用程序的额外负荷,CPU的内部寄存器越多,额外负荷就越重。任务切换所需要的时间取决于CPU有多少寄存器要入栈。104.1.5内核•内核:为每个任务分配CPU空间,并且负责任务之间的通信。内核提供的基本服务是任务切换。使用实时内核可以大大简化应用系统的设计,原因是实时内核允许将应用分成若干个任务,并由实时内核来管理。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块占用内存是是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。114.1.6信号量•信号量:用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。信号量可以让一定数量的任务同时访问共享资源。用于解决互斥问题的互斥信号量用于解决同步问题的二值信号量用于解决资源计数问题的计数信号量按用途分类124.1.7任务调度•调度(Dispatcher):是内核的主要职责之一,决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。何时让高优先级任务掌握CPU的使用权,需要依据内核类型,包括非占先式内核和占先式内核两种情况。1、非占式内核:允许每个任务运行,直到该任务自愿放弃CPU控制权。中断可以打断运行着的任务,中断完成后将CPU控制权还给被中断任务。商业软件几乎没有非占先式内核。2、占先式内核:让就绪态的高优先级任务先运行,中断服务程序可以抢占CPU,到中断服务完成时,让优先级最高的任务运行。绝大多数商业上销售的实时内核部是占先式内核。134.1.7任务调度•非占式内核任务运行情况:(1)中断来了,如果此时中断开着,CPU由中断向量(2)进入中断服务子程序,并做事件处理(3),使更高级任务进入就绪态。中断服务完成后,返回指令(4),使CPU回到原任务,接着执行该任务代码(5)直到完成,调用内核服务函数释放CPU控制权,将控制权交给优先级更高的并已进入就绪态的任务(6),这个优先级更高的任务才开始处理中断服务标识的事件(7)。(2)(4)ISR(3)(1)(5)(6)低优先级任务中断服务程序使高优先级任务就绪高优先级任务时间(7)低优先级服务释放CPU使用权图4.4非占式内核运行图144.1.7任务调度•占先式内核任务运行情况:当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就破剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。中断服务子程序低优先级任务中断服务程序使高优先级任务就绪高优先级任务时间图4.5占先式内核运行图154.1.8任务间的通信任务间的通信有两个途径:共享数据结构和消息机制。1.共享数据结构:共享数据结构的类型可以是全局变量、指针、缓冲区等。实现对共享数据结构操作的互斥常常采用以下方法:开/关中断、禁止任务切换以及信号量机制等。2.消息机制:任务可以通过内核提供的系统服务向另一个任务发送消息。消息邮箱消息队列消息机制164.1.8任务间的通信任务任务使任务挂起发出信号邮箱10任务使任务挂起发出信号消息队列中断服务子程序100中断图4.6消息邮箱图4.7消息队列174.1.9任务间的同步•任务间的同步:指异步环境下的一组并发执行任务因各自的执行结果互为对方的执行条件,因而任务之间需要互发信号,以使各任务按一定的速度执行。ISR任务POSTPEND任务任务POSTPEND任务任务POSTPOSTPENDPEND图4.8单向同步图4.9双向同步184.2µC/OS-Ⅱ•μC/OS-II(Micro-ControllerOperatingSystem-II,即微控制器操作系统版本II)是一种免费公开源代码,结构小巧,具有可剥夺实时内核的实时操作系统。•μC/OS-II的特点:(1)公开源代码(2)可移植性(Portable)(3)可固化(ROMable)(4)可裁剪(Scalable)(5)占先式(Preemptive)(6)多任务(7)可确定性(8)任务栈(9)系统服务(10)中断管理(11)稳定性与可靠性194.2.1µC/OS-Ⅱ简介•μC/OS-Ⅱ的软件体系:(1)用户的应用软件;(2)与处理器无关部分;(3)与处理器相关部分;(4)与应用相关部分。应用软件(用户代码)μC/OS-Ⅱ(与处理器无关代码)OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CμC/OS-Ⅱ.CμC/OS-Ⅱ.HμC/OS-Ⅱ(与应用相关代码)OS_CFG.HINCLUDES.HμC/OS-Ⅱ移植(与处理器相关代码)OS_CPU.HOS_CPU_A.ASMOC_CPU_C.CCPU定时器软件硬件图4.10μC/OS-Ⅱ软件体系结构204.2.2µC/OS-Ⅱ内核结构µC/OS-Ⅱ内核结构1、临界区8、空闲任务2、任务9、统计任务3、任务状态10、µC/OS-II中的中断4、任务控制块11、时钟节拍5、就绪表12、µC/OS-II初始化6、任务调度13、µC/OS-II的启动7、给调度器上锁和开锁214.2.2µC/OS-Ⅱ内核结构1、临界区(CriticalSections):指处理时不可分割的代码。一旦这部分代码开始执行,就不允许任何中断进入。2、任务(Tasks):通常是无限循环,但是当完成后,可以自我删除。µC/OS-II可以管理多达64个任务,但是用户最多可以有56个自己的任务。3、任务状态(TaskStates):在任一给定的时刻,µC/OS-II任务的状态应为以下5种状态之一,即睡眠态(Dormant)、就绪态(Ready)、运行态(Running)、等待状态(Waiting)、中断服务态(ISR)。4、任务控制块(TaskControlBlocks):一旦任务建立,一个任务控制块OS_TCB就被赋值。任务控制块是一个数据结构。224.2.2µC/OS-Ⅱ内核结构5、就绪表(ReadyList):每个就绪的任务都放在就绪表中,就绪表中有2个变量,OSRdyGrp和OSRdyTbl[]。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl[]中相应元素的相应位也置为1。6、任务调度(TaskScheduling):µC/OS-II总是运行进入就绪态任务中优先级最高的任务。确定哪个任务优先级最高,下面该哪个任务运行了,这一工作是由调度器(Scheduler)完成的。任务级的调度是由函数OS_Sched()完成的。中断级的调度是由另一个函数OSIntExt()完成的。7、给调度器上锁和开锁(LockingandUnlockingtheScheduler):给调度器上锁函数OSSchedLock()用于禁止任务调度,直到任务完成后,调用给调度器开锁函数OSSchedUnlock()为止。OSSchedLock()和OSSchedUnlock()必须成对的使用。234.2.2µC/OS-Ⅱ内核结构8、空闲任务(IdleTask):µC/OS-II总要建立一个空闲任务,这个任务在没有其他任务进入就绪态使投入运行。这个空闲任务(OSTaskIdle())永远被设置为最低优先级,即OS_LOWEST_PRIO。空闲任务不可能被应用软件删除。9、统计任务(StatisticsTask):µC/OS-II有一个统计运行时间的任务,叫做OSTaskStat()。如果将系统配置常数OS_TASK_STAT_EN设置为1,这个任务就会建立。一旦得到了允许,OSTaskStat()每秒运行1次,计算当前的CPU利用率。10、µC/OS-II中的中断(InterruptsunderµC/OS-II):µC/OS-II中,中断服务子程序要用汇编语言来编写。如果使用的C语言编译器支持在线汇编语言,则可以直接将中断服务子程序代码放在C语言的源文件中。244.2.2µC/OS-Ⅱ内核结构•µC/OS-II的中断服务过程大致如下:(1)中断到来,但还不能被CPU识别。(2)CPU响应了该中断,CPU的中断向量被装载,跳转到中断服务子程序。(3)中断服务子程序保存CPU的全部寄存器。(4)保存寄存器后,中断服务子程序通知µC/OS-II进入中断服务子程序。(5)用户中断服务代码开始执行。(6)中断服务完成后,必须调用OSIntExit(),通知µC/OS-II退出中断服务。(7)恢复CPU的寄存器,中断返回。254.2.2µC/OS-Ⅱ内核结构11、时钟节拍(ClockTick):µC/OS-II需要提供周期性的信号源,用于实现时间延时和确认超时。节拍率应

1 / 54
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功