9、AUTOSAR操作系统1--任务管理与中断处理

目录

1、任务管理

2、中断处理


        操作系统(Operating System,OS)是用于管理计算机硬件和计算机软件资源并为用户程序提供通用服务的系统软件。同时,它也是计算机系统软件的重要组成部分,用户程序通常需要基于操作系统才能正常运行。它的主要功能有任务管理、事件管理、CPU管理、I/O管理、消息通信以及内存管理等。 

        实时操作系统(Real Time Operating System,RTOS)是操作系统的一种。实时操作系统对系统的实时性要求较高,需要保证在特定的时间内完成相应的事件或数据。实时操作系统可以是单任务类型也可以是多任务类型。多任务实时操作系统使用特定的任务调度算法来确保操作系统的实时性。常见的实时操作系统是通过事件的驱动来实现不同优先级的任务相互切换从而完成用户程序的执行。

        实时操作系统遵循的设计原则是:采用各种算法和策略,始终保证行为的可预测性,即在任何情况下,在系统的运行时刻,操作系统的资源配置策略都能够为抢占资源(CPU、内存、网络带宽等)的多个实时任务合理的分配资源,是每个实时任务的实时性要求都能得到满足。

        实时操作系统主要关注的是要求在最坏的情况下也能够满足每个任务的实时性要求。实时系统的任务具有一定的事件约束(截止时间)。根据截止时间,实时系统的实时性分为“硬实时”和“软实时”。硬实时是指应用的时间需求能够得到满足,否则会造成重大的安全事故;软实时是指某些应用虽然提出时间需求,但实时任务偶尔违反这种需求对系统运行及环境不会造成严重影响。


1、任务管理

1)任务(Task)的概念

        对于一个复杂的控制软件,可以将其划分为若干个字部份,这些字部分可以由任务来实现。操作系统当中的任务为用户函数的执行提供了框架,使用户函数的载体。操作系统通过调度器来管理任务的先后执行顺序,为任务提供了异步执行和并发执行的管理机制。AUTOSAR操作系统有一套专门的任务切换机制以及空闲任务机制。

        AUTOSAR操作系统提供了两种不同的任务概念:基本任务(Basic Task)和扩展任务(Extended Task)。

        基本任务只有在以下三种情况发生时才会释放处理器:任务结束时;操作系统切换到更高优先级的任务时;发生了一个中断,处理器切换到一个中断服务程序时。其代码如下所示:

#icnlude"BasicTask.h"
TASK(BasicTask)
{

TerminateTask();

}

        而扩展任务与基本任务的最大区别就在于它可以调用AUTOSAR操作系统服务WaitEvent API。当扩展任务调用该服务时,该扩展任务会由运行状态切换为等待状态,知道所等待的时间发生。扩展任务在等待的状态下会释放处理器资源,操作系统绘制性处于就绪状态且优先级最高的任务,而不需要终止该扩展任务。其代码如下所示:

#include "ExtendTask.h"
TASK(ExtendTask)
{

for(;;)
{

WaitEvent(Event1);

ClearEvent(Event1);

}

}

        基本任务与扩展任务都属于用户任务,用户可以根据项目工程的需求自行定义,除了用户任务之外,AUTOSAR还有空闲任务,其属于系统任务。空闲任务的优先级最低,其本质是一个空循环。空闲任务执行时间是衡量CPU负载率的重要参数。其代码如下所示:

#include "IdleTask"
TASK(IdleTask)
{

for(;;)
{
}

}

2)任务的状态

        对于同一个处理器内核而言,在任意时刻只能执行一个任务指令。同样被映射到该处理器内核上的任务可能会在同一时刻竞争CPU资源,在这种情况下就会发生任务状态的改变。在状态发生改变的时候,操作系统负责保存和恢复任务的上下文。

扩展任务有四个任务状态:

        ①运行状态(Running):处于运行状态时,CPU资源被分配给该任务,该任务的指令被执行。在同一个CPU上任何时候只有一个任务处于此状态,而处于其他状态的任务可以有多个。

        ②就绪状态(Ready):此状态是转换为运行状态的先决条件,任务此时等待处理器的分配。由调度器来决定那个就绪任务将在接下来的时间里被执行。

        ③等待状态(Waiting):任务因等待至少一个事件而无法继续执行。

        ④挂起状态(Suspend):处于挂起状态时,任务是被动的,可以被激活。

        扩展任务的状态模型如下图所示。

        基本任务的状态模型几乎与扩展任务的状态模型相同。其区别主要在于扩展任务比基本任务多一个等待状态。基本任务的状态模型如下图所示。

3)任务的优先级

        调度程序根据任务的优先级从就绪队列中选择任务运行,0被定义为最低的优先级,任务的优先级数值越大,任务的优先级也就越高。

4)任务调度策略

        AUTOSAR操作系统支持三种任务调度策略:非抢占任务调度、全抢占任务调度和混合抢占任务调度(抢占为内核可抢占)。每个任务都具有可抢占属性,操作系统采取的任务调度策略均由任务自定义。全抢占任务调度意味着运行的任务在任何时刻都有可能由于更高优先级任务的就绪而释放处理,此时调度程序将调度运行最高优先级的就绪任务。若有高优先级任务进入就绪状态,全抢占任务调度就将当前任务转换到就绪状态,当前任务的运行环境被保存,以使得该任务在调度程序重新调度到它时能够恢复其运行环境。

        如下图所示,任务1比任务2的优先级高,当激活任务1后,任务2就会将处理器交给调度程序并转换为就绪态,而任务1则会被调度程序运行,可见低优先级的任务并不会影响高优先级任务的调度,此为全抢占式的任务调度策略。 

        不同于全抢占式任务调度,非抢占式任务调度只在特定的调度点进行任务调度,非抢占调度可能会影响有时间要求任务的按时完成。如果低优先级任务正在运行,此时若有高优先级任务就绪,此时高优先级不会立即执行,而是等到下一个调度点才能被调度程序调度。

        如下图所示,任务1比任务2的优先级高,在任务2运行时,任务1被激活就绪,但此时不对任务1进行调度,而是等到任务2结束时才运行任务1。

        AUTOSAR操作系统中关于任务管理的API如下表所示。

2、中断处理

         在AUTOSAR操作系统中,中断分为两类中断。

        一类中断:该类中断禁止使用操作系统服务。在一类中断执行完成后,操作系统就会继续处理中断发生处的指令。其不会影响任务管理而且具有较小的系统开销。二类中断:该中断可以使用操作系统服务。在二类中断内部没有重新调度发生,如果可抢占任务已被中断且没有其他中断时活动的,则重新调度发生在二类中断中止处。

        中断依靠硬件调度,而任务由调度器调度。中断可以中断可抢占或不可抢占式任务。若一个任务在一个中断例程中被激活,则在所有活动的中断例程中止后该任务才会被调度。

        AUTOSAR操作系统也支持中断嵌套,当前中断执行时,如果有更高优先级的中断产生,则进入该更高优先级中断处理,待该中断完毕后返回到原中断继续执行。

        若一类中断执行过程中发生二类中断且该二类中断具有更高的优先级,则在二类中断服务程序结束之后一类中断继续执行。如果之前的二类中断激活了某个任务导致高优先级任务就绪,由于在一类中断服务程序结束时不进行任务调度,因此该任务会等到下一个调度点才可能被调度。 

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值