FreeRTOS 调度算法简述

优先级抢占式调度

本章的示例程序已经演示了 FreeRTOS 在什么时候以及以什么方式选择一个什么
样的任务来执行。
 每个任务都赋予了一个优先级。
 每个任务都可以存在于一个或多个状态。
 在任何时候都只有一个任务可以处于运行状态。
 调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行。
这种类型的调度方案被称为”固定优先级抢占式调度”。所谓”固定优先级”是指每个
任务都被赋予了一个优先级,这个优先级不能被内核本身改变(只能被任务修改)。”抢占
式”是指当任务进入就绪态或是优先级被改变时,如果处于运行态的任务优先级更低,
则该任务总是抢占当前运行的任务。
任务可以在阻塞状态等待一个事件,当事件发生时其将自动回到就绪态。时间事件
发生在某个特定的时刻,比如阻塞超时。时间事件通常用于周期性或超时行为。任务或
中断服务例程往队列发送消息或发送任务一种信号量,都将触发同步事件。同步事件通
常用于触发同步行为,比如某个外围的数据到达了。

通过图示某个应用程序的执行流程展现了抢占式调度的行为方式

如图 图 中所示

1. 空闲任务
空闲任务具有最低优先级,所以每当有更高优先级任务处于就绪态是,空闲任
务就会被抢占 —— 如图中 t3, t5 和 t9 时刻。
2. 任务 3
任务 3 是一个事件驱动任务。其工作在一个相对较低的优先级,但优先级高于
空闲任务。其大部份时间都在阻塞态等待其关心的事件。每当事件发生时其就
从阻塞态转移到就绪态。FreeRTOS 中所有的任务间通信机制(队列,信号量等)
都可以通过这种方式用于发送事件以及让任务解除阻塞。
事件在 t3,t5 以及 t9 至 t12 之间的某个时刻发生。发生在 t3 和 t5 时刻的事件
可以立即被处理,因为这些时刻任务 3 在所有可运行任务中优先级最高。发生
在 t9 至 t12 之间某个时刻的事件不会得到立即处理,需要一直等到 t12 时刻。
因为具有更高优先级的任务 1 和任务 2 尚在运行中,只有到了 t12 时刻,这两
个任务进入阻塞态,使得任务 3 成为具有最高优先级的就绪态任务。
3. 任务 2
任务 2 是一个周期性任务,其优先级高于任务 3 并低于任务 1。根据周期间隔,
任务 2 期望在 t1,t6 和 t9 时刻执行。
在 t6 时刻任务 3 处于运行态,但是任务 2 相对具有更高的优先级,所以会抢占
任务 3,并立即得到执行。任务 2 完成处理后,在 t7 时刻返回阻塞态。同时,
任务 3 得以重新进入运行态,继续完成处理。任务 3 在 t8 时刻进入阻塞状态。
4. 任务 1
任务 1 也是一个事件驱动任务。任务 1 在所有任务中具有最高优先级,因此可
以抢占系统中的任何其它任务。在图中看到,任务 1 的事件只是发生在在 t10
时刻,此时任务 1 抢占了任务 2。只有当任务 1 在 t11 时刻再次进入阻塞态之
后,任务 2 才得以机会继续完成处理。

 选择任务优先级

从图  中可以看到优先级分配是如何从根本上影响应用程序行为的。
作为一种通用规则,完成硬实时功能的任务优先级会高于完成软件时功能任务的优
先级。但其它一些因素,比如执行时间和处理器利用率,都必须纳入考虑范围,以保证
应用程序不会超过硬实时的需求限制。
单调速率调度(Rate Monotonic Scheduling, RMS)是一种常用的优先级分配技术。
其根据任务周期性执行的速率来分配一个唯一的优先级。具有最高周期执行频率的任务
赋予高最优先级;具有最低周期执行频率的任务赋予最低优先级。这种优先级分配方式
被证明了可以最大化整个应用程序的可调度性(schedulability),但是运行时间不定以及
并非所有任务都具有周期性,会使得对这种方式的全面计算变得相当复杂。

协作式调度

