OSEK任务管理

1 前言

        RTOS通过任务(task)来组织应用层程序框架(framework),支持任务的并发和同步执行(concurrent and asynchronous execution of tasks),并通过调度器(scheduler)来管理任务的执行,OSEK也概莫能外。

        OSEK将任务划分为基础任务(basic tasks)和拓展任务(extended tasks)两类。对于基础任务来说,它们会一直占有CPU,直至其主动终止(terminate)任务运行,或被高优先级的任务/中断抢占,才会释放CPU资源;而拓展任务的特殊性在于多了一个可阻塞的等待状态,即任务阻塞在那里等待一个事件的触发(WaitEvent,如等待一个队列的入队操作等),这一状态被称为等待状态(waiting state)

        拓展任务的等待状态的好处显而易见,即可以让出CPU资源给优先级较低的任务,但从OS的角度来看,相对于基础任务,其消耗的资源必然也更大,毕竟进入阻塞的等待状态前,需要对该拓展任务进行现场保护,这存在着时间和空间上的开销。

2 任务状态机模型

2.1 状态模型

        如图1所示,基础任务和拓展任务的区别主要在于waiting状态(等待态/阻塞态),而running(运行态),suspended(挂起态)和ready状态(就绪态)的定义完全相同。显然,由于基础任务没有等待状态,因此只包含任务开始和结束时这两个同步点(synchronisation point);对于有内部同步点的作业,还是拓展任务更能胜任。

3245792fd52e442ea77859620ede9868.jpeg

图1(a) 状态模型示意图

e7c3cf642dab41c48898730ac3206101.png

图1(b) 状态模型示意图

        此外,为了降低系统复杂度,OSEK规定只有任务本身可以终止自己(self-termination),如果一个任务调用ChainTask来链式激活自己,则会将自己加到对应优先级的就绪态队列尾部,等待调度执行;同时,没有从挂起态到等待态的直接转换路径,在挂起状态下,任务处于被动状态,即可以被激活。

        调度器(scheduler)根据调度策略(scheduling policy)来决定各任务的状态,选择当前得以运行的任务(使之从ready状态进入running状态),并为其统筹所有系统资源。从某种意义上,调度器本身也可以看作一种资源,在单核环境下,在同一时刻最多只能被一个任务占有,其本质是对应着CPU的计算资源。

2.2 任务优先级

        OSEK完全摒弃了动态设置任务优先级的方式,采用静态方式配置任务优先级,即不可再运行时更改任务优先级。0是最低任务优先级,数值越大,则代表优先级越高,这点与freeRTOS相同,与ARM中断优先级定义方式相反。

        此外,在BCC2或ECC2下,支持多个任务配置相同优先级。

2.3 调度策略

2.3.1 完全抢占式调度(Full preemptive scheduling)

        简单来说,完全抢占式调度只有一个规则,就是完全按照优先级来进行调度,谁的优先级高,谁就执行。正在运行的任务必须做好随时被拉下神坛的觉悟,一旦有优先级更高的任务出现,则必须退位让贤(保存上下文,退回就绪态,让出CPU)。这种随时随地可能发生的重调度也就意味着,任务间的共享数据必须做好同步,否则必有惊喜出现。

        总的来说,重调度点(触发系统调度)主要包括以下几种情形:

        ① 通过系统服务TerminateTask成功终止一个任务时,或通过系统服务ChainTask成功终止当前任务并激活下一个任务时;

        ② 任务级别的任务激活(Activating a task at task level),包括通过系统服务ActivateTask
激活任务、通过消息通知机制(message notification mechanism)激活任务、或定时器溢出(alarm expiration)来激活任务等;

        ③ 在拓展任务中调用系统服务WaitEvent时,任务进入等待状态;

        ④ 设置一个事件(event)以唤醒等待该事件的任务,事件的设置可以通过系统服务SetEvent或通过消息通知机制或在定时器溢出处理中来实现;

        ⑤ 任务级别的资源释放(通过系统服务ReleaseResource);

        ⑥ 从中断返回任务时(Return from interrupt level to task level);

        ⑦ 显式调用系统服务函数Schedule时,触发调度。

