收藏 分享(赏)

第八节嵌入式操作系统(1).ppt

上传人:11xg27ws 文档编号:8229618 上传时间:2019-06-15 格式:PPT 页数:36 大小:110KB
下载 相关 举报
第八节嵌入式操作系统(1).ppt_第1页
第1页 / 共36页
第八节嵌入式操作系统(1).ppt_第2页
第2页 / 共36页
第八节嵌入式操作系统(1).ppt_第3页
第3页 / 共36页
第八节嵌入式操作系统(1).ppt_第4页
第4页 / 共36页
第八节嵌入式操作系统(1).ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、第八节 实时操作系统原理(1),(1)基本概念 (2)任务 (3)任务间同步与通信,1、基本概念 操作系统发展简史: 无操作系统的应用软件:缺乏可移植性,修改困难,维护费用高。 软件工业化:操作系统为应用软件提供基础,对基本硬件进行抽象,完成多任务应用。 GPOS:UNIX:大型计算机-微型计算机、多任务支持Windows:个人计算机、图形化界面Vxworks:后PC时代,嵌入式计算时代,更小、更紧凑的RTOS。,RTOS与GPOS: 相似的功能:多任务;软件和硬件资源管理;为应用提供基本的OS服务;抽象硬件。 不同点:具有更好的可靠性;满足应用需要的可裁减性;更好的实时性;支持无盘的ROM或

2、RAM引导和运行;对不同的平台具有更好的可移植性。,RTOS关键特性: 可靠性:嵌入式系统必须长期无人干涉的运行。不同系统可靠性不同。电信交换设备可靠性要达到6个9(99.9999%)一年宕机时间031s,飞机出故障的概率要达到10-9,分系统更高,对其中的嵌入式系统设备(RTOS、BSP、硬件等)要求更高。 可预测性(确定性):具有可预测的行为,操作系统调用必须在已知的时间框架内完成。 性能:必须执行的足够快来满足时间要求。包括硬件和软件的速度。 紧凑性:硬件资源有限,RTOS必须小巧高效。如内存有限时如何分配。 可裁减性:RTOS要适合各种嵌入式系统应用,如文件系统、协议栈等。节约成本,R

3、TOS编程特点: (1)RTOS允许用户把一个应用系统分成多个任务,使应用程序变得简单,简化了应用程序的设计,更便于修改、扩展和维护。无须改动就可以增加新的功能。如果只给系统增加低优先级的任务,则系统对高优先级的响应几乎没有影响。 将应用分成多个任务会引起一系列的问题,如任务间的竞争,竞争会引起死锁(死机);另外就是优先级反转,以及任务间的同步、通信等。计算机专家发明的实时多任务操作系统会解决这些问题。必须学习基本原理以便用好。,(2) RTOS基于计算机技术研究成果,可以保证应用系统的实时性达到或接近理论水平。 (3)在抢占式内核中,所有时间要求苛刻的事件都能得到尽可能快地响应,通过有效的服

4、务,如信号量、消息队列、管道、延时以及超时等,RTOS使得系统资源得到更好的应用。 (4)可以提高系统的稳定性和可靠性,实现对系统的实时监管。采用RTOS额外的需求:RTOS的价格、每个目标系统的版权使用费、额外的RAM/ROM开销以及2%4%的CPU额外的负荷。,RTOS通常包括: 调度器(scheduler): 一组算法决定何时执行哪个任务,常见的调度算法包括时间片轮换(round-robin)和抢占调度(preemptive); 对象(Object):内核部件,帮助建立应用,如任务、信号灯和消息队列等。 服务(service):内核在对象上的操作,如计时、中断处理和资源管理等。,基本概念