本书专注于抢占式调度。FreeRTOS 可以选择采用协作式调度。
采用一个纯粹的协作式调度器,只可能在运行态任务进入阻塞态或是运行态任务显
式调用 taskYIELD()时,才会进行上下文切换。任务永远不会被抢占,而具有相同优先
级的任务也不会自动共享处理器时间。协作式调度的这作工作方式虽然比较简单,但可
能会导致系统响应不够快。
实现混合调度方案也是可行的,这需要在中断服务例程中显式地进行上下文切换,
从而允许同步事件产生抢占行为,但时间事件却不行。这样做的结果是得到了一个没有
时间片机制的抢占式系统。或许这正是所期望的,因为获得了效率,并且这也是一种常
用的调度器配置。

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

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

相关文章

计算机毕业设计分享-SSM实验室耗材管理系统 13205(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM实验室耗材管理系统 摘 要 本课题研究的实验室耗材管理系统,主要功能模块包括用户管理、耗材管理、入库记录、出库记录、报废登记、供应商管理、耗材类别、实验室管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实…

【STM32 CubeMX】学STM必会的数据结构——环形缓冲区

文章目录 前言一、环形缓冲区是什么二、实现环形缓冲区实现分析2.1 环形缓冲区初始化2.2 写buf2.3 读buf2.4 测试 三、代码总况总结 前言 在嵌入式系统开发中,经常需要处理数据的缓存和传输,而环形缓冲区是一种常见且有效的数据结构,特别适用…

Codeforces Round 925 (Div. 3)

A. Recovering a Small String&#xff08;枚举&#xff09; 思路 每次枚举每一位 #include <iostream> using namespace std;int main() {int t;cin >> t;for (int i 0; i < t; i) {int n;cin >> n;if(n < 28){cout<<"aa"<<…

Rust 数据结构与算法:3栈:用栈实现符号匹配

1、符号匹配 如: (5+6)(7+8)/(4+3)、{ { ( [ ] [ ])}}、(a+b)(c*d)func() 等各类语句的符号匹配。 这里我们关注的不是数字而是括号,因为括号更改了操作优先级,限定了语言的语义,这是非常重要的。如果括号不完整,那么整个表达式就是错的。 括号都必须以成对匹配的形式出…

「数据结构」MapSet

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; Map&Set &#x1f349;概念&#x1f349;模型&#x1f349;Map&#x1f34c;TreeMap和HashMap的区别&#x1f34c;Map常用方…

LeetCode.107. 二叉树的层序遍历 II

题目 107. 二叉树的层序遍历 II 分析 这个题目考查的是二叉树的层序遍历&#xff0c;对于二叉树的层序遍历&#xff0c;我们需要借助 队列 这种数据结构。再来回归本题 &#xff0c;我们只需要将 二叉树的层序遍历的结果逆序&#xff0c;就可以得到这道题我们要求的答案了。…

引用的账户当前已锁定,且可能无法登录怎么办

WINDOWS提示引用账户已锁定怎么办&#xff08;补充&#xff09; 一般是多次输错密码的原因&#xff01;等待半个小时就能打开了&#xff01; 这跟手机锁屏被小朋友锁死原理类似&#xff0c;但是Windows不会给你显示具体时间&#xff0c;所以你登录BIOS改系统时间&#xff0c;欺…

102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&…

模型 人货场

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。重在提升认知。连接消费者与商品的桥梁。 1 ”人货场“模型的应用 1.1 以抖音直播电商为背景的人货场应用-小杨哥的带货奇迹 小杨哥&#xff0c;一位知名的抖音主播&#xff0c;以其幽默风趣的直播风…

从零开始学howtoheap:解题西湖论剑Storm_note

how2heap是由shellphish团队制作的堆利用教程&#xff0c;介绍了多种堆利用技术&#xff0c;后续系列实验我们就通过这个教程来学习。环境可参见从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;从零开始配置pwn环境&#xff1a;优化pwn虚拟机配置支持libc等指…

AJAX——HTTP协议

1 HTTP协议-请求报文 HTTP协议&#xff1a;规定了浏览器发送及服务器返回内容的格式 请求报文&#xff1a;浏览器按照HTTP协议要求的格式&#xff0c;发送给服务器的内容 1.1 请求报文的格式 请求报文的组成部分有&#xff1a; 请求行&#xff1a;请求方法&#xff0c;URL…

算法-16-并查集

并查集简介 并查集&#xff1a;一开始&#xff0c;把a&#xff0c;b&#xff0c;c放入并查集&#xff0c;a自己一个集合&#xff0c;b自己一个&#xff0c;c自己一个 提供的方法 1.boolean isSameSet(a,b)&#xff0c;判断ab是否在同一个集合 2.void union(a,b),把a所…