2.3.2 非抢占式调度

         该调度策略完全依赖于基于系统服务的显示调用来触发调度。在此策略下,任务的优先级显然也没多大意义了,高优先级的任务无法抢占低优先级的任务,只能等待低优先级任务主动让出CPU,这对于实时系统来说,显然时不利的。

        非抢占式调度的重调度点主要包括以下几种情形:

       ① 通过系统服务TerminateTask成功终止一个任务时,或通过系统服务ChainTask成功终止当前任务并激活下一个任务时;

       ② 显式调用系统服务函数Schedule时,触发调度;

      ③ 任务陷入等待状态,通常都是等待一个事件导致的(WaitEvent),其本质是任务被迫让出CPU的使用权。

2.3.3 任务组(Groups of tasks)

        OSEK支持对任务进行分组,以分别执行抢占式调度策略和非抢占式调度策略。具体来说,对于那些优先级小于等于组内最高优先级(the highest priority within a group)的任务,执行非抢占式调度策略(non preemptable tasks);对于那些优先级大于组内最高优先级的任务,执行抢占式调度策略。

        这么做有什么好处呢?一个典型的例子,可以将共享同一资源的任务分在一组内,而当任何组内占有这一共享资源时,都会通过优先级提升将任务优先级临时设置为资源的上限优先级(天花板优先级,ceiling priority of the resource),这会避免不必要的任务抢占和调度,毕竟共享资源本事就是临界资源。另一方面,对于那些优先级高于上限优先级且不需要该资源的任务,仍以抢占式调度策略来执行。

2.3.4 混合式抢占调度策略(Mixed preemptive scheduling)

         当系统上同时存在可抢占和不可抢占任务时,就需要应用混合式抢占调度策略。在这种情况下,会为任务添加上是否可抢占的属性标签,并在运行时执行对应的调度策略。这也就意味着,系统中的任务存在两种不同调度类型,即可抢占和不可抢占(preemptable or non preemptable),这与任务类型(task type,基础任务和拓展任务)是相互独立的、不同维度的概念。

        在完全抢占式调度策略里混合点不可抢占的刺头的意义在哪呢?首先,如果一个任务的执行时间很短,短到同切换上下文(任务切换)的耗时接近,甚至更短,那就没必要抢占这个任务,让它执行结束好了;其次,不抢占意味着不用做上下文切换,也就省去了现场保护的内存开销,这对于RAM的节约相当友好;最后,也有可能存在一些这样那样的任务,人家本身就是不希望被抢占的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Axure高保真原型】动态伸缩信息架构图

今天和大家分享动态伸缩信息架构图的原型模板,我们可以通过点击加减按钮来展开或收起子内容,具体效果可以点击下方视频观看或者打开预览地址来体验 【原型效果】 【Axure高保真原型】动态伸缩信息架构图 【原型预览含下载地址】 https://axhub.im/ax9/…

项目管理-项目采购管理2/2

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 本文承接 项目采购管理第二部分,详细讲解项目合同管理。 项目采购管理过程--重点: ①ITTO 输入,输出…

矩池云jupyter运行opengait代码 未完成版

文章目录 前言——矩池云的使用技巧1.切换源 一、下载数据集二、下载模型三、环境配置1.查看python、torch、torchvision版本2.查看一些包版本是否过高3.下载包 四、开始训练1.设置环境变量2.遇到的问题(1)torch.cuda.is_available()返回false&#xff0…

Unity+Shader入门精要-1. 入门shader

今天开始正式整合学习的shader内容。 Simple Shader 主要介绍了大概的shader格式。 Shader "Unity Sgaders Book/Chapter 5/Simple Shader" //shader名 {Properties{//声明color类型的属性_Color("Color Tint", Color) (1.0,1.0,1.0,1.0)}SubShader{Pa…

【Osek网络管理测试】[TG3_TC3]tSleepRequestMin_L

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT进入NMLimpHome状态后请求睡眠的最短时间是否正确…

Linux网络-部署YUM仓库及NFS共享服务

目录 一.YUM仓库服务 1.YUM概述 1.1.YUM(Yellow dog Updater Modified) 2.准备安装源 2.1.软件仓库的提供方式 2.2.RPM软件包的来源 2.3.构建CentOS 7 软件仓库 2.4.在软件仓库中加入非官方RPM包组 3.一键安装软件包的工具: 好处&a…

unittest_parameterized批量测试测试用例

import unittest from parameterized import parameterizeddef add(x, y):return xy"""问题:如果有三组数据需要测试?[(1,1,2), (1,2,3), (0,3,3)] """def get_data():return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]# 定义测试…

Spring+SpringMVC+Jsp实现校园二手交易系统

