《实时操作系统(RTOS)培训.ppt》由会员分享,可在线阅读,更多相关《实时操作系统(RTOS)培训.ppt(81页珍藏版)》请在优知文库上搜索。
1、实时操作系统(RTOS)培训实时系统概念l实时系统是指在确定的时间内完成规定功能,并能对外部异步事件作出正确响应的计算机系统实时系统分类l硬实时系统:结果迟到产生灾难性结果lFIRM 实时系统:结果迟到会产生难以接受的质量上的降低l软实时系统:结果迟到会引起质量下降,系统可以自行恢复衡量系统实时性的3个指标:l响应时间(Response Time)l生存时间(Survival Time)l吞吐量(Throughput)嵌入式系统嵌入式系统通常都是实时系统,其特征为l系统的正确性不但依赖于运行逻辑结果的正确性,而且依赖于得到结果所花费的时间l系统对于各种外部输入在预定时间内能得到可以预测的结果嵌
2、入式系统通常使用RTOS,其特征为l在不同的系统负载下,行为可以预测l支持基于优先级的调度lMEMORY模型对于RTOS的性能十分重要l通常都需要一个时钟来处理任务的同步HRT SRTNRT内存分配SD/SD虚存 NNYS-STATIC D-DYNAMIC比较嵌入式系统(续)硬件特性l体积小,集成效率高l面向特定应用l低功耗,能在恶劣环境下工作软件特性l软件的研发与硬件紧密相关l软件代码要求高效率和高可靠性l软件一般固化在FLASH或ROM中应用l工业过程控制l军事电子设备和现代武器l网络通信设备l消费电子产品嵌入式实时系统软件特征实时性:反应时间要快,按要求的间隔输出正确时间信实时性:反应时
3、间要快,按要求的间隔输出正确时间信号给实时的控制设备号给实时的控制设备多任务并发性:利用适当的策略控制多任务的执行,提多任务并发性:利用适当的策略控制多任务的执行,提高资源的利用效率高资源的利用效率有处理异步事件的能力有处理异步事件的能力快速启动,并有出错处理和自动复位功能快速启动,并有出错处理和自动复位功能嵌入式实时软件是应用程序和操作系统两种软件的一体嵌入式实时软件是应用程序和操作系统两种软件的一体化程序化程序嵌入式实时软件的开发需要独立的开发平台和交叉开发嵌入式实时软件的开发需要独立的开发平台和交叉开发环境环境主要的嵌入式实时操作系统VxWorksl使用最广、市场占有率最高的嵌入式实时操
4、作系统,美国WindRiver公司产品VRTXl老牌嵌入式实时操作系统pSOSlISI公司推出,现已被WindRiver公司收购WinCElMicrosoft公司推出,实时性不太好,主要用于掌上系统Palm OSl3Com公司推出,在PDA市场占有很大份额嵌入式Linuxl源代码免费开放,eCOS是Redhat推出的一款嵌入式LINUX操作系统前后台系统通常应用于不复杂的小型系统应用程序是一个无限的循环,这部分可以看成后台行为(background)中断服务程序处理异步事件,这部分可以看成前台行为(foreground)后台也可以叫做任务级,前台也叫中断级前后台系统(续)多任务系统CPU在许多
5、任务之间转换、调度,轮番服务于一系列任务中的某一个优点:l使CPU 的利用率得到最大的发挥l使应用程序模块化l可以将很复杂的应用程序层次化l应用程序l将更容易设计与维护RTOS组成操作系统是硬件与用户之间的一层系统软件, 负责管理整个系统,同时将硬件细节与用户隔离开来为用户提供一个更容易理解和进行程序设计的接口操作系统的质量以它的体系结构为基础,确保系统的性能、可靠性、灵活性、可移植性、可扩展性等,同时定义了硬件与软件的界面,操作系统内部各构件的组织关系系统与用户的接口RTOS资源分配必须考虑到实时性要求l合理分配优先级l支持优先级抢占l提供任务同步和互斥l支持不同任务之间的数据共享l支持外部
6、事件(中断)响应l系统可剪裁,由于资源限制,所采用的操作系统应该有极强的针对性,因此操作系统功能够用即可l易于扩展,由于嵌入式设备的功能多样化,要求嵌入式操作系统除提供基本的内核支持外,还需提供越来越多的可扩展功能模块(含用户扩展),如:针对特有应用提供的协议支持、协议扩展,功耗控制等等RTOS组成(续)HALRTOS 基本内核l线程线程管理l时钟管理l中断设备驱动管理l通信管理l存储管理RTOS扩展内核l接口协议管理l其它APIRTOS组成(续)基本内核:嵌入式RTOS 中最核心最基础的部分l任务(线程/线程)管理:负责系统中任务状态的变迁l中断(包括时钟中断)管理:开关中断,完成现场切换和
7、保持l任务(线程/线程)通信管理:信号量、事件、消息队列等l存储管理:分配存储器空间扩展内核:为方便用户使用而对RTOS 进行的扩展l根据具体应用不同所做的扩展不同lCAM应用中表现为对CI接口协议进行管理设备驱动程序接口:RTOS 内核与外部硬件之间的一个硬件抽象层l定义软件与硬件的界限,方便RTOS 的移植升级应用编程接口:建立在RTOS 编程接口之上的面向应用领域的编程接口l方便用户编写特定领域的嵌入式应用程序RTS的响应时间及时性是实时系统最为重要的特性设计者应该能预测实时系统的行为同步任务由时钟来同步异步事件通常由中断驱动一个多任务RTOS的事例Resource allocation
8、 & mgmtTask Scheduling & DispatchReal time clockInterrupt Service routinesI/O SubsystemFile MGMTSystem tasks Application tasksUser LevelOS LevelCommand processor资源任何为任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量,一个结构或一个数组等可以被一个以上任务使用的资源叫做共享资源为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥(mutual exclusi
9、on)任务一个任务也称作一个线程,是一个简单的程序,该程序可以认为CPU 完全只属该程序自己每个任务都是整个应用的某一部分,被赋予一定的优先级,有自己的一套CPU 寄存器和栈空间多任务系统中,任意时刻只有一个任务占有CPU资源一个任务通常是一个无限的循环,当任务完成以后,任务可以自我删除TCB(任务控制块)TCB在任务建立时将被赋值(初始化)TCB是一个数据结构,用来保存该任务的状态:堆栈指针、堆栈大小、任务状态、任务优先级任务重新得到CPU 使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行TCBs全部驻留在RAM 中任务状态每个任务都处在以下5 种状态之一:休眠态,就绪态
10、、运行态、挂起态和被中断态休眠态:该任务驻留在内存中,但并不被内核所调度就绪态:该任务已经准备好运行,但由于优先级比正运行的任务优先级低,还暂时不能运行运行态:掌握了CPU 的控制权,正在运行中挂起态:也叫等待态,在等待某一事件的发生中断态:发生中断时,进入相应的中断服务任务状态变迁图WAITINGDORMANTREADYRUNNINGISR任务状态变迁就绪 - 运行l调度程序选择一个新的线程运行运行 - 就绪l运行线程用完了时间片l运行线程被高优先级线程抢占运行 - 等待l当一线程必须等待时l等待某外设的I/O 操作l等待某共享资源由暂不能使用变成能使用状态l等待定时脉冲的到来或等待超时信号
11、的到来以结束目前的等待l等待 - 就绪l当所等待的事件发生时任务切换也称为上下文切换(Context Switch)当多任务内核决定运行另外的任务时:l保存正在运行任务的当前状态(Context),即CPU 寄存器中的全部内容。这些内容保存在任务自己的栈区之中l把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU 的寄存器,并开始下一个任务的运行任务切换过程增加了应用程序的额外负荷任务调度任务调度就是按一定的调度算法从就绪任务中选中一个任务到处理器上运行主要工作:l(1)记录当前任务状态(如指令计数器、状态寄存器、通用寄存器等)到TCB;l(2)根据调度算法,在就绪任务中选一个任务;l
12、(3)回收处理机并分配给选中的任务。任务调度方式非抢占式调度抢占式调度l由于嵌入式操作系统对实时性的较强要求,因此基本上使用抢占式调度。调度算法lFIFO:先来先服务l短作业优先l基于优先级:l时间片轮转(Round Robin) : 固定时间片 可变时间片l多级队列算法l多级反馈队列算法l其它组合策略调度算法非抢占式调度抢占式调度可重入性(Reentrancy )可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏可重入型函数任何时候都可以被中断,一段时间以后又可以运行编写可重入型函数需遵循的规则:l使用局部变量,即变量保存在CPU寄存器或堆栈中l尽量不使用static或extern变
13、量任务优先级每个任务都有其优先级。任务越重要,赋予的优先级应越高eCos任务及优先级优先级0255,优先级的最低3bits忽略,因此07、815各组内的优先级相同,组外数值越大,优先级越高eCos任务结构:roottask1task2task3task4task5idle任务管理创建任务(CreateTask)删除任务(DeleteTask)挂起任务()唤醒任务()改变任务优先级()获取任务优先级()获取当前任务ID任务管理(sidsa API)t_create lULONG t_create(char name4, ULONG prio, ULONG sstack, ULONG ustack
14、, ULONG flags, ULONG *tid)t_start lULONG t_start(ULONG tid, ULONG mode, void *start_addr, ULONG targs)t_delete lULONG t_delete(ULONG tid)t_suspend lULONG t_suspend(ULONG tid)t_resume lULONG t_resume(ULONG tid)t_wkafter lULONG tm_wkafter(ULONG ticks)任务管理(kernel API)cyg_thread_createcyg_thread_exitcyg
15、_thread_killcyg_thread_deletecyg_thread_yieldcyg_thread_delaycyg_thread_suspendcyg_thread_resumecyg_thread_release任务管理(kernel API 续)cyg_thread_get_prioritycyg_thread_get_current_prioritycyg_thread_set_prioritycyg_thread_selfcyg_thread_idle_threadcyg_thread_get_stack_basecyg_thread_get_stack_sizecyg_
16、thread_measure_stack_usagecyg_thread_get_nextcyg_thread_get_infocyg_thread_find任务间通信及同步共享内存(Share Memory)信号量(Semaphore)互斥量(Mutex)事件标志(Event Flag)消息邮箱(Message Box)消息队列(Message Queue)信号量(Semaphore)信号量用于:l控制共享资源的使用权(满足互斥条件)l标志某事件的发生l使两个任务的行为同步一个信号量是一个16位变量,初值为065535,值为0表示资源处于锁住状态,非0表示有多个资源,供多个任务访问信号量表示符号:钥匙或旗帜信号量的P、V操作等待信号量( P操作):l如果信号量值大于0,则信号量值减1,任务得以继续运行l如果信号量的值为0,等待信号量的任务被挂起并列入等待信号量任务表释放信号量(V操作):l如果没有任务在等待信号量,信号量的值仅仅是简单地加1l如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1l P、V操作为原语操作,原语(primitive or atomi