OSEK OS任务调度的底层逻辑

news2024/9/23 11:17:29

先参考 FreeRTOS的任务触发底层逻辑  简述RTOS任务调度底层逻辑 AUTOSAR-OS的调度机制-调度表(没理解透,继续更新)

OSEK与FreeRTOS在任务调度上最大的区别在于,FreeRTOS是基于全抢占任务调度和时间片轮转调度机制,具有并发和并行的能力。而OSEK主要以调度表机制和Alarm机制触发任务,不具备并行的能力。最大的相同点是都是根据优先级高低的全抢占调度机制(OSEK可选非全抢占)。

调度表:

调度表被称为任务控制块表(Task Control Block Table,TCB Table),它是一个静态定义的数组,用于存储系统中所有任务的信息。一个调度表被划分成多个到期点Expiry Points,每个到期点对应一个时间片,每张调度表中所有要执行的任务都放在一个静态数组里。当一个到期点到达时,调度器会检查该到期点对应数组里的就绪任务,之后根据任务的优先级进行全抢占任务调度。

每个任务在调度表中都有一个对应的任务控制块(TCB),包含了任务的相关信息,如任务的优先级、堆栈指针、状态等。调度表中的任务按照其优先级从高到低的顺序进行排列。优先级较高的任务的任务控制块位于调度表数组的较低索引位置,优先级较低的任务位于较高索引位置。 OSEK 中,任务切换不像 FreeRTOS 的就绪列表那样使用双向链表,而是通过遍历数组来选择下一个任务进行执行。OSEK中任务的优先级数值越小,优先级越高。

调度表中的任务按照任务的优先级放在一个静态数组里,要想区分在每个到期点执行什么任务,就要根据任务的状态信息来区分,每个到期点被执行的时候,会先将当前到期点将要执行的任务从原来的Suspended状态切换到Ready状态,这样一来,在调度器调度任务的时候,就只会执行Ready状态下的任务,之后再根据优先级高低进行任务的调度。

在OSEK的调度表机制中,调度表是一个静态数据结构,可以将调度表理解为固定时间片轮转调度,和FreeRTOS的时间片轮转调度机制相似,但又不同。

调度表中的到期点 Expiry Points 是通过调度表定义的系统时钟中断触发的,通过配置系统时钟中断的频率来控制到期点的触发频率。当系统时钟中断发生时,调度器会根据到期点的时间要求和任务的截止时间进行任务调度和切换。

OSEK和FreeRTOS在时间片轮转调度最大区别在于,FreeRTOS的时间片轮转调度机制是就绪列表中相同优先级任务根据滴答时钟触发的中断轮番获取CPU的控制权,而OSEK的调度表是基于调度表定义的每个到期点实现任务的切换,之后在每个到期点的时间片中,又按照全抢占调度机制调度任务。

除此之外,如果调度表中到期点前的任务没有执行完,到期点将要执行的任务优先级高于没有执行完的任务,则实施全抢占任务调度,没有执行完的任务会被堆栈保存上下文,在下一个任务周期执行完上次没有执行完的部分。

如果调度表中到期点将要执行的任务优先级低于还未执行完的任务,那么调度器会继续执行当前正在执行的任务。所以,在开发过程中就要注意如果遇到调度表中到期点将要执行的任务优先级低于还未执行完的任务,要在未执行完的任务最后面加一个 TerminateTask 的函数,这个函数可以执行切换任务的动作。

Alarm:

如果说调度表是基于时钟触发的中断,之后利用调度器执行和切换任务。Alarm是基于时钟触发的事件,之后利用调度器在特定的时间点触发与之关联的任务。

Alarm是一种定时机制,也就是在特定的时间点触发与之关联的任务的执行,他与FreeRTOS的全抢占调度的区别在于,FreeRTOS的全抢占调度是没有时间概念的,只要有高优先级来,那就去抢,任务的触发不会遵循一种时间精度上的调度,而Alarm是可以精确时间周期的触发任务,虽然任务之间是全抢占,但当高优先级任务执行完,会切回到没有执行完的任务。

而Alarm与调度表的区别在于,首先调度表是一种静态的任务调度方式,在调度表中,每个任务都被分配了一个固定的时间片来执行,如果你没有执行完,并且任务优先级低,很抱歉,等下一次轮到你再说吧。

Alarm触发的任务是直接由外部事件驱动的,可以理解为FreeRTOS中全抢占调度任务,对任务的抢占能力极强,对于任务的优先级要求比较高。而调度表是由一个固定的时间片触发调度器控制的,类似于时间片轮转调度,抢占能力比较弱,要求的是你只要在固定的时间执行了这个功能就可以了,即便没有执行完,下一个周期执行也可以,对于任务的优先级要求不需要很高

在 Rte_Start 开启时,启用alarm,

在Rte_Stop时,停止alarm

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

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

相关文章

Pyqt5实现多线程程序

主从架构 Pyqt常常使用**主从架构(Master-Workers 架构)**来避免界面卡死的情况。 Master-Workers 架构就像它的名字,一个master统领着几个workers一起干活。其中某个worker倒下了不会导致整体任务失败。matser不用干活,因此可以…

2021年9月15日 Go生态洞察:TLS加密套件的自动排序机制

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

4年功能测试裸辞找不到工作,一周我就后悔了····

我们可以从以下几个方面来具体分析下,想通了,理解透了,才能更好的利用资源提升自己。 一、我会什么? 先说第一个我会什么?第一反应:我只会功能测试,在之前的4年的中我只做了功能测试。内心存在…

autogen的理解和实践

