Autosar模块介绍:AutosarOS_2(操作系统基本概念)
上一篇 | 返回主目录 | 下一篇
AutosarOS_2:操作系统基本概念
- 1 任务管理(Task Management)
- 1.1 任务基本概念及分类
- 1.1.1 基础任务(Basic Task, BT)
- 1.1.2 扩展任务(Extended Task, ET)
- 1.2 系统定时器(System Ticks)
- 1.2.1 硬件定时器(Hardware Counts)
- 1.2.1 软件定时器(Software Counts)
- 1.3 闹钟与事件(Event And Alarm)
- 1.3.1 闹钟(Alarm)
- 1.3.2 事件(Event)
- 1.4 调度表(Schedule Table)
- 1.6 优先级(Task Priority)
- 1.7 任务调度策略(Scheduling policy)
- 1.7.1 完全抢占式调度
- 1.7.2 非抢占式调度
- 1.7.3 混合抢占式调度
- 2 中断(Interrupt)
- 2.1 一类中断(Category 1)
- 2.2 二类中断(Category 2)
- 2.3 中断禁用
- 3 优先级(Priority)
1 任务管理(Task Management)
1.1 任务基本概念及分类
任务作为系统调度的基础(OS调度以任务(Task)为单位)、功能/动作执行的载体(实现过程中作为执行实体(Runnable)),按调度方式可以分为周期任务(Periodic Task)、初始化任务(Init Task)、事件任务(Event Task)等
任务只是作为功能执行过程的载体,并没有严格定义,存在其他理解也并不能认为错误
#1、周期任务(Periodic Task):按照设定好的固定事件间隔进行任务调度
#2、初始化任务(Init Task):上电后在进行周期任务调度之前,只执行一次的任务
#3、事件任务(Event Task):通过事件设置触发而执行任务
根据不同的软硬件需求,定义了四种符合类(Conformance Class, CC)(如下表),四种符合类之间兼容性如下图。
属性 | BCC1 | BCC2 | ECC1 | ECC2 |
---|---|---|---|---|
多次任务激活请求 | No | Yes | No | Yes(BT),No(ET) |
每个任务优先级存在的任务个数 | 1 | ≥1 | 1 | ≥1 |
基本任务 | Yes | Yes | Yes | Yes |
扩展任务 | No | No | Yes | Yes |
##符合类(Conformance Class, CC)与基础任务/扩展任务概念之间相互相对独立(切忌混淆理解)
##详细描述见OSEK标准(此处只对部分特性进行了描述):ISO17356_Part3_OSEK-VDX Operating System (OS).pdf
1.1.1 基础任务(Basic Task, BT)
基础任务存在三种状态:准备(Ready)、运行(Running)、挂起(Suspend)。与扩展任务显著区别是不能进入阻塞状态,也就是不能等待OS的事件,并且在执行完成后会释放所占用的资源。基本过程为:Suspend-> Ready-> Running-> Suspend(循环)
##相对于扩展任务优势:对于运行时上下文(RAM)的适度需求
1)、生成的代码格式:
TASK(BasicTask)
{.../*User Code*/...TerminateTask();
}
2)、调度方式:
1.1.2 扩展任务(Extended Task, ET)
扩展任务存在四种状态:准备(Ready)、运行(Running)、挂起(Suspend)、等待(Waiting)。与基础任务显著区别是可以进入阻塞状态,也就是可以等待OS的事件,并且一般不会回到挂起状态。基本过程为:Suspend-> Ready-> Running-> waiting-> Ready (循环)
## 包含多个同步点,没有同步请求的麻烦,当进一步的工作出现信息缺失时,任务切换至等待状态。
1)、生成的代码格式:
TASK(xxxx)
{EventMaskType ev;for(;;){(void)WaitEvent(xxxx|xxxx); /* PRQA S 3417 */ /* MD_Rte_Os */(void)GetEvent(xxxx, &ev); /* PRQA S 3417 */ /* MD_Rte_Os */
(void)ClearEvent(ev & (xxxx|xxxx);If((ev&xxxx) != (EventMaskType)0)
{Runnable0;}
}
2)、调度方式:
1.2 系统定时器(System Ticks)
系统定时器(OS Counters)作为软件任务(Task)的基础(或者说类似于心脏对于人体的作用),由此触发可以进行任务的周期调度、事件触发等等
1.2.1 硬件定时器(Hardware Counts)
由硬件(如定时器)驱动的计数器,该计数值由外围设备“硬件”处理。一般通过高精度的硬件定时器作为系统的驱动定时器(但是一般该定时器的中断优先级不会设置的特别高,因为其驱动的Task的优先级低于中断优先级)。
1.2.1 软件定时器(Software Counts)
通过调用OS API(IncrementCounter)实现递增的计数器,计数值由操作系统维护“软件”。
1.3 闹钟与事件(Event And Alarm)
1.3.1 闹钟(Alarm)
闹钟(Alarm)本质就是一个定时器,在到达设定的时间点时,就可以进行相应的操作(如设置事件、触发任务、进入回调等)。
#Alarm与事件、Task、回调函数等均只能是一对一关系,此处区别于调度表
1.3.2 事件(Event)
事件是由操作系统管理的对象。事件机制只提供给拓展任务(ET),是任务状态切换的一种机制(等待状态(Waiting)与就绪状态(Ready)、运行状态(Running)),是一种同步的方法。
##此概念与扩展任务(ET)相关,在进入扩展任务后,扩展任务就不会再次退出,功能的执行通过设置事件进行调用(此处可参考扩展任务章节内容)。
1.4 调度表(Schedule Table)
闹钟(Alarm)触发方式只能存在一对一,因此引入了调度表的概念。调度表通过在一段时间内设置多个触发点(Expiry Point),然后在每个触发点可以设置多个事件、任务等避免了闹钟(Alarm)的缺点(因此可用于核间任务同步)。
调度表存在三个基本参数:持续时间(Duration)、触发点(Expiry Point)、偏移量(Offset),触发点通过设置相对于开始点的偏移量得到,调度表可以通过设计持续时间指定结束时间。
# 调度表的调用存在两种模式:单次调用、重复调用(循环调用)
1.6 优先级(Task Priority)
任务优先级(优先级)决定下一个准备就绪的任务将被转移到运行状态。为了提高效率,不支持动态优先级管理。因此,任务的优先级是静态定义的,即用户在执行时不能更改它。
处理步骤:
1)、调度程序搜索处于就绪/运行状态的所有任务
2)、从处于就绪/运行状态的任务集中,调度程序确定具有最高优先级的任务集
3)、在处于就绪/运行状态且优先级最高的任务集中,调度器找到最老的任务
#优先级处理原则:
1)、相同优先级的任务根据激活顺序启动,处于等待状态的扩展任务不会阻塞相同优先级的后续任务的启动
2)、被抢占的任务被认为是其当前优先级的就绪列表中的第一个(最老的)任务
3)、从等待状态释放的任务被视为其优先级的就绪队列中的最后(最新)任务
##特定情况下会修改任务执行的优先级
1.7 任务调度策略(Scheduling policy)
可抢占性(Preempt)用于描述任务执行过程中是否可以被优先级更高的任务打断,将任务划分为可抢占任务(Preemptive Task)、不可抢占任务(Non-preemptive Task),由此引申出几种调度方式:抢占方式调度(Preemptive Schedule)、非抢占方式调度(Non-preemptive Schedule,也被称作协作调度)、混合抢占式调度(Mixed preemptive scheduling)。
1.7.1 完全抢占式调度
当一个高优先级的任务准备就绪时,全抢占调度将使正在运行的任务进入就绪状态。保存任务上下文,以便被抢占的任务可以在被抢占的位置继续执行。
#具有以下特点:
1)、在完全抢占式调度中,延迟时间与低优先级任务的运行时间无关
2)、某些限制与保存上下文所需的(RAM-)内存空间的增加以及任务之间同步所需特性的复杂性的增强
3)、理论上每个任务都可以在任何位置重新调度,因此对与其他任务联合使用的数据的访问必须同步
1.7.2 非抢占式调度
非抢占式调度对任务可能的时间要求施加了特定的约束。特别是正在运行的低优先级任务的不可抢占部分会将高优先级任务的启动延迟到下一个重新调度点。
#高优先级任务在与低优先级任务调度存在冲突时,高优先级任务也可能因此造成较大延时
1.7.3 混合抢占式调度
可抢占任务和不可抢占任务在同一个系统上混合使用,那么得到的策略称为“混合抢占”调度。在这种情况下,调度策略取决于正在运行的任务的抢占属性。如果正在运行的任务是不可抢占的,则执行非抢占调度。如果正在运行的任务是可抢占的,则执行抢占调度。
2 中断(Interrupt)
在整个系统中Task的优先级最低,对于时间保护类中断以及Category 0通常以错误勾子函数(ErrorHoook)形式处理,用户可以操作的两种中断类型为:一类中断、二类中断,除此之外提供了可以禁用两类中断的接口函数(可通过禁用中断防止执行过程被打断,常被用于资源保护等场景)。
2.1 一类中断(Category 1)
此类中断服务程序不能够使用OS提供的系统服务,当中断执行完成之后则会重新跳转至产生中断的地方继续执行,不会影响到任务的执行,因此占用系统资源较少。且不支持中断的嵌套,但是支持内联汇编的方式实现嵌套
2.2 二类中断(Category 2)
该类中断则可以调用部分OS系统服务,如激活任务或者设置事件等(如但是TerminateTask等就不被允许)。除此之外它支持中断的嵌套。
##如图二类中断可调用OS资源,在中断内激活优先级高于TaskA的任务TaskB,则在执行完TaskB后进行返回TaskA继续执行;或者执行完直接返回TaskA中断位置继续执行
2.3 中断禁用
EnableAllInterrupts/ DisableAllInterrupts:禁止所有中断(包括1类和2类中断)
1)、典型用法是保护短的临界段
2)、不允许从这样的保护临界段内的中断返回,即禁用与启用配套使用
SuspendAllInterrupts/ ResumeOSInterrupts:挂起所有中断(包括1类和2类中断)
SuspendOSInterrupts / ResumeOSInterrupts:挂起2类中断
3 优先级(Priority)
优先级用于处理并发任务、中断以等的执行先后顺序问题,高优先级任务、中断可打断低优先级相关执行,通过此方式可保障及时处理更为重要的内容。具体中断、任务的优先级如下图所示,在相关分类下可再设置优先级以保障内部的处理顺序。
上一篇 | 返回主目录 | 下一篇
Autosar模块介绍:AutosarOS_2(操作系统基本概念)相关推荐
- EBS模块介绍和概念解释
Oracle模块介绍和概念解释 Oracle重要模块简介 账套 会议科目表 记账本位币 会议日历的财务报告实体 组织 业务组 公司的最高部门 法人实体 提交财务和税务报表的法人公司 经营单位 orac ...
- AUTOSAR ComM模块介绍
AUTOSAR ComM模块介绍 Autosar ComM概述 Autosar ComM 全称是 Autosar Communication Manager,顾名思义就是用来管理通讯的,ComM 模块 ...
- SAP模块介绍及概念介绍
SAP模块介绍 SAP主要有PP,MM,FI,CO,SD,QM,HR,PS,AM,WF,IS,PM以及ABAP模块. WM和IM都是MM模块下面的子模块.跟物流计划强相关的是MM,SD,PP模块. 1 ...
- SAP模块介绍及概念介绍+CRM saleforce学习认证
SAP模块介绍 SAP主要有PP,MM,FI,CO,SD,QM,HR,PS,AM,WF,IS,PM以及ABAP模块. WM和IM都是MM模块下面的子模块.跟物流计划强相关的是MM,SD,PP模块. 1 ...
- Autosar Dcm模块介绍
DCM模块介绍 诊断通信管理(Diagnostic Communication Manager, DCM)模块作为AutoSar诊断模块的重要组成部分,主要负责诊断数据流和管理诊断状态,包括诊断会话. ...
- 精心整理吐血推荐的AUTOSAR科普介绍材料
一.AUTOSAR的背景介绍 AUTOSAR是AUTOmotive Open System Architecture(汽车开放系统架构)的首字母缩写,是由全球各大汽车整车厂.汽车零部件供应商.汽车电子 ...
- 【Python】多线程及threading模块介绍
目录 1. 多线程简单介绍 2. threading模块介绍 2.1 threading模块常用方法 2.2 Thread类使用 2.2.1 使用构造函数传递可调用对象的方法创建线程 2.2.2 继 ...
- python模块介绍-gevent介绍:基于协程的网络库
2019独角兽企业重金招聘Python工程师标准>>> python模块介绍-gevent介绍:基于协程的网络库 介绍 gevent是基于协程的Python网络库.特点: 基于lib ...
- Autosar与Matlab模型开发之——概念基础
目录 一.AUTOSAR架构介绍 1.AUTOSAR架构: 2.BSW架构: 3. BSW架构粗略介绍:编辑 二.与应用层相关 1.跟应用层SWC交互的接口: 2.Autosar接口类型 一.AUT ...
最新文章
- Linux练习(显示环境变量)
- C/C++动态二维数组的内存分配和释放
- 本周日,王海峰、朱军、李宏毅等大咖邀你加入这场AI开发者盛宴
- python图标的演变_Python3 生成icon图标
- 【渝粤教育】国家开放大学2019年春季 45烹饪原料学(1) 参考试题
- Github上热搜的Java开源商城项目合集,这个是真的好
- 黑苹果alc269声卡仿冒id_笔记本制作仿冒声卡驱动AppleHDA最详细教程
- ios10前台收到推送_APP在前台收到推送消息时也会弹出提醒?
- leetcode电话号码java_【LeetCode(Java) - 379】电话目录管理系统
- 远程高效办公指南,每天都是能量满满的workaholism!
- 图灵奖Alan Kay:突破常规思维!道翰天琼认知智能机器人平台API接口大脑为您揭秘
- 《Machine Learning in Action》—— 浅谈线性回归的那些事
- sql 2008常用语法语句收集
- oracle小麦苗博客,《Oracle DBA工作笔记》第一章
- otc焊接机器人编程模拟软件_otc焊接机器人编程
- ZeroMemory、memset 和 “={0}” 三者区别
- 客厅计算机笔记本cpu,自己装一台客厅迷你小电脑,我很幸运避开数个大坑
- 海比研究院专访伙伴云VP袁兆江:大厂入局,低代码赛道如何突围?
- DevExpress .NET MAUI crack
- 【等价类划分法】某商店的货品价格(P)都不大于 20 元(且为整数),假设顾客每次付款为 20 元且每次限购一件商品,现有一个软件能在每位顾客购物后给出找零钱的最佳组合(找给顾客货币张数最少)。