5、: 可调度实体:可以依据预定义的调度算法,竞争到系统执行时间的内核对象。任务 多任务:操作系统在设定的限时内处理多个活动的能力。调度器必须保证适当的任务在恰当的时间运行。 上下文切换context switch :每个任务都有自己的上下文,即每次被调度运行时所要求的CPU寄存器的状态和变量值等到自己的TCB (Task Control Block)中。任务切换时产生上下文切换。任务控制块TCB用来维护任务特定信息的系统数据结构。不要频繁进行任务切换。 分发器(dispatcher):是调度器的一部分,执行上下文切换并改变执行的流程。流程:应用任务、ISR和内核。,2、任务,传统的程序按预先定义

6、的指令顺序运行,不适合对时间要求苛刻的系统。采用并发的方式设计(concurrent design)。并发设计:将应用分解成很小的、可调度的顺序程序单元(任务)。 任务:是一个被封装的操作序列,按照任务的紧急程度和重要性设定优先级。在多任务系统中,任务由操作系统按照某种调度策略调度运行。根据预先定义的调度算法能够竞争到系统的执行时间。任务具有名字、唯一的ID、优先权、任务控制块TCB、堆栈和任务例程。,系统任务:内核启动时,创建系统任务,将保留的优先权分配给他们,内部使用。系统任务包括: (1)初始化或启动任务:初始化系统并创立和启动任务系统; (2)空闲任务:当没有其他任务时,使系统进入空闲

7、循环;优先级最低,保证程序计数器的值是合法的。有时候可以用用户自己的任务来替代空闲任务,以便实现某些特殊的需要,如设置省电模式代码,进入省电模式, (3)日志任务:记录系统消息日志; (4)异常处理任务:处理异常; (5)调试代理任务:与宿主机调试器一起运行。,任务的状态: 包括就绪、运行或阻塞状态(系统任务、应用任务) 就绪状态(ready):任务准备就绪,但还不能运行,因为还有更高优先级的任务在运行; 阻塞状态(blocked):已经请求一个还不能用的资源,或已经请求等待某些时间的发生,或自身要延时一段时间。有些系统细分出悬挂(等待被释放的资源)和延时状态(等待延时时间结束)。 运行状态(

8、running):是最高优先级并正在运行。 挂起状态(suspended):用于调试的辅助状态,禁止任务的执行。 内核必须维护系统中所有任务的当前状态。确定哪些任务必须改变状态以及实施改变,如获取资源-解除组塞-任务切换-运行等。,任务的操作,(1)创建和删除OSTaskCreate(); OSTaskDelete(); (2)获取任务的信息OSTaskQuery(); (3)任务的调度 OSTaskChangePrio();OSTaskSuspend(); OSTaskResume();,任务的创建,创建就启动 创建然后启动:两步,先建立并挂起,然后启动转移到就绪状态。 创建后返回任务的ID

9、号,任务的删除,根据任务号删除任务,内核通过删除任务的TCB和堆栈来删除任务。很多内核允许任意的任务删除其他任务。 由于任务可以和其他任务通信和共享资源,如果不恰当的删除任务,可能导致这些资源无法释放,造成内存泄露或资源泄露。如: 一个崩溃的数据结构 一个未释放的信号量,其他任务还要使用但无法使用 一个不可访问的数据结构(由于未释放信号量),任务的调度,多任务需要一个调度算法分配CPU给就绪的任务,常见的任务调度算法:基于优先权的抢占式调度时间轮换调度-基于优先权抢占调度扩充时间轮换调度 (1)基于优先级调度,可剥夺型和不可剥夺型。 创建时:任务被指定一个优先级, 运行时:可以动态地修改优先级

10、以便跟踪真实世界的事件优先级。 外部中断:被指定优先于任何任务的优先级,这样能够在任何时候抢占一个任务。,(2)时间片轮换调度:有些操作系统在多个任务有同样的优先级时采用,允许一个任务先运行一段时间,然后切换给另外一个任务,在以下条件下内核将CPU控制权交给下一个就绪的任务: A、当前任务空闲; B、当前任务时间片还没有结束时已经完成; C、时间片结束,计数器会被清零,该任务被放在同一优先级任务队列的队尾。 有些不支持此功能,要求任务的优先级必须不同。,典型的任务结构,编写任务代码时,采用以下两种结构方式之一建立任务。 (1)运行到完成:初始化和启动,系统加电运行一次。初始化任务比其他所创立的

