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的节约相当友好;最后,也有可能存在一些这样那样的任务,人家本身就是不希望被抢占的。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.1

参考网址:【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中,实现类似《原神》的第三人称跟随相机并非易事,但幸运的是,Unity为我们提供了强大的工具集,其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

目录 一、BSRN网络总结二、源码包准备三、环境准备3.1 报错KeyError: "No object named BSRN found in arch registry!"3.2 安装basicsr源码包3.3 参考环境 四、数据集准备五、训练5.1 配置文件参数修改5.2 启动训练5.2.1 命令方式训练5.2.2 配置Configuration方式训…

vivado UltraScale 比特流设置

下表所示 UltraScale ™ 器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。

翻译《The Old New Thing》 - What’s the point of DeferWindowPos?

Whats the point of DeferWindowPos? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050706-26/?p35023 Raymond Chen 在 2005年7月6日 DeferWindowPos 的作用是什么&#xff1f; 简要 文章讨论了 DeferWindowPos 函数的用途&#xff…

LangChain框架学习总结

目录 一、简介 二、概念 三、组件具体介绍 3.1 Models 3.1.1 LLMs 3.1.2 Chat Models 3.1.3 Text Embedding Modesl 3.1.4 总结 3.2 Prompts 3.2.1 LLM Prompt Template 3.2.1.1 自定义PromptTemplate 3.2.1.2 partial PromptTemplate 3.2.1.3 序列化PromptTemplat…

IMEI引起的无法驻网问题

这篇内容没什么意思&#xff0c;仅仅是做个简单记录。 问题不复杂&#xff0c;场景很简单&#xff0c;如上图&#xff0c;UE在进行LTE attach过程时&#xff0c;在送完NAS security mode complete后&#xff0c;就立刻收到了网络attach reject 带cause 6 Illegal ME&#xff0c…

Chrome浏览器安装React工具

一、如果网络能访问Google商店&#xff0c;直接安装官方插件即可 二、网络不能访问Google商店&#xff0c;使用安装包进行安装 1、下载react工具包 链接&#xff1a;https://pan.baidu.com/s/1qAeqxSafOiNV4CG3FVVtTQ 提取码&#xff1a;vgwj 2、chrome浏览器安装react工具…

设置定位坐标+请按任意键继续

设置定位坐标 目的 在编程和游戏开发中&#xff0c;设置定位坐标的目的是为了确定对象在屏幕或游戏世界中的具体位置。坐标通常由一对数值表示&#xff0c;例如 (x, y)&#xff0c;其中 x 表示水平位置&#xff0c;y 表示垂直位置。设置定位坐标的目的包括&#xff1a; 1. **精…

【云原生】Pod 的生命周期(二)

【云原生】Pod 的生命周期&#xff08;一&#xff09;【云原生】Pod 的生命周期&#xff08;二&#xff09; Pod 的生命周期&#xff08;二&#xff09; 6.容器探针6.1 检查机制6.2 探测结果6.3 探测类型 7.Pod 的终止7.1 强制终止 Pod7.2 Pod 的垃圾收集 6.容器探针 probe 是…

MATLAB 变换

MATLAB 变换&#xff08;Transforms&#xff09; MATLAB提供了用于处理诸如Laplace和Fourier变换之类的变换的命令。转换在科学和工程中用作简化分析和从另一个角度查看数据的工具。 例如&#xff0c;傅立叶变换允许我们将表示为时间函数的信号转换为频率函数。拉普拉斯变换使…

Linux驱动开发——(十一)INPUT子系统

目录 一、input子系统简介 二、input驱动API 2.1 input字符设备 2.2 input_dev结构体 2.3 上报输入事件 2.4 input_event结构体 三、代码 3.1 驱动代码 3.2 测试代码 四、平台测试 一、input子系统简介 input子系统是管理输入的子系统&#xff0c;和pinctrl、gpio子…

#9松桑前端后花园周刊-React19beta、TS5.5beta、Node22.1.0、const滥用、jsDelivr、douyin-vue

行业动态 Mozilla 提供 Firefox 的 ARM64 Linux二进制文件 此前一直由发行版开发者或其他第三方提供&#xff0c;目前Mozilla提供了nightly版本&#xff0c;正式版仍需要全面测试后再推出。 发布 React 19 Beta 此测试版用于为 React 19 做准备的库。React团队概述React 19…

【driver4】锁,错误码,休眠唤醒,中断,虚拟内存,tasklet

文章目录 1.互斥锁和自旋锁选择&#xff1a;自旋锁&#xff08;开销少&#xff09;的自旋时间和被锁住的代码执行时间成正比关系2.linux错误码&#xff1a;64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff&#xff0c;这段地址是被保留的&#xff0c;如果…

全新桥隧坡安全监测解决方案,24h监测效率提升30%

4月26日&#xff0c;交通运输部党组书记、部长李小鹏在部务会上强调&#xff0c;要高度重视公路桥梁隧道结构监测工作&#xff0c;抓紧推进公路桥梁隧道结构监测系统建设&#xff0c;进一步健全完善公路桥梁隧道结构监测长效运行机制。 中海达积极参与公路桥梁隧道结构监测工作…

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…

Flink窗口理论到实践 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

嵌入式学习

笔记 作业 有如下结构体 struct Student{ char name[16]; int age; double math_score; double chinese_score; double english_score; double physics_score; double chemistry…

图片浏览器-PicView

一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器&#xff0c;配备了干净简洁的用户界面&#xff0c;可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型&#xff0c;包括&#xff1a;WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…

软件设计师-应用技术-数据库设计题2

基础知识及技巧&#xff1a; 1. 数据库设计过程&#xff1a; 四个阶段&#xff1a;需求分析、概念结构设计、逻辑结构设计、物理设计。每个阶段的产物&#xff1a; 需求分析&#xff1a;数据流图、数据字典、需求说明书。概念结构设计&#xff1a;ER模型逻辑机构设计&#xf…

AndroidStudio的Iguana版的使用

1.AndroidStudio介绍 Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具&#xff0c;还提供更多可提高 Android 应用构建效率的功能&#xff0c;例如&#xff1a; 基于 Gradle 的灵活构建系统…