chap02-实时系统概念

上传人:小** 文档编号:88101343 上传时间:2019-04-19 格式:PPT 页数:106 大小:1.06MB
返回 下载 相关 举报
chap02-实时系统概念_第1页
第1页 / 共106页
chap02-实时系统概念_第2页
第2页 / 共106页
chap02-实时系统概念_第3页
第3页 / 共106页
chap02-实时系统概念_第4页
第4页 / 共106页
chap02-实时系统概念_第5页
第5页 / 共106页
点击查看更多>>
资源描述

《chap02-实时系统概念》由会员分享,可在线阅读,更多相关《chap02-实时系统概念(106页珍藏版)》请在金锄头文库上搜索。

1、1,2019/4/19,嵌入式实时操作系统 C/OS-II,2019/4/19,2,第2章 实时系统概念,3,2019/4/19,实时系统概念,软实时系统-各个任务尽快运行,不要求限定某一任务在多长时间内完成。 硬实时系统-任务要做到准时。,2.0 前/后台系统,不复杂的小系统一般设计成如下图所示的样子。这种系统可称为前后台系统或超循环系统(Super-Loops)。,4,2019/4/19,5,2019/4/19,后台是一个循环轮询系统一直在运行。 前台是由一些中断处理过程组成的。 当有一前台事件(外部事件)发生时,引起中断, 进行前台处理, 处理完成后又回到后台(通常又称主程序)。,中断1

2、,中断2,ISR1,ISR2,前台处理,后台处理,ISR3,实时性?,认为所有的任务具有相同的优先级别 任务的执行通过FIFO队列排队 某执行任务崩溃会造成整个系统的崩溃,应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可以看成前台行为(foreground)。后台也可以叫做任务级。前台也叫中断级。,8,2019/4/19,9,2019/4/19,时间相关性很强的关键操作(Critical operation)一定是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台程序走到该处理这个信息这一步时

3、才能得到处理,这种系统在处理信息的及时性上,比实际可以做到的要差。这个指标称作任务级响应时间。最坏情况下的任务级响应时间取决于整个循环的执行时间。因为循环的执行时间不是常数,程序经过某一特定部分的准确时间也是不能确定的。进而,如果程序修改了,循环的时序也会受到影响。,2.01 代码的临界段,代码的临界段也称为临界区,指处理时不可分割的代码。 一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。,10,2019/4/19,2.02 资源,资源-任何为任务所占用的实体都可称为资源。 资源可以是输入输出设备,例如打印机、

4、键盘、显示器,资源也可以是一个变量,一个结构或一个数组等。,11,2019/4/19,2.03 共享资源,共享资源-可以被一个以上任务使用的资源叫做共享资源。 为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源。这叫做互斥(mutual exclusion)。,12,2019/4/19,2.04 多任务,多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行很像前后台系统,但后台任务有多个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很

5、复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。,13,2019/4/19,流程,并发多任务,:,:,后台,前台,ISRs,Tasks,多任务系统 多个顺序执行的程序并行运行。 宏观上看,所有的程序同时运行,每个程序运行在自己独立的CPU上。 实际上,不同的程序是共享同一个CPU和其它硬件。因此,需要RTOS来对这些共享的设备和数据进行管理。 每个程序都被编制成无限循环的程序,等待特定的输入,执行相应的任务等。 这种程序模型将系统分成相对简单的,相互合作的模块。,单处理器多任务系统,优点 将复杂的系统分解为相对独立的多个线程, 达到“分而治之”的目的,从而降低系统的复杂性。 保证

6、系统的实时性。 系统的模块化好,提高系统的可维护性。 缺点 需要采用一些新的软件设计方法。 需要增加功能:线程间的协调,同步和通信功能。 需要对每一个共享资源互斥。 导致线程间的竞争。 需要使用RTOS,RTOS要增加系统的开销。,单处理器多任务系统,多处理器多任务系统,多任务可运行在多个处理器上,由操作系统统一调度,处理。 宏观上看是并发的,微观上看也是并发的。 多处理机系统分为紧耦合系统(tightly-coupled system)和松耦合系统(loosely-coupled system)两种。 多处理器多任务系统目前还不成熟。,2.05 任务,18,2019/4/19,一个任务,也称

7、作一个线程,是一个简单的程序,该程序可以认为CPU 完全只属该程序自己。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套CPU 寄存器和自己的栈空间。,19,每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下,这5 种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态。 休眠态-相当于该任务驻留在内存中,但并不被多任务内核所调度。 就绪态-意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。,20,运行态-是指该任务掌握了CPU 的控制

