《实时操作系统RTOS培训.ppt》由会员分享,可在线阅读,更多相关《实时操作系统RTOS培训.ppt(81页珍藏版)》请在三一办公上搜索。
1、深圳国微技术有限公司2005-07-11,实时操作系统(RTOS)培训,实时系统,概念实时系统是指在确定的时间内完成规定功能,并能对外部异步事件作出正确响应的计算机系统实时系统分类硬实时系统:结果迟到产生灾难性结果FIRM 实时系统:结果迟到会产生难以接受的质量上的降低软实时系统:结果迟到会引起质量下降,系统可以自行恢复衡量系统实时性的3个指标:响应时间(Response Time)生存时间(Survival Time)吞吐量(Throughput),嵌入式系统,嵌入式系统通常都是实时系统,其特征为系统的正确性不但依赖于运行逻辑结果的正确性,而且依赖于得到结果所花费的时间系统对于各种外部输入在
2、预定时间内能得到可以预测的结果嵌入式系统通常使用RTOS,其特征为在不同的系统负载下,行为可以预测支持基于优先级的调度MEMORY模型对于RTOS的性能十分重要通常都需要一个时钟来处理任务的同步,S-STATIC D-DYNAMIC,比较,嵌入式系统(续),硬件特性体积小,集成效率高面向特定应用低功耗,能在恶劣环境下工作软件特性软件的研发与硬件紧密相关软件代码要求高效率和高可靠性软件一般固化在FLASH或ROM中应用工业过程控制军事电子设备和现代武器网络通信设备消费电子产品,嵌入式实时系统软件特征,实时性:反应时间要快,按要求的间隔输出正确时间信号给实时的控制设备多任务并发性:利用适当的策略控
3、制多任务的执行,提高资源的利用效率有处理异步事件的能力快速启动,并有出错处理和自动复位功能嵌入式实时软件是应用程序和操作系统两种软件的一体化程序嵌入式实时软件的开发需要独立的开发平台和交叉开发环境,主要的嵌入式实时操作系统,VxWorks使用最广、市场占有率最高的嵌入式实时操作系统,美国WindRiver公司产品VRTX老牌嵌入式实时操作系统pSOSISI公司推出,现已被WindRiver公司收购WinCEMicrosoft公司推出,实时性不太好,主要用于掌上系统Palm OS3Com公司推出,在PDA市场占有很大份额嵌入式Linux源代码免费开放,eCOS是Redhat推出的一款嵌入式LIN
4、UX操作系统,前后台系统,通常应用于不复杂的小型系统应用程序是一个无限的循环,这部分可以看成后台行为(background)中断服务程序处理异步事件,这部分可以看成前台行为(foreground)后台也可以叫做任务级,前台也叫中断级,前后台系统(续),多任务系统,CPU在许多任务之间转换、调度,轮番服务于一系列任务中的某一个优点:使CPU 的利用率得到最大的发挥使应用程序模块化可以将很复杂的应用程序层次化应用程序将更容易设计与维护,RTOS组成,操作系统是硬件与用户之间的一层系统软件,负责管理整个系统,同时将硬件细节与用户隔离开来为用户提供一个更容易理解和进行程序设计的接口操作系统的质量以它的
5、体系结构为基础,确保系统的性能、可靠性、灵活性、可移植性、可扩展性等,同时定义了硬件与软件的界面,操作系统内部各构件的组织关系系统与用户的接口RTOS资源分配必须考虑到实时性要求合理分配优先级支持优先级抢占提供任务同步和互斥支持不同任务之间的数据共享支持外部事件(中断)响应系统可剪裁,由于资源限制,所采用的操作系统应该有极强的针对性,因此操作系统功能够用即可易于扩展,由于嵌入式设备的功能多样化,要求嵌入式操作系统除提供基本的内核支持外,还需提供越来越多的可扩展功能模块(含用户扩展),如:针对特有应用提供的协议支持、协议扩展,功耗控制等等,RTOS组成(续),HAL,RTOS 基本内核线程线程管
6、理时钟管理中断设备驱动管理通信管理存储管理,RTOS扩展内核接口协议管理其它,API,RTOS组成(续),基本内核:嵌入式RTOS 中最核心最基础的部分任务(线程/线程)管理:负责系统中任务状态的变迁中断(包括时钟中断)管理:开关中断,完成现场切换和保持任务(线程/线程)通信管理:信号量、事件、消息队列等存储管理:分配存储器空间扩展内核:为方便用户使用而对RTOS 进行的扩展根据具体应用不同所做的扩展不同CAM应用中表现为对CI接口协议进行管理设备驱动程序接口:RTOS 内核与外部硬件之间的一个硬件抽象层定义软件与硬件的界限,方便RTOS 的移植升级应用编程接口:建立在RTOS 编程接口之上的
7、面向应用领域的编程接口方便用户编写特定领域的嵌入式应用程序,RTS的响应时间,及时性是实时系统最为重要的特性设计者应该能预测实时系统的行为同步任务由时钟来同步异步事件通常由中断驱动,一个多任务RTOS的事例,Resource allocation&mgmt,Task Scheduling&Dispatch,Real time clock,Interrupt Service routines,I/O Subsystem,File MGMT,System tasks,Application tasks,User Level,OS Level,Command processor,资源,任何为任务所占
8、用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量,一个结构或一个数组等可以被一个以上任务使用的资源叫做共享资源为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥(mutual exclusion),任务,一个任务也称作一个线程,是一个简单的程序,该程序可以认为CPU 完全只属该程序自己每个任务都是整个应用的某一部分,被赋予一定的优先级,有自己的一套CPU 寄存器和栈空间多任务系统中,任意时刻只有一个任务占有CPU资源一个任务通常是一个无限的循环,当任务完成以后,任务可以自我删除,TCB(任务控制块),TCB在任务建立时将被赋
9、值(初始化)TCB是一个数据结构,用来保存该任务的状态:堆栈指针、堆栈大小、任务状态、任务优先级任务重新得到CPU 使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行TCBs全部驻留在RAM 中,任务状态,每个任务都处在以下5 种状态之一:休眠态,就绪态、运行态、挂起态和被中断态休眠态:该任务驻留在内存中,但并不被内核所调度就绪态:该任务已经准备好运行,但由于优先级比正运行的任务优先级低,还暂时不能运行运行态:掌握了CPU 的控制权,正在运行中挂起态:也叫等待态,在等待某一事件的发生中断态:发生中断时,进入相应的中断服务,任务状态变迁图,WAITING,DORMANT,REA
10、DY,RUNNING,ISR,任务状态变迁,就绪-运行调度程序选择一个新的线程运行运行-就绪运行线程用完了时间片运行线程被高优先级线程抢占运行-等待当一线程必须等待时等待某外设的I/O 操作等待某共享资源由暂不能使用变成能使用状态等待定时脉冲的到来或等待超时信号的到来以结束目前的等待等待-就绪当所等待的事件发生时,任务切换,也称为上下文切换(Context Switch)当多任务内核决定运行另外的任务时:保存正在运行任务的当前状态(Context),即CPU 寄存器中的全部内容。这些内容保存在任务自己的栈区之中把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU 的寄存器,并开始下一个
11、任务的运行任务切换过程增加了应用程序的额外负荷,任务调度,任务调度就是按一定的调度算法从就绪任务中选中一个任务到处理器上运行主要工作:(1)记录当前任务状态(如指令计数器、状态寄存器、通用寄存器等)到TCB;(2)根据调度算法,在就绪任务中选一个任务;(3)回收处理机并分配给选中的任务。,任务调度方式,非抢占式调度抢占式调度由于嵌入式操作系统对实时性的较强要求,因此基本上使用抢占式调度。调度算法FIFO:先来先服务短作业优先基于优先级:时间片轮转(Round Robin):固定时间片 可变时间片多级队列算法多级反馈队列算法其它组合策略调度算法,非抢占式调度,抢占式调度,可重入性(Reentra
12、ncy),可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏可重入型函数任何时候都可以被中断,一段时间以后又可以运行编写可重入型函数需遵循的规则:使用局部变量,即变量保存在CPU寄存器或堆栈中尽量不使用static或extern变量,任务优先级,每个任务都有其优先级。任务越重要,赋予的优先级应越高,eCos任务及优先级,优先级0255,优先级的最低3bits忽略,因此07、815各组内的优先级相同,组外数值越大,优先级越高eCos任务结构:,root,task1,task2,task3,task4,task5,idle,任务管理,创建任务(CreateTask)删除任务(DeleteT
13、ask)挂起任务()唤醒任务()改变任务优先级()获取任务优先级()获取当前任务ID,任务管理(sidsa API),t_create ULONG t_create(char name4,ULONG prio,ULONG sstack,ULONG ustack,ULONG flags,ULONG*tid)t_start ULONG t_start(ULONG tid,ULONG mode,void*start_addr,ULONG targs)t_delete ULONG t_delete(ULONG tid)t_suspend ULONG t_suspend(ULONG tid)t_resu
14、me ULONG t_resume(ULONG tid)t_wkafter ULONG tm_wkafter(ULONG ticks),任务管理(kernel API),cyg_thread_createcyg_thread_exitcyg_thread_killcyg_thread_deletecyg_thread_yieldcyg_thread_delaycyg_thread_suspendcyg_thread_resumecyg_thread_release,任务管理(kernel API 续),cyg_thread_get_prioritycyg_thread_get_current_
15、prioritycyg_thread_set_prioritycyg_thread_selfcyg_thread_idle_threadcyg_thread_get_stack_basecyg_thread_get_stack_sizecyg_thread_measure_stack_usagecyg_thread_get_nextcyg_thread_get_infocyg_thread_find,任务间通信及同步,共享内存(Share Memory)信号量(Semaphore)互斥量(Mutex)事件标志(Event Flag)消息邮箱(Message Box)消息队列(Message Q
16、ueue),信号量(Semaphore),信号量用于:控制共享资源的使用权(满足互斥条件)标志某事件的发生使两个任务的行为同步一个信号量是一个16位变量,初值为065535,值为0表示资源处于锁住状态,非0表示有多个资源,供多个任务访问信号量表示符号:钥匙或旗帜,信号量的P、V操作,等待信号量(P操作):如果信号量值大于0,则信号量值减1,任务得以继续运行如果信号量的值为0,等待信号量的任务被挂起并列入等待信号量任务表,释放信号量(V操作):如果没有任务在等待信号量,信号量的值仅仅是简单地加1如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1,P、V操作为原语操作,原
17、语(primitive or atomic action):是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断实现:开关中断信号量的使用:必须置一次且只能置一次初值初值不能为负数 只能执行P、V操作,信号量的P、V操作(续),用P、V操作解决线程间互斥问题,优先级反转问题,优先级反转问题(续),设计中应注意避免产生优先级反转优先级继承(Priority inheritance)可解决优先级反转问题,经典的生产者消费者问题,消费者,生产者,经典的生产者消费者问题(续1),同步问题:P线程不能往“满”的缓冲区中放产品,设置信号量为S
18、1 Q线程不能从“空”的缓冲区中取产品,设置信号量S2P:Q:while(true)while(true)生产一个产品;P(s2);P(s1);从缓冲区取产品;送产品到缓冲区;V(s1);V(s2);消费产品;,S1初值为1,S2初值为0,多个缓冲区的生产者和消费者,P:i=0;while(true)生产产品;P(S1);往Buffer i放产品;V(S2);i=(i+1)%n;,Q:j=0;while(true)P(S2);从Bufferj取产品;V(S1);消费产品;j=(j+1)%n;,S1初值为n,S2初值为0,Q:j=0;while(true)P(S2);P(mutex2);从Buf
19、ferj取产品;V(mutex2);V(S1);消费产品;j=(j+1)%n;,n个缓冲区、m个生产者和k个消费者,P:i=0;while(true)生产产品;P(S1);P(mutex1);往Buffer i放产品;V(mutex1);V(S2);i=(i+1)%n;,错误,S1初值为n,S2初值为0,线程数为m,线程数为k,Q:j=0;while(true)P(S2);P(mutex2);从Bufferj取产品;j=(j+1)%n;V(mutex2);V(S1);消费产品;,n个缓冲区、m个生产者和k个消费者,P:i=0;while(true)生产产品;P(S1);P(mutex1);往B
20、uffer i放产品;i=(i+1)%n;V(mutex1);V(S2);,正确,S1初值为n,S2初值为0,线程数为m,线程数为k,1)信号量的物理含义:S0表示有S个资源可用S=0表示无资源可用S0则|S|表示S等待队列中的线程个数P(S):表示申请一个资源 V(S):表示释放一个资源。信号量的初值应该大于等于0,信号量及P、V操作讨论,2)P.V操作必须成对出现,有一个P操作就一定有一个V操作当为互斥操作时,它们同处于同一线程当为同步操作时,则不在同一线程中出现如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要,一个同步P操作与一个互斥P操作在一起时同步P操作在互斥P操作
21、前而两个V操作无关紧要,信号量及P、V操作讨论(续1),3)P.V操作的优缺点优点:简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)缺点:不够安全;P.V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂,信号量及P、V操作讨论(续2),【思考题】,1.用P.V操作解决下图之同步问题:,get,copy,put,f,s,t,g,用P.V操作解决司机与售票员的问题,信号量管理,创建信号量(SemCreate)释放信号量(SemPost)等待信号量(SemPend)信号量为0时任务挂起,永久或有限等待无等待取信号量(SemAccept)信号量为0时任务不会挂起,返回0,eCos的信号
22、量管理(sidsa API),sm_createULONG sm_create(char name4,ULONG count,ULONG flags,ULONG*smid)sm_deleteULONG sm_delete(ULONG smid)sm_pULONG sm_p(ULONG smid,ULONG flags,ULONG timeout)sm_vULONG sm_v(ULONG smid),eCos的信号量管理(kernel API),cyg_semaphore_initcyg_semaphore_destroycyg_semaphore_waitcyg_semaphore_timed
23、_waitcyg_semaphore_trywaitcyg_semaphore_postcyg_semaphore_peek,互斥量(Mutex),一个互斥量就是一个同步对象,用于多任务串行访问共享数据只有一个任务可以获得和拥有一个互斥量,也只有这个任务随后才能释放这个互斥量互斥量是取值为0-1的二元信号量,互斥量管理,创建互斥量(MutexCreate)删除互斥量(MutexDelete)等待互斥量(MutexPend)释放互斥量(MutexPost)无等待获取互斥量(MutexAccept),互斥量管理(sidsa API),NA,互斥量管理(kernel API),cyg_mutex_i
24、nitcyg_mutex_destroycyg_mutex_lockcyg_mutex_trylockcyg_mutex_unlockcyg_mutex_releasecyg_mutex_set_ceilingcyg_mutex_set_protocol,事件标志(Event Flags),事件标志用于任务与多个事件的同步独立型同步(即逻辑或关系):任务需要与任何事件之一发生同步关联型同步(逻辑与关系):任务需要与若干事件都发生了同步事件标志通常为32位变量,每个事件占一位(bit),当一个标志处于设置状态(1)时,表示相关事件已经发生,事件标志组管理,创建事件标志组(FLagCreate)置
25、位事件标志(FlagPost)等待事件标志位(FlagPend)无等待获取事件标志位(FlagAccept)清除事件标志位(FlagClear)在再次发送事件标志前,应先清除该标志,事件标志组管理(sidsa API),ev_sendULONG ev_send(ULONG tid,ULONG events)ev_receiveULONG ev_receive(ULONG events,ULONG flags,ULONG timeout,ULONG*events_r),事件标志组管理(kernel API),cyg_flag_initcyg_flag_destroycyg_flag_setbit
26、scyg_flag_maskbitscyg_flag_waitcyg_flag_timed_waitcyg_flag_pollcyg_flag_peekcyg_flag_waiting,消息邮箱(Message Box),消息邮箱也称作交换消息,是用一个指针型变量放到邮箱,该指针指向的内容就是那则消息消息邮箱用于一个线程向另一个线程发送消息,实现线程间通信用一个I 字表示邮箱符号,消息邮箱管理,创建邮箱(MboxCreate)发送消息(MboxPost)消息放入邮箱后,或者是把消息传给等待消息的任务表中优先级最高的那个任务(基于优先级),或者是将消息传给最先开始等待消息的任务(基于先进先出)邮
27、箱只能保存一个消息,试图向已存有消息的邮箱发送消息会导致“邮箱满”错误等待消息(MboxPend)等待消息的任务会因为邮箱是空的而被挂起,且被记录到等待消息的任务表中,直到收到消息无等待取消息(MboxAccept)如果邮箱是空的任务也不会挂起,此时返回值为NULL表示无消息,消息邮箱管理(sidsa API),NA,消息邮箱管理(kernel API),cyg_mbox_createcyg_mbox_deletecyg_mbox_getcyg_mbox_timed_getcyg_mbox_trygetcyg_mbox_peekcyg_mbox_peek_itemcyg_mbox_putcyg
28、_mbox_timed_putcyg_mbox_tryputcyg_mbox_waiting_to_getcyg_mbox_waiting_to_put,消息队列(Message Queue),消息队列实际上是邮箱阵列任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO)用2个I 字表示邮箱队列符号,消息队列管理,创建消息队列(QCreate)发送消息(QPost)消息放入消息队列后,或者是把消息传给等待消息的任务表中优先级最高的那个任务(基于优先级),或者是将消息传给最先开始等待消息的任务(基于先进先出)如果消息队列内的消息已满,会导致“消息满”错误等待消息(QPend)等待消息的
29、任务会因为消息队列是空的而被挂起,直到收到消息无等待取消息(QAccept)如果邮箱是空的任务也不会挂起,此时返回值为NULL表示无消息,消息队列管理(sidsa API),q_createULONG q_create(char name4,ULONG count,ULONG flags,ULONG*qid)q_deleteULONG q_delete(ULONG qid)q_sendULONG q_send(ULONG qid,ULONG msg_buf4)q_receiveULONG q_receive(ULONG qid,ULONG flags,ULONG timeout,ULONG m
30、sg_buf4),消息队列管理(kernel API),NA,设备驱动程序概述,1、I/O的特点(1)I/O性能经常成为系统性能的瓶颈CPU性能不等于系统性能,响应时间也是一个重要因素CPU性能越高,与I/O差距越大 弥补:更多的线程线程切换多,系统开销大(2)操作系统庞大复杂的原因之一是:资源多、杂,并发,均来自I/O 外设种类繁多,结构各异 输入输出数据信号类型不同 速度差异很大(3)理解I/O的工作过程与结构是理解操作系统的工作过程与结构的关键,(1)按照用户的请求,控制设备的各种操作,完成I/O设备与内存之间的数据交换(包括设备分配与回收;设备驱动程序;设备中断处理;缓冲区管理),最终
31、完成用户的I/O请求设备分配与回收 记录设备的状态 根据用户的请求和设备的类型,采用一定的分配算法,选择一条数据通路 建立统一的独立于设备的接口完成设备驱动程序,实现真正的I/O操作处理外部设备的中断处理管理I/O缓冲区,设备管理的目标和任务,(2)向用户提供使用外部设备的方便接口,使用户摆脱繁琐的编程负担 方便性 友好界面 透明性屏蔽硬件细节(设备的物理细节,错误处理,不同I/O的差异性)(3)充分利用各种技术(通道,中断,缓冲等)提高CPU与设备、设备与设备之间的并行工作能力,充分利用资源,提高资源利用率 并行性 均衡性(使设备充分忙碌),设备管理的目标和任务(续),(4)保证多个线程竞争
32、使用设备时,按一定策略分配和管理各种设备,使系统能有条不紊的工作(5)保护 设备传送或管理的数据应该是安全的、不被破坏的、保密的(6)与设备无关性(设备独立性)用户在编制程序时,使用逻辑设备名,由系统实现逻辑设备到物理设备(实际设备)的转换,用户能独立于具体物理设备而方便的使用设备,设备管理的目标和任务(续),用户申请使用设备时,只需要指定设备类型,而无须指定具体物理设备,系统根据当前的请求,及设备分配的情况,在相同类别设备中,选择一个空闲设备,并将其分配给一个申请线程统一性:对不同的设备采取统一的操作方式,在用户程序中使用的是逻辑设备优点:设备忙碌或设备故障时,用户不必修改程序改善了系统的可
33、适应性和可扩展性,设备管理的目标和任务(续),设备独立的软件,虽然IO软件中一部分是设备专用的,但大部分软件是与设备无关的。设备驱动程序与设备独立软件之间的确切界限是依赖于具体系统的,1.独立于设备的软件的基本任务是实现所有设备都需要的功能,并且向用户级软件提供一个统一的接口 2.如何给文件和设备这样的对象命名是操作系统中的一个主要课题。独立于设备的软件负责把设备的符号名映射到正确的设备驱动上 3.设备保护 系统如何防止无权存取设备的用户存取设备呢?4.缓冲技术 5.设备分配 6.出错处理,设备独立的软件(续),(1)缓冲技术的引入 凡是数据到达和离去速度不匹配的地方均可采用缓冲技术。在操作系
34、统中采用缓冲是为了实现数据的I/O操作,以缓解CPU与外部设备之间速度不匹配的矛盾,提高资源利用率减少了I/O设备对处理器的中断请求次数简化了中断机制节省了系统开销(2)缓冲区设置 硬缓冲:在设备中设置缓冲区,由硬件实现 软缓冲:在内存中开辟一个空间,用作缓冲区,缓冲技术,1.设备分配与回收 当某线程向系统提出I/O请求时,设备分配程序按一定策略分配设备、控制器和通道,形成一条数据传输通路,以供主机和设备间信息交换设备独立性,即不能因为设备的忙碌、故障或更换而影响程序的运行,向用户屏蔽物理设备,呈现给用户的一个操作简单的逻辑设备由于在多线程程序系统中,线程数多于资源数,引起资源的竞争。因此,要
35、有一套合理的分配原则,考虑的因素:I/O设备的固有属性I/O设备的分配算法设备分配的安全性与设备的无关性独占设备的分配,要考虑充分发挥效率,避免由于不合理的分配策略造成死锁共享设备分配 由于同时有多个线程同时访问,且访问频繁,就会影响整个设备使用效率,影响系统效率。因此要考虑多个访问请求到达时服务的顺序,使平均服务时间越短越好,设备处理,为了控制I/O传输,系统为每类设备编制设备驱动程序 任务:主要负责接收和分析从设备分配转来的信息,并根据设备分配的结果,结合具体物理设备特性完成以下具体工作:(1)预置设备的初始状态(2)根据请求传输的数据量,组织I/O缓冲队列,利用I/O缓冲对数据进行加工,包括数据格式处理和编码转换(3)构造I/O程序(在有通道系统中,是通道程序)(4)启动设备进行I/O操作,设备驱动程序,CAM开发平台的DEVICE,UARTTIMERSCARDPICPCMCIAMPEG,CAM产品软件体系结构,