11、任务具有较高的优先级,以便初始化不被抢占,在完成初始化工作后挂起或删除自己。 (2)无限循环:应用任务。 也可以包含初始化代码,但仅仅在任务第一次运行时被执行。然后任务无限循环。在循环体中有一个或多个阻塞调用,致使无限循环任务的阻塞,允许较低优先级任务运行。,任务的划分原则: 合理的划分对运行效率、实时性等影响非常大。过细导致任务切换和数据交换量大,过粗导致可以并行执行的动作串行执行。 先将任务划分为:关键、基本和不重要。 关键任务:必须满足时限要求,优先处理。 基本任务:也有时限要求,但是不是太严格。 不重要任务:理论上可以无限期等待。 任务的特点: 1、时间:两个任务具有不同的周期。 2、

12、异步性:两个任务之间没有时间关系。 3、优先级:两个任务具有不同的优先级 4、清晰性/可维护性:两个任务在功能和逻辑上可以分开。 各任务之间通信量要少(过多的数据交换可以考虑合并为一个任务),控制关系要松(一个任务控制另外一个任务的运行)。,3、任务间同步与通信,(1)信号量 (2)消息队列 其他的还包括管道、事件寄存器等。,互斥条件,实现任务间通信最简便的方法就是使用 共享数据结构,但是必须保证每个任务在使用数据结构时的排他性,以避免竞争和数据的破坏,与共享数据打交道时,使之满足互斥条件最一般的方法有:,1、关中断和开中断最简单,但是关中断时间不能过长,影响整个系统的中断响应时间。 2、使用

13、测试位并置位指令 多个任务在访问共享资源时,先测试一全局变量的值,若为0则允许访问共享资源,得到访问权后应该将该全局变量置位为1,禁止其他任务访问该共享资源,测试并置位的操作可能使用CPU的一条不会被中断的指令,否则应该在程序中关中断作置位操作后再开中断。有些CPU有硬件的TAS指令(Test and Set)。,3、禁止/允许任务切换 通常引起正在运行的任务被挂起的原因是:产生中断或有更高级的任务就绪。 如果任务不与任何中断服务程序共享资源(变量和数据结构),可以使用禁止然后允许任务切换来满足实现互斥。在禁止任务切换后,如果任务正在访问共享数据产生了中断,由于在中断服务程序中不会访问共享数据

14、区,所以不会产生冲突。当中断服务程序返回后,虽然有更高优先级的任务就绪,但是内核不会进行切换,还是返回到原来被中断了的任务执行,此时类似不可剥夺型内核一样。直到任务结束允许任务切换。近量少用。 4、用信号量,一个信号量就像一把钥匙,允许任务执行某些操作或访问一个资源。一个信号量可以被访问多次,就如同宿舍管理员的钥匙一样。在创立时设定一个初始值,当一个任务获得信号量时,令牌计数被减一次,当任务释放信号灯时,令牌计数增加一次,如果计数为0,没有令牌留下,请求的任务不能获得令牌而阻塞。任务等待列表中记录所有的由于等待信号量而阻塞的任务。这些被阻塞的任务以FIFO的方式或优先级的次序保存在任务等待列表

15、中。 多个运行的任务可以获得或释放它,达到同步或互斥的目的。 信号量被创建时,内核分配给它一个信号量相关的控制块SCB、一个唯一的ID、一个值和一个等待任务列表。 有三种类型的信号量:二值、计数(较少使用)和互斥。,二值信号量,取值只能为0或1。0为不可使用,1为可使用。 为全局资源,可以被需要信号灯的所有任务共享,允许任何任务甚至没有获取它的任务释放它。,计数信号量,允许多次获取和释放,初始值创立时为0表示不能使用,大于0表示可以使用的令牌的个数。 一个或多个 任务可以连续获得计数信号量的一个令牌,直到没有令牌留下。 一个信号量令牌可以被任意的任务释放。 有界信号量:创立时,设置其初始值为其

