ucos-II中的一些基本概念①



一、实时系统

软实时系统:软实时系统中系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成

硬实时系统:在硬实时系统中,各任务不仅要执行无误而且要做到准时

 

二、前后台系统

前后台系统又称循环系统,应用程序为一个无限循环。在循环中完成的工作称为后台行为,由中断触发的中断服务程序完成的工作称为前台行为。所以,后台又称为任务级,前台也称为中断级。时间相关性很强的关键操作一定是靠中断服务来保证的但是由于中断任务的执行要等到后台执行到这个任务时才可以触发,所以实际花费的时间要比预想的慢一点,这个指标称作任务级响应时间取决于整个循环执行的时间。

 

三、代码的临界段

这段代码一旦执行就不允许被打断,所以在执行这段代码前,要将中断关掉。

 

四、资源

任何为任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量,一个结构或一个数组

 

五、共享资源

可以被一个以上的任务使用的资源成为共享资源。

为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源。这叫做互斥

 

六、多任务

多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度

多任务与后台有些相似,但是后台系统的任务有多个,CPU只有一个

多任务运行使CPU的利用率得到最大的发挥

 

七、任务

1.一个任务也称作一个线程

2.一个应用程序是多个任务组成的,每个任务有自己的优先级,拥有自己的CPU寄存器和栈空间,每个任务都是一个无限循环

3.每个任务有五种状态:休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态

休眠状态:任务只是以代码的形式驻留在程序空间(ROMRAM),还没有交给操作系统进行管理

就绪状态:该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行

运行状态:该任务掌握了CPU的控制权,正在运行中

挂起状态:挂起状态也可以叫做等待事件态WAITING,指该任务在等待已经交出CPU的使用权,等待某一事件的发生,(例如等待某外设的I/O操作,等待某共享资源由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)

中断状态:发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态中断执行完后会继续返回执行

 

  1. 任务切换

    Context switch , 任务切换或者CPU寄存器内容切换,任务切换的步骤:

  1. 保存当前运行任务的状态,CPU寄存器中的全部内容这些任务状态保存在任务自己的栈区中

  2. 把将要运行的任务的当前状态从栈中重新载入到CPU的寄存器,并且开始运行

    任务切换的时间取决于CPU有多少寄存器要入栈

     

  1. 内核

    1.内核的作用是负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯提供的基本服务是任务切换

    2.实时内核:实时内核允许将应用分成若干个任务,由实时内核来管理它们所以会大大简化应用系统的设计

    3.但是由于内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量单片机一般不能运行实时内核

     

  2. 调度

    1.调度是内核的职责之一,就是要决定该轮到哪个任务运行了

    2.多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行。但是,究竟何时让高优先级任务掌握CPU的使用权,要看用的是什么类型的内核,是不可剥夺型的还是可剥夺型内核

     

    十一、不可剥夺型内核

    1.所谓不可剥夺型内核,就是要求每个任务能够自我放弃CPU的所有权

2.不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态等待状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。

3.优点:

①响应中断快。不可剥夺型内核允许使用不可重入函数每个任务都可以调用非可重入性函数,而不必担心其它任务可能正在使用该函数,从而造成数据的破坏因为每个任务要运行到完成时才释放CPU的控制权

几乎不需要使用信号量保护共享数据因为运行着的任务占有CPU,不必担心被别的任务抢占当然也不是绝对的

  1. 缺点任务级响应时间不确定,不知道什么时候最高优先级的任务才能拿到CPU的控制权

     

    十二、可剥夺型内核

1.可剥夺型内核的特点是最高优先级的任务一旦就绪,总能得到CPU的控制权具体表现为:当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权

如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行

  1. 优点:最高优先级的任务什么时候可以执行,可以得到CPU的控制权是可知的。使用可剥夺型内核使得任务级响应时间得以最优化

  2. 注意点:应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用互斥型信号量来实现如果直接调用不可重入型函数时,低优先级的任务CPU的使用权被高优先级任务剥夺,不可重入型函数中的数据有可能被破坏。

     

  1. 可重入性

  1. 概念:可以被一个以上的任务调用,而不必担心数据的破坏

  2. 特点:任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失

  3. 注意点:可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。

     

  1. 时间片轮番调度法

    当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间,叫做时间额度(quantum,然后切换给另一个任务。也叫做时间片调度。

    内核在满足以下条件时,把CPU控制权交给下一个任务就绪态的任务:

  • 当前任务已无事可做

  • 当前任务在时间片还没结束时已经完成了。

    目前,μC/OS-Ⅱ不支持时间片轮番调度法。应用程序中各任务的优先级必须互不相同。

     

  1. 静态优先级

    应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。

     

  2. 动态优先级

    应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。实时内核应当避免出现优先级反转问题。

     

  3. 优先级反转

    优先级反转是在使用实时内核是经常出现的问题

    如果低优先级的任务占用着高优先级任务需要用到的资源的话,高优先级需要等待低优先级的任务释放该资源才得以运行,此时,次高优先级的任务剥夺了低优先级任务的CPU使用权,使得次高优先级的任务首先完成,此时,最高优先级任务的次高优先级任务的优先级实际上发生了反转。

    解决方法:低优先级任务使用共享资源时,提升低优先级任务的优先级。任务完成时予以恢复。低优先级任务的优先级必须升至最高,高于允许使用该资源的任何任务。

    优先级继承:为防止发生优先级反转,内核能自动变换任务的优先级

     

  4. 任务优先级分配

  1. 单调执行率调度法RMS(Rate Monotonic Scheduling)

    这种方法基于哪个任务执行的次数最频繁,执行最频繁的任务优先级最高

    RMS做了一系列假设:

  • 所有任务都是周期性的

  • 任务间不需要同步,没有共享资源,没有任务间数据交换等问题

  • CPU必须总是执行那个优先级最高且处于就绪态的任务。换句话说,要使用可剥夺型调度法。

     RMS认为最高执行率的任务具有最高的优先级,但最某些情况下,最高执行率的任务并非是最重要的任务

     

  1. 互斥条件

    虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。

    与共享资源打交道时,使之满足互斥条件最一般的方法有:

  • 关中断

  • 使用测试并置位指令

  • 禁止做任务切换

  • 利用信号量

     

     

你可能感兴趣的:(ucosⅡ读书笔记)