8、权,正在运行中。 挂起状态-也可以叫做等待事件态WAITING,指该任务在等待,等待某一事件的发生,(例如等待某外设的I/O 操作,等待某共享资源由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)。 被中断态-发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。,21,22,休眠态,挂起态,被中断态,运行态,就绪态,2.06 任务切换(Context Switch or Task Switch),Context Switch 在有的书中翻译成上下文切换,实际含义是任务切换,或CPU 寄存器内容切换。 当多任务内核决定运

9、行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU寄存器中的全部内容。这些内容保存在任务的当前状况保存区(Tasks Context Storage area),也就是任务自己的栈区之中。 任务切换-入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU 的寄存器,并开始下一个任务的运行。 任务切换过程增加了应用程序的额外负荷。,2.07 内核(Kernel),多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。 内核本身也增加了应用程序的额外负荷,代码空间增加ROM 的用量

10、,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU 的占用时间一般在2 到5个百分点之间。,2.08 调度(Scheduler),调度(Scheduler),英文还有一词叫dispatcher,也是调度的意思。这是内核的主要职责之一,就是要决定该轮到哪个任务运行了。 多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行。 让高优先级任务掌握CPU 的使用权,有两种不同的情况,不可剥夺型内核 可剥夺型内核。,2.09 不可剥

11、夺型内核 (Non-Preemptive Kernel),不可剥夺型内核要求每个任务自我放弃CPU 的所有权。不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。 不可剥夺型内核的一个优点是响应中断快。 在任务级,不可剥夺型内核允许使用不可重入函数。,不可剥夺型内核示例,不可剥夺型内核的最大缺陷在于其响应时间。高优先级的任务已经进入就绪态,但还不能运行,要等,也许要等很长时间,直到当前运行着的任务释放CPU。不可剥夺型内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU 的控制权,完全取决于应用程序什么时候释放CPU。 商业软件几乎没有不可剥夺型内核。,

12、2.10 可剥夺型内核,当系统响应时间很重要时,要使用可剥夺型内核。因此,C/OS-以及绝大多数商业上销售的实时内核都是可剥夺型内核。 最高优先级的任务一旦就绪,总能得到CPU 的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。,可剥夺型内核示例,使用可剥夺型内核,最高优先级的任务什么时候可以执行,可以得到CPU 的控制权是可知的。使用可剥夺型内核使得任务级响应时间得以最优化。 使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用

13、互斥型信号量来实现。,可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。 可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。,2.11 可重入性(Reentrancy),可重入型函数,void strcpy(char *dest, char *src) while (*dest+ = *src+) ; *dest = NUL; ,不可重入型函数,int Temp; void swap(int *x, int *y) Temp = *x; *x =

14、*y; *y = Temp; ,使用以下技术之一即可使Swap()函数具有可重入性: 把Temp 定义为局部变量 调用Swap()函数之前关中断,调动后再开中断 用信号量禁止该函数在使用过程中被再次调用,2.12 时间片轮番调度法,当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间,叫做时间额度(quantum),然后切换给另一个任务。也叫做时间片调度。内核在满足以下条件时,把CPU控制权交给下一个任务就绪态的任务: 当前任务已无事可做 当前任务在时间片还没结束时已经完成了。 目前,C/OS-不支持时间片轮番调度法。应用程序中各任务的优先级必须互不相同。,2.13 任务优

15、先级,每个任务都有其优先级。任务越重要,赋予的优先级应越高。,2.14 静态优先级,应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。,2.15动态优先级,应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。实时内核应当避免出现优先级反转问题。,2.16优先级反转,使用实时内核,优先级反转问题是实时系统中出现得最多的问题。 为防止发生优先级反转,内核能自动变换任务的优先级,这叫做优先级继承(Priority inheritance)。但C/OS-不支持优先级继承,一些商业内核有优先级继承功能。,2.17 任务优先

16、级分配,给任务定优先级可不是件小事,因为实时系统相当复杂。许多系统中,并非所有的任务都至关重要。不重要的任务自然优先级可以低一些。实时系统大多综合了软实时和硬实时这两种需求。软实时系统只是要求任务执行得尽量快,并不要求在某一特定时间内完成。硬实时系统中,任务不但要执行无误,还要准时完成。 单调执行率调度法RMS(Rate Monotonic Scheduling)-用于分配任务优先级。这种方法基于哪个任务执行的次数最频繁,执行最频繁的任务优先级最高。,2.18 互斥条件,实现任务间通讯最简便到办法是使用共享数据结构。特别是当所有到任务都在一个单一地址空间下,能使用全程变量、指针、缓冲区、链表、循环缓冲区等,使用共享数据结构通讯就更为容易。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互斥条件最一般的方法有:,关中断 使用测试并置位指令 禁止做任务切换 利用信号量,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号