16、最大值。 无界信号量:允许超过其初始值,直到数据类型的最大值。,互斥信号量,互斥信号量支持所有权、任务删除安全和避免优先级反转。 创立时为开锁状态,可以被使用。获取后变成闭锁状态。 (1)所有权:当任务获取信号量时将其锁住得到其所有权,此时任何其他任务不可能开启此信号量。而二值信号量可以被任何任务释放。 (2)任务删除安全:保证当一个任务拥有互斥信号量时,该任务不能被删除。,(3)递归的锁闭:允许拥有互斥信号量的任务在锁闭的状态多次获取他,当一个任务要求对一个共享资源进行排他性的访问而调用一个或多个例程,例程也需要对同样的资源进行访问时,常采用这种信号量。允许嵌套锁闭。互斥信号灯还是两个状态0

17、和1,需要一个锁计数器追踪他在闭锁状态已经被获取的次数。与计数信号量不同。 (4)避免优先级反转的问题:三个任务H、L和M。优先级为H M L ,而且H和L共享(写)同一块内存。为了保证数据的完整性,用一个信号量S来保护对这一块内存的访问。,一、任务L运行,要对共享内存块写操作,它先获得信号量S的所有权。 二、在还未完成写操作时,高优先级的任务H产生中断要求运行,调度器将L切换掉,运行H。 三、H运行,要对共享内存进行写操作,但由于L占有信号量S,所以H被阻塞,运行L。 四、L运行时,任务M产生中断请求运行,调度器切换掉L运行M。产生问题:H的优先级比M高,但是它在等待L放弃对信号量S的控制权

18、而导致M先运行。而且只要在L没有放弃信号量S前有比L优先级高的任务产生中断,都先于H运行,这样就会导致H无法在规定的时限内完成,产生严重的后果。,避免优先级反转的方法: (1)优先级继承协议在第三步:H被阻塞,内核在将控制权切换给L之前,根据信号量S的信息将其优先级提高到与H同等,这样当M请求中断时就不会得到响应,直到L放弃对S的所有权,恢复运行,运行完后才可能运行。这种机制就是优先级继承。 (2)天花板优先权协议保证获取信号量的任务优先级自动的设定为所有可能请求信号量的任务中的最高优先级,从他获得信号量的时候开始直到释放。当互斥信号量释放后任务的优先级降回到原来的级别。,信号量的操作,(1)

19、创立和删除 (2)获取和释放 (3)清除信号量的任务等待列表Flush() 多个任务完成预定的任务后企图获得一个公用信号量时阻塞,在最后一个任务完成其预定的任务后对公用的信号量执行Flush() 操作释放任务等待列表中的所有任务,实现同步。 (4)获取信号量信息,典型的信号量的使用,对多任务同步和协调共享资源访问很有用。 (1)等待和信号同步 二值信号量最初不可使用,任务tWaitTask具有较高的优先级先运行但信号量不可用而阻塞,tSignalTask运行后释放该二值信号量从而tWaitTask不再阻塞,实现两任务的同步。在tWaitTask中 获取信号量在tSignalTask中释放信号量

20、,(2)多任务等待和信号同步 Task1、2、3优先级高运行、阻塞,低优先级任务4运行并运行Flush命令释放等待任务列表,使Task1、2、3得到运行。 Flush:清除等候一个信号量任务等待列表中的所有任务,打开所有等待信号量的任务。,(3)单一共享资源的访问同步 tAcessTask1获得控制权,访问,释放信号量。,先获取信号量再访问,因为其他任务也有权释放普通的信号量,所以可能还没用完就被其他的任务给释放了,可以使用互斥信号量支持所有权特性来实现。,(4)递归共享资源访问同步 采用递归互斥信号量,否则会引起死锁,(5)多个共享资源访问同步 采用二值信号量同样可能被其他任务释放,可以采用互斥信号量。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报