《第6章 嵌入式操作系统概述.ppt》由会员分享,可在线阅读,更多相关《第6章 嵌入式操作系统概述.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章 嵌入式操作系统概述20082008年年1111月月2323日星期日日星期日1 1目 录6.1 嵌入式操作系统简介嵌入式操作系统简介6.2 嵌入式操作系统的基本原理嵌入式操作系统的基本原理20082008年年1111月月2323日星期日日星期日2 26.1 嵌入式操作系统简介20082008年年1111月月2323日星期日日星期日3 3为什么要使用嵌入式操作系统早期的嵌入式系统开发,一般都是由一个工程师完早期的嵌入式系统开发,一般都是由一个工程师完成的,软件开发工作只占全部工作的成的,软件开发工作只占全部工作的5%5%10%10%;随着科技的发展,随着科技的发展,8080年代软件开发工作
2、已经占到全年代软件开发工作已经占到全部工作的部工作的5050;近几年,随着硬件复杂性、多样性和应用复杂性的近几年,随着硬件复杂性、多样性和应用复杂性的增加,软件开发工作急剧增长,经常达到全部工作增加,软件开发工作急剧增长,经常达到全部工作的的70708080。传统的开发模式已经不能适应系统复杂性的增长,传统的开发模式已经不能适应系统复杂性的增长,而嵌入式操作系统的引入,极大的方便了嵌入式软而嵌入式操作系统的引入,极大的方便了嵌入式软件的开发和维护件的开发和维护 20082008年年1111月月2323日星期日日星期日4 4RTOS嵌入式系统开发平台 嵌入式操作系统体现了一种新的系统设计思想和一
3、嵌入式操作系统体现了一种新的系统设计思想和一个开放的软件框架,软件工程师只做少量改动,就个开放的软件框架,软件工程师只做少量改动,就可以添加或删除一个系统模块。可以添加或删除一个系统模块。通过操作系统所提供的应用程序编程接口(通过操作系统所提供的应用程序编程接口(APIAPI)访问系统资源,使得应用软件工程师能够将精力集访问系统资源,使得应用软件工程师能够将精力集中于所要解决的问题,而不是烦琐的系统底层操作,中于所要解决的问题,而不是烦琐的系统底层操作,提高了开发效率。提高了开发效率。它解决了嵌入式软件开发标准化的问题,更好地支它解决了嵌入式软件开发标准化的问题,更好地支持了系统协同开发。持了
4、系统协同开发。基于嵌入式操作系统开发出的程序,具有较高的可基于嵌入式操作系统开发出的程序,具有较高的可移植性,能实现移植性,能实现90%90%以上设备独立。以上设备独立。20082008年年1111月月2323日星期日日星期日5 5嵌入式操作系统的特点嵌入式操作系统的特点.高效的任务管理高效的任务管理 1.1.支持多任务支持多任务 2.2.优先级管理优先级管理 3.3.任务调度:基于优先级的抢占式调度、时间片轮转调任务调度:基于优先级的抢占式调度、时间片轮转调度的算法度的算法 4.4.支持快速而确定的上下文切换支持快速而确定的上下文切换 快速灵活的任务间通信快速灵活的任务间通信 1.1.信号量
5、:二进制、互斥、计数器信号量:二进制、互斥、计数器 2.2.通信机制:消息队列、管道等通信机制:消息队列、管道等 高度的可剪裁性高度的可剪裁性 动态链接与部件增量加载动态链接与部件增量加载 快速有效的中断和异常事件处理快速有效的中断和异常事件处理 优化的浮点支持优化的浮点支持 动态内存管理动态内存管理 系统时钟和定时器系统时钟和定时器20082008年年1111月月2323日星期日日星期日6 6几种最常见的RTOS 软实时软实时RTOSRTOS 嵌入式嵌入式Linux Linux Win CEWin CE Palm OS Palm OS SybianSybian 硬实时硬实时RTOSRTOS
6、VxWorksVxWorks NuclearNuclear 著名的著名的open RTOSopen RTOS ucOSucOS/IIRTEMS/IIRTEMS 自主知识产权的自主知识产权的RTOSRTOS HOPENHOPEN Delta OS Delta OS ASIX OSASIX OS20082008年年1111月月2323日星期日日星期日7 7TRON联盟1999年底2000年初关于使用RTOS的主要困难 20082008年年1111月月2323日星期日日星期日8 8TRON联盟2001年关于使用RTOS的主要困难 20082008年年1111月月2323日星期日日星期日9 9使用实时
7、操作系统最大的问题 缺少熟悉缺少熟悉RTOSRTOS技术的工程师,这个问题几乎是技术的工程师,这个问题几乎是32323333左右用户的最大困难;左右用户的最大困难;另外另外RTOSRTOS价格较高也是一个非常重要的因素,这价格较高也是一个非常重要的因素,这一点占一点占10101515;第三个困难是缺乏开发环境和工具的支持,大概占第三个困难是缺乏开发环境和工具的支持,大概占9 91414左右。左右。这三个主要困难中,以熟悉这三个主要困难中,以熟悉RTOSRTOS技术工程师为最技术工程师为最大,而且在大,而且在4 4年中几乎没有任何改变!年中几乎没有任何改变!20082008年年1111月月232
8、3日星期日日星期日10106.2 嵌入式操作系统的基本原理20082008年年1111月月2323日星期日日星期日1111堆栈的作用编译器利用堆栈 传递调用参数(传递调用参数(ARMARM会优先采用寄存器传参)会优先采用寄存器传参)保存返回地址(对于中断还需要保存程序状态字)保存返回地址(对于中断还需要保存程序状态字)保存被调函数(保存被调函数(CalleeCallee)中需要用到的寄存器的初始值中需要用到的寄存器的初始值 被调函数(被调函数(CalleeCallee)中使用到的临时(局部)变量中使用到的临时(局部)变量一般把这种调用栈组织叫做调用栈帧(Stack Frame)堆栈保存了系统运
9、行过程中程序之间的调用顺序(关系)!堆栈保存了系统运行过程中程序之间的调用顺序(关系)!堆栈保存了系统运行过程中程序之间的调用顺序(关系)!堆栈保存了系统运行过程中程序之间的调用顺序(关系)!20082008年年1111月月2323日星期日日星期日1212调用栈帧(Stack Frame)不同的编译器对栈帧的处理不完全相同,但是大同不同的编译器对栈帧的处理不完全相同,但是大同小异小异一般一般CISCCISC处理器的参数完全靠堆栈传递,而处理器的参数完全靠堆栈传递,而RISCRISC处理器的参数可以靠专门的寄存器传递处理器的参数可以靠专门的寄存器传递在不同的编译器中往往规定的不同寄存器的不同用在
10、不同的编译器中往往规定的不同寄存器的不同用途(返回值,返回地址,参数,临时变量),有些途(返回值,返回地址,参数,临时变量),有些被调函数可以直接使用,有些必须在使用前保存原被调函数可以直接使用,有些必须在使用前保存原值,并在函数返回前恢复。值,并在函数返回前恢复。ARMARM的栈帧规则:的栈帧规则:ATPCSATPCS注意:注意:注意:注意:ATPCSATPCS规定规定规定规定SPSP的规则是满递减堆栈,即堆栈指针指向的规则是满递减堆栈,即堆栈指针指向的规则是满递减堆栈,即堆栈指针指向的规则是满递减堆栈,即堆栈指针指向最后压入的数据,且由高地址向低地址生成(最后压入的数据,且由高地址向低地址
11、生成(最后压入的数据,且由高地址向低地址生成(最后压入的数据,且由高地址向低地址生成(SPSP)20082008年年1111月月2323日星期日日星期日1313调用栈帧(Stack Frame)U32 Func1(U32 arg1,void*U32 Func1(U32 arg1,void*ptrptr,U16 arg3);,U16 arg3);Main()Main()I=func1(a,p,c);I=func1(a,p,c);U32 func1(U32 arg1,void*U32 func1(U32 arg1,void*ptrptr,U16 arg3),U16 arg3)U32 x;U32 x
12、;Return x;Return x;cpaReturn AddrSPSaved RegsLocal varsHighLow20082008年年1111月月2323日星期日日星期日1414中断的分类 硬件中断硬件中断 (Hardware Interrupt):(Hardware Interrupt):一般是由外部(相对一般是由外部(相对CPUCPU内核而言)的硬件引起的事件,比如串口来数据,键盘击内核而言)的硬件引起的事件,比如串口来数据,键盘击键等;键等;软件中断(软件中断(Soft InterruptSoft Interrupt):):通过在程序中执行的中断指通过在程序中执行的中断指令引起
13、的中断,又叫软陷;令引起的中断,又叫软陷;80X8680X86:intint 指令指令 6800068000:trap trap 指令指令 ARMARM:SWI SWI 指令指令 软中断指令一般用于操作系统的系统调用入口;软中断指令一般用于操作系统的系统调用入口;异常(异常(ExceptionException):):由于由于CPUCPU内部在运行过程中引起的内部在运行过程中引起的事件,比如指令预取错,数据中止,未定义指令等等,异事件,比如指令预取错,数据中止,未定义指令等等,异常事件一般由操作系统接管。常事件一般由操作系统接管。20082008年年1111月月2323日星期日日星期日1515
14、中断的处理过程 虽然中断产生的原因不同,但是中断响应的硬件过程基本上是相同的。虽然中断产生的原因不同,但是中断响应的硬件过程基本上是相同的。拷贝拷贝CPSRCPSR到到SPSR_SPSR_ 设置正确的设置正确的CPSRCPSR位位 切换到切换到ARMARM状态状态 切换到异常模式切换到异常模式 禁止中断禁止中断 保存返回地址在保存返回地址在LR_LR_ 设置设置PCPC到异常向量地址到异常向量地址 中断服务程序可能保存需要使用的寄存器(堆栈中)中断服务程序可能保存需要使用的寄存器(堆栈中)用户服务程序可以打开中断,以接受中断嵌套用户服务程序可以打开中断,以接受中断嵌套 恢复保存的寄存器恢复保存
15、的寄存器 通过调用通过调用RetiReti(或其他相应指令)指令将或其他相应指令)指令将PSRPSR和和PCPC出栈,从而恢复原来的执出栈,从而恢复原来的执行流程。行流程。硬件完成硬件完成硬件完成硬件完成中断服务中断服务中断服务中断服务程序完成程序完成程序完成程序完成20082008年年1111月月2323日星期日日星期日1616中断的重要性!理解处理器对中断的管理以及这其中的堆栈管理对理解处理器对中断的管理以及这其中的堆栈管理对于理解操作系统是至关重要的!于理解操作系统是至关重要的!中断是操作系统的入口,用户访问操作系统提供的中断是操作系统的入口,用户访问操作系统提供的服务的唯一途径是依靠中
16、断来实现的。服务的唯一途径是依靠中断来实现的。实时系统对异步事件的处理,依靠的是中断!实时系统对异步事件的处理,依靠的是中断!任务的调度靠的是中断任务的调度靠的是中断系统调用的实现靠的是中断系统调用的实现靠的是中断在有在有MMUMMU的系统中,虚存的管理也是依靠中断!的系统中,虚存的管理也是依靠中断!中断是理解操作系统的入口!中断是理解操作系统的入口!如何强调中断的重要性都如何强调中断的重要性都如何强调中断的重要性都如何强调中断的重要性都不过份,我们将在内核的不过份,我们将在内核的不过份,我们将在内核的不过份,我们将在内核的实现中详细介绍!实现中详细介绍!实现中详细介绍!实现中详细介绍!200
17、82008年年1111月月2323日星期日日星期日1717调用栈和中断栈的不同Last argFirst argReturn AddressAutomatic or Scratch VarsAutomatic or Scratch VarsSaved RegsHighLowReturn AddressPSRSaved RegsHighLow调用栈中断栈20082008年年1111月月2323日星期日日星期日1818实时操作系统的概念实时系统:系统的正确运行要同时满足特定的逻辑和时间关系。实时操作系统RTOS(real time operation system):是指能支持实时控制系统工作的操
18、作系统 硬实时硬实时软实时软实时20082008年年1111月月2323日星期日日星期日1919任 务Task 从代码中去看,任务(从代码中去看,任务(TASKTASK)就是一个拥有自己堆栈的函就是一个拥有自己堆栈的函数数 。从任务的角度看,任务可以认为自己独自拥有。从任务的角度看,任务可以认为自己独自拥有CPUCPU;在进行实时应用设计时通常要把工作分割成多个任务,每个在进行实时应用设计时通常要把工作分割成多个任务,每个任务处理一部分问题,并被赋予一定的优先级、一套自己的任务处理一部分问题,并被赋予一定的优先级、一套自己的CPUCPU寄存器及堆栈。寄存器及堆栈。实时系统中的大部分任务是周期的
19、,体现在编程上每个任务实时系统中的大部分任务是周期的,体现在编程上每个任务则是一个典型的无限循环。则是一个典型的无限循环。任务的状态:睡眠、就绪、运行、延迟、等待任务的状态:睡眠、就绪、运行、延迟、等待 20082008年年1111月月2323日星期日日星期日2020任务虚拟的CPUTASK1TASK1TASK2TASK2TASK N TASK N SPStatus优先级其他SPStatus优先级其他SPStatus优先级其他HighLOWTCBSTACK Framer1r0r4r3r13r14r15PSRCPU RegisterMemoryCPU操作系统通过堆栈操作系统通过堆栈保存上下文和任
20、务中保存上下文和任务中函数的调用顺序函数的调用顺序(还记得栈帧吗?)(还记得栈帧吗?)20082008年年1111月月2323日星期日日星期日2121Task StatusWAITWAITREADYREADYRUNRUNWAIT-SUSPENDWAIT-SUSPENDSUSPENDSUSPENDDORMANTDORMANTReady,WaitReady,Wait和和和和RunRun这三个状态是一个多任务系统中必不可少的!这三个状态是一个多任务系统中必不可少的!这三个状态是一个多任务系统中必不可少的!这三个状态是一个多任务系统中必不可少的!其他的状态应各个其他的状态应各个其他的状态应各个其他的状
21、态应各个OSOS的不同而不同的不同而不同的不同而不同的不同而不同20082008年年1111月月2323日星期日日星期日2222任务:example 手持数据采集终端的打印手持数据采集终端的打印 creatTASK(myprintfcreatTASK(myprintf,priority),priority);void void myprintfmyprintf()()while(1)while(1)等待接收队列信息等待接收队列信息等待接收队列信息等待接收队列信息;往打印机发送打印信息;往打印机发送打印信息;往打印机发送打印信息;往打印机发送打印信息;这里这里myprintf 任务将调用操作系统
22、提任务将调用操作系统提供的系统调用,如果接受队列中没有数供的系统调用,如果接受队列中没有数据,操作系统将挂起该任务,并将控制据,操作系统将挂起该任务,并将控制权交给另一个就绪的任务,当接受队列权交给另一个就绪的任务,当接受队列中有数据从而激活中有数据从而激活myprintf任务,使其任务,使其进入就绪态,等待内核的再次调度进入就绪态,等待内核的再次调度20082008年年1111月月2323日星期日日星期日2323进程,线程和任务的关系 进程一般都拥有自己的独立内存空间,进程一般都拥有自己的独立内存空间,进程一般都拥有自己的独立内存空间,进程一般都拥有自己的独立内存空间,进程间的内存空间彼此隔
23、离,以此实进程间的内存空间彼此隔离,以此实进程间的内存空间彼此隔离,以此实进程间的内存空间彼此隔离,以此实现保护。所以进程的实现有赖于硬件现保护。所以进程的实现有赖于硬件现保护。所以进程的实现有赖于硬件现保护。所以进程的实现有赖于硬件的支持(的支持(的支持(的支持(MMUMMU)在多线程的系统中,进程更像是一个在多线程的系统中,进程更像是一个在多线程的系统中,进程更像是一个在多线程的系统中,进程更像是一个容器的概念,这个容器规定了线程运容器的概念,这个容器规定了线程运容器的概念,这个容器规定了线程运容器的概念,这个容器规定了线程运行的内存空间,每个线程拥有自己独行的内存空间,每个线程拥有自己独
24、行的内存空间,每个线程拥有自己独行的内存空间,每个线程拥有自己独立的堆栈,是最小的可调度单元立的堆栈,是最小的可调度单元立的堆栈,是最小的可调度单元立的堆栈,是最小的可调度单元 对于嵌入式系统而言,由于很多嵌入对于嵌入式系统而言,由于很多嵌入对于嵌入式系统而言,由于很多嵌入对于嵌入式系统而言,由于很多嵌入式处理器没有式处理器没有式处理器没有式处理器没有MMUMMU,所以每个可调所以每个可调所以每个可调所以每个可调度单元虽然拥有自己的堆栈,但是却度单元虽然拥有自己的堆栈,但是却度单元虽然拥有自己的堆栈,但是却度单元虽然拥有自己的堆栈,但是却运行在同一内存空间,我们称其为任运行在同一内存空间,我们
25、称其为任运行在同一内存空间,我们称其为任运行在同一内存空间,我们称其为任务务务务内存空间任务多进程,单线程多进程,单线程多进程,多线程多进程,多线程单进程,多线程单进程,多线程20082008年年1111月月2323日星期日日星期日2424互斥(mutual exclusion)资源的使用必须独占,叫做互斥。解决办法:开关中断,使用硬件指令,使用信号量 A TaskB Task使用中只能等待只能等待A完成后才能使用完成后才能使用这种资源就叫做临界资源这种资源就叫做临界资源20082008年年1111月月2323日星期日日星期日2525代码临界区(Critical Section)指一段不可分割
26、的代码,一旦执行,不能被中断。实现代码临界区的方法有:一是屏蔽中断,通常在代码执行前关闭中断,执行后打开中断,只能用于单处理机的情形;二是通过信号量机制。代码临界区可以看成是代码执行过程中的互斥!20082008年年1111月月2323日星期日日星期日2626函数调用与系统调用系统调用从用户的角度系统调用从用户的角度上看与函数调用没有什上看与函数调用没有什么区别,但实际上系统么区别,但实际上系统调用一般都是在内部通调用一般都是在内部通过软陷的方法使过软陷的方法使CPUCPU进进入特权状态,从而实现入特权状态,从而实现对全部资源的访问。对全部资源的访问。SyscallSyscall(argsar
27、gs)init and init and argarg trans;trans;SWI;SWI;20082008年年1111月月2323日星期日日星期日2727内核(kernel)多任务系统的一部分,负责管理任务。占先式占先式(preemptive)(preemptive)与非占先式与非占先式 微内核微内核(Micro kernel)(Micro kernel)与单内核与单内核对于微核系统主要功能对于微核系统主要功能:任务管理(创建,调度等)任务管理(创建,调度等)任务间通信任务间通信 中断管理中断管理任务管理任务间通信中断管理系统任务系统任务系统任务系统任务系统任务系统任务硬 件应用任务应用
28、任务应用任务应用任务20082008年年1111月月2323日星期日日星期日2828优先级(Priority)每个任务按其重要性被赋予一定的优先级。每个任务按其重要性被赋予一定的优先级。静态优先级与动态优先级。静态优先级与动态优先级。基于优先级的系统会出现优先级倒置的问题,一个基于优先级的系统会出现优先级倒置的问题,一个好的实时内核应该提供解决倒置的方法。好的实时内核应该提供解决倒置的方法。已开发出多种算法用于实时任务的优先级分配,基已开发出多种算法用于实时任务的优先级分配,基本的有单调执行率调度法本的有单调执行率调度法RMSRMS和最早期限优先法和最早期限优先法EDFEDF等等2008200
29、8年年1111月月2323日星期日日星期日2929调度Scheduler内核的主要职责之一,决定任务运行的次序。内核的主要职责之一,决定任务运行的次序。基本的调度算法有先来先服务基本的调度算法有先来先服务FCFS,FCFS,最短周期优先最短周期优先SBFSBF,优先级法优先级法(Priority)(Priority),轮转法轮转法(Round-Robin)(Round-Robin),多级队列法多级队列法(multi-level queues)(multi-level queues),多级反馈队列多级反馈队列(multi-level feedback queues)(multi-level fe
30、edback queues)等。等。调度的基本方式有可占先式和非占先式。调度的基本方式有可占先式和非占先式。多数实时内核是基于优先级调度的多种方法的复合。多数实时内核是基于优先级调度的多种方法的复合。20082008年年1111月月2323日星期日日星期日3030Task Scheduler-220082008年年1111月月2323日星期日日星期日3131非抢占式低优先级任务ISR使高优先使高优先任务就绪任务就绪低优先级任务高优先级任务低优先任务主动放弃CPU 相应中断快相应中断快 内核可以非重入内核可以非重入 不需要额外的保护不需要额外的保护 最大缺陷是相应慢最大缺陷是相应慢时间20082
31、008年年1111月月2323日星期日日星期日3232抢占式 高优先级任务可以高优先级任务可以随时运行随时运行 任务的切换可以发任务的切换可以发生在中断中生在中断中 函数应该可重入函数应该可重入低优先级任务ISR使高优先使高优先任务就绪任务就绪低优先级任务高优先级任务时间20082008年年1111月月2323日星期日日星期日3333函数调度与中断调度对于抢占式内核调度只会发生在对于抢占式内核调度只会发生在对于抢占式内核调度只会发生在对于抢占式内核调度只会发生在系统调用和中断的返回处!系统调用和中断的返回处!系统调用和中断的返回处!系统调用和中断的返回处!20082008年年1111月月232
32、3日星期日日星期日3434优先级反转优先级时间A 任务使用临界资源任务使用临界资源SC 任务等待临界资源S中断激活中断激活B任务任务B任务运行任务运行中断激活中断激活D任务任务D任务运行任务运行高优先级的高优先级的C任务由于一直任务由于一直在等待临界资源的释放,而在等待临界资源的释放,而总是被低优先级的总是被低优先级的B和和D任任务抢占务抢占20082008年年1111月月2323日星期日日星期日3535优先级翻转的解决优先级继承优先级时间A 任务使用临界资源任务使用临界资源SC 任务等待临界资源S中断激活中断激活B任务任务A 任务继续运行任务继续运行A 释放释放SC 任务得到任务得到S并运行
33、并运行20082008年年1111月月2323日星期日日星期日3636任务间通信(inter task com)在多任务系统中,任务之间存在相互制约的关系,或者任务之间需要交换信息,称为任务间通信。方式:邮箱,队列,事件标记等20082008年年1111月月2323日星期日日星期日3737Task Synchronization&Communication-1MailBox Mail BoxtasktaskT_MSGT_MSGmsgcont10msgcont1020082008年年1111月月2323日星期日日星期日3838Task Synchronization&Communication-
34、2Event Flag Event Flagtaskflag_patternwait_patternwait_flag_mode20082008年年1111月月2323日星期日日星期日3939Task Synchronization&Communication-3SemaphoreSemaphoretasktasktask20082008年年1111月月2323日星期日日星期日4040什么是好的什么是好的RTOS?实时操作系统(RTOS)必须采用多线程和抢占式多任务 操作系统中的线程应该是具备优先级的 操作系统应该支持可预测的线程同步机制 操作系统应该拥有防止优先级反转的机制 操作系统的行为应该是可预知的 20082008年年1111月月2323日星期日日星期日4141操作系统的性能参数 中断延时 对于每个系统调用,最长的时间值 操作系统或驱动程序屏蔽中断的最大时间 系统的中断级别数 设备驱动的中断级别以及所需的最大时间 20082008年年1111月月2323日星期日日星期日4242其他系统内核的大小系统运行时所需要的RAM的大小系统中对内存的管理方法好的RTOS还必须拥有好的文档 开发和优化应用程序的好的工具 20082008年年1111月月2323日星期日日星期日4343