前言介绍 在社会快速发展的影响下,使校园二手交易系统的管理和运营比过去十年更加理性化。依照这一现实为基础,设计一个快捷而又方便的网上校园二手交易系统是一项十分重要并且有价值的事情。对于传统的管理控制模型来说,网上校园二手交易系…

Llama3-Tutorial之XTuner微调Llama3个人小助手

Llama3-Tutorial之XTuner微调Llama3个人小助手 使用XTuner微调llama3模型。 参考: https://github.com/SmartFlowAI/Llama3-Tutorial 1. web demo部署 参考上一节内容已经完成web demo部署,进行对话测试, 当前回答基于llama3官方发布的模型进行推理生成&…

【算法刷题 | 贪心算法09】4.30(单调递增的数字)

文章目录 16.单调递增的数字16.1题目16.2解法&#xff1a;贪心16.2.1贪心思路16.2.2代码实现 16.单调递增的数字 16.1题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的…

学QT的第一天~

#include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { //窗口相关设置// this->resize(427,330); this->setFixedSize(427,330); //设置图标 this->setWindowIcon(QIcon("C:\\Users\\Admin\\Desktop\\pictrue\\dahz.jpg&q…

MyCat安装配置,及数据分片

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

无人机+三维建模:倾斜摄影技术详解

无人机倾斜摄影测量技术是一项高新技术&#xff0c;近年来在国际摄影测量领域得到了快速发展。这种技术通过从一个垂直和四个倾斜的五个不同视角同步采集影像&#xff0c;从而获取到丰富的建筑物顶面及侧视的高分辨率纹理。这种技术不仅能够真实地反映地物情况&#xff0c;还能…

解决python/pycharm中import导入模块时报红却能运行的问题

一、问题 导入时报红&#xff0c;如下 二、解决 右键单击项目&#xff0c;将项目Mark Directory as→Sources Root 三、效果 报红消失 学习导航&#xff1a;http://www.xqnav.top

基于C++基础知识的循环语句

一、while循环 while循环语句形式如下&#xff1a; while(表达式){语句 } 循环每次都是执行完语句后回到表达式处重新开始判断&#xff0c;重新计算表达式的值&#xff0c;一旦表达式的值为假就退出循环。用花括号括起来的多条简单语句&#xff0c;花括号及其包含的语句被称…

淡茶和浓茶的标准

按照《品深淡茶冲泡标准》&#xff0c;淡茶茶汤中的咖啡碱不得高于31.67mg/100mL&#xff0c;可可碱不得高于2.67mg/mL&#xff0c;茶碱不得高于1.50mg/100mL&#xff0c;茶多酚不得高于143mg/mL&#xff0c;按照各类茶叶中各物质的含量情况&#xff0c;茶水比例不得高于1:150&…

JRT1.6发布

经过51的三天努力&#xff0c;完成基于JRT的质控核心部分。框架部分已经达到了第一个可生产版本。 可生产包括以下部分&#xff1a; 1.Web开发基础和发布运维基础 2.Linux和WIndows客户端浏览器 3.Linux和WIndows客户端打印导出程序 4.Linux和WIndows初始化程序 5.Linux和WInd…

《自动机理论、语言和计算导论》阅读笔记:p428-p525

《自动机理论、语言和计算导论》学习第 14 天&#xff0c;p428-p525总结&#xff0c;总计 98 页。 一、技术总结 1.Kruskal’s algorithm(克鲁斯克尔算法) 2.NP-Complete Problems p434, We say L is NP-complete if the following statements are true about L: (1)L is …

计算机网络面试高频:输入域名会发生那些操作,开放性回答

更多大厂面试内容可见 -> http://11come.cn 计算机网络面试高频&#xff1a;输入域名会发生那些操作&#xff0c;开放性回答 输入域名之后&#xff0c;会发生哪些操作&#xff1f; 当在浏览器中输入www.baidu.com并按下回车键时&#xff0c;会触发一系列复杂的网络过程&am…

【菜单下拉效果】基于jquery实现二级菜单下拉效果(附完整源码下载)

Js菜单下拉特效目录 &#x1f354;涉及知识&#x1f964;写在前面实现效果&#x1f367;一、涉及知识&#x1f333;二、具体实现2.1 搭建一级菜单2.2 搭建二级菜单项2.3 引入js文件2.4 构建CSS文件 &#x1f40b;三、源码获取&#x1f305; 作者寄语 &#x1f354;涉及知识 ht…