什么是autogen? AutoGen 是一个框架,支持使用多个代理来开发 LLM 应用程序,这些代理可以相互对话来解决任务。AutoGen 代理是可定制的、可对话的,并且无缝地允许人类参与。他们可以采用法学硕士、人力投入和工具组合的各种模式运作。简单来说…

高级IO select 多路转接实现思路

文章目录 select 函数fd_set 类型timeval 结构体select 函数的基本使用流程文件描述符就绪条件以select函数为中心实现多路转接的思路select 缺陷 select 函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); selec…

3款厉害的小工具,小黑子都在用!

大家好,我是 Javapub。 程序员与普通人最大的区别是什么,当然是会使用工具。基于一些同学经常问我的问题,接下来给大家分享几款我经常使用的工具,主打一个提升效率。 第一款 Everything 用 windwos 的同学都体会过,…

咨询+低代码,强强联合为制造业客户赋能

内容来自演讲:沈毅 | 遨睿智库 | 董事长 & 王劭禹 | 橙木智能 | 联合创始人 摘要 文章主要讲述了智库董事长沈毅创办广告公司的经历,以及他在管理公司过程中遇到的问题和挑战,最后通过与明道云以及橙木智能联合创始人王邵禹老师的合作&…

STM32/GD32_分散加载

Q:如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域? KEIL环境:.map后缀文件、.sct后缀文件 IAR环境:.map后缀文件、.icf后缀文件 【map文件】 对固件里面的变量、函数、常量等元素的存储空间进行分配的说明…

【计算机毕业设计】springboot+java高校实验室器材耗材料借用管理系统94l73

实验室耗材管理系统在Eclipse/idea环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,本系统教师和学生申请使用实验材料,管理员管理实验材料,审核实验材料的申请…

项目设计---MQ

文章目录 一. 项目描述二. 核心技术三. 需求分析概要设计四. 详细设计4.1 服务器模块4.1.1 内存管理4.1.2 硬盘管理4.1.2.1 数据库管理4.1.2.2 文件管理 4.1.3 消息转发 4.2 客户端模块4.2.1 连接管理4.2.2 信道管理 4.3 公共模块4.3.1 通信协议4.3.2 序列化/反序列化 一. 项目…

Linux 如何在文件中查找指定内容,grep的用法

Linux 如何在文件中查找指定内容 1、 如我们 查找 log_file_catalina.out 文件中,包含 ‘总数:900’ 的字符内容 2、 在日志中查看 83910_law_21CFBC7EB25B1FF60255FE7F4BE1BCCF1CE726F6_0.bdyhf 的相关内容 grep 83910_law_21CFBC7EB25B1FF60255FE7…

Redis String类型

String 类型是 Redis 最基本的数据类型,String 类型在 Redis 内部使用动态长度数组实现,Redis 在存储数据时会根据数据的大小动态地调整数组的长度。Redis 中字符串类型的值最大可以达到 512 MB。 关于字符串需要特别注意∶ 首先,Redis 中所…

[vue3] 使用 vite 创建vue3项目的详细流程

一、vite介绍 Vite(法语意为 “快速的”,发音 /vit/,发音同 “veet”) 是一种新型前端构建工具,能够显著提升前端开发体验(热更新、打包构建速度更快)。 二、使用vite构建项目 【学习指南】学习新技能最…

IDE1007:当前上下文中不存在名称“xxx“

这种在Halcon中直接导出的代码不能直接放程序中,应该在控件中比如一个按钮中,就不会出错了。

MacOS + Android Studio 通过 USB 数据线真机调试

环境:Apple M1 MacOS Sonoma 14.1.1 软件:Android Studio Giraffe | 2022.3.1 Patch 3 设备:小米10 Android 13 一、创建测试项目 安卓 HelloWorld 项目: 安卓 HelloWorld 项目 二、数据线连接手机 1. 手机开启开发者模式 参考&#xff1…

ruoyi+Hadoop+hbase实现大数据存储查询

前言 有个现实的需求,数据量可能在100亿条左右。现有的数据库是SQL Server,随着采集的数据不断的填充,查询的效率越来越慢(现有的SQL Server查询已经需要数十秒钟的时间),看看有没有优化的方案。 考虑过S…

解决webpack打包生成gz格式css/js文件没法在nginx使用的问题--全网唯一正确

本文绝对是全网解决这个问题唯一正确的文章,没有之一! 很多人都说开启nginx gzip压缩,这些人完全是胡说八道!你们到底懂不懂叫gzip压缩啊?! 不信你就试试,如果css/js只有gz文件,ng…

国外客户跟我要佣金,该给不该给?

“Jack,这次你要是不帮我,我就死定了!” 收到美国公司采购Antony的信息时,我有些哭笑不得,因为在我电脑屏幕上除了他的信息外,还有来自他公司监察部门的邮件: “jack先生,我们调查…

Java+SSM springboot+MySQL家政服务预约网站设计en24b

随着社区居民对生活品质的追求以及社会老龄化的加剧,社区居民对家政服务的需求越来越多,家政服务业逐渐成为政府推动、扶持和建设的重点行业。家政服务信息化有助于提高社区家政服务的工作效率和质量。 本次开发的家政服务网站是一个面向社区的家政服务网…

osgSim扩展库

1.osgSim扩展库 osgSim是0SG的一个工具箱(NodeKit),提供了仿真系统中以及染OpenFlight 数据库所需的特殊渲染功能,如地形高程图、光点节点和 DOF 变换节点等。 下面对一些可能会用到的类进行简单介绍。 1.1 DOFTransform类 osgSim::DOFTransform类是对 …