UCOSIII 时间片轮调度接口OS_SchedRoundRobin详解

news2024/9/22 15:43:48

        时间片轮调度(Round-Robin Scheduling)是一种常见的任务调度算法,它将CPU时间片均匀地分配给每个任务,确保每个任务在一定时间内能够获得CPU资源。这种调度方式适用于需要公平分配CPU时间的系统,特别是在有多个相同优先级的任务时,片轮调度能有效防止某个任务长期占用CPU资源。本文将详细介绍uCOS-III中的片轮调度的配置使用及实现原理。

 1. 片轮调度的配置及使用

1.1 编译前配置宏定义使能

在配置片轮调度之前,需要在配置文件 os_cfg.h 中使能相关宏定义:

#define OS_CFG_SCHED_ROUND_ROBIN_EN  1u  /* Enable (1) or Disable (0) Round Robin scheduling */

1.2 运行时配置使能及片轮时间

void OSSchedRoundRobinCfg(CPU_BOOLEAN en, OS_TICK dflt_time_quanta, OS_ERR *p_err);

参数解释:

  • en:确定是否启用片轮调度,当值为 OS_TRUE 时启用,为 OS_FALSE 时禁用。
  • dflt_time_quanta:默认的时间片长度(单位为系统时钟节拍),如果设置为0,则默认值为 OSCfg_TickRate_Hz / 10
  • p_err:指向错误代码变量的指针,函数返回时会通过该变量报告错误状态。

2. 时间片轮调度的使用场景

多任务环境:系统中有多个相同优先级的任务需要公平地分配CPU时间。

任务并发:提高任务的响应速度,确保系统的实时性和公平性

3. 片轮调度的实现原理

        片轮调度的核心实现包括 OS_SchedRoundRobinOSSchedRoundRobinYield 函数。OS_SchedRoundRobin 函数在每个系统时钟节拍(tick)中被调用,用于更新当前任务的时间片计数器并决定是否需要切换任务。而 OSSchedRoundRobinYield 函数允许任务在完成当前时间片之前主动放弃CPU。

3.1 OS_SchedRoundRobin 调用流程图

3.1 OS_SchedRoundRobin 实现流程图

4. 如何配置任务时间片长度 

可以通过以下方式配置任务的时间片长度:

全局配置:使用 OSSchedRoundRobinCfg 函数设置所有任务的默认时间片长度。

void OSSchedRoundRobinCfg(CPU_BOOLEAN en, OS_TICK dflt_time_quanta, OS_ERR *p_err);

任务创建时配置:在创建任务时,通过 OSTaskCreate 函数的 time_quanta参数设置特定任务的时间片长度。

p_tcb->TimeQuanta = time_quanta; /* Save the #ticks for time slice (0 means not sliced) */
if (time_quanta == 0u) {
    p_tcb->TimeQuantaCtr = OSSchedRoundRobinDfltTimeQuanta;
} else {
    p_tcb->TimeQuantaCtr = time_quanta;
}

运行时配置:使用 OSTaskTimeQuantaSet 函数在任务运行期间动态修改特定任务的时间片长度。

void OSTaskTimeQuantaSet(OS_TCB *p_tcb, OS_TICK time_quanta, OS_ERR *p_err);

5. 任务主动放弃时间片

  当前任务调用OSSchedRoundRobinYield, 主动放弃剩余的时间片,让出CPU,以便调度器能切换到其他任务执行。

6. 时间片轮调度的缺点

  • 效率问题:时间片轮调度需要频繁地切换任务,这会带来一定的上下文切换开销,尤其是在任务切换频繁的情况下。
  • 锁竞争问题:在多任务环境中,不同任务对资源的竞争可能导致死锁的问题。
  • 临界资源问题:在多任务环境中,临界资源竞争问题可能会破坏数据的完整性及可视化

总结

        片轮调度是一种有效的任务调度策略,能够确保同优先级任务之间的公平性。在uCOS-III中,通过配置和使用片轮调度,可以在多任务环境中实现高效的任务管理。然而,需要根据系统的具体情况合理配置时间片长度,以避免潜在的效率问题、临界资源竞争问题。

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

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

相关文章

叶再豪老师-【番外篇-主升三域】课程

文章目录 1.番外篇1.1番外篇:【道篇】1.1.1 课程目录1.1.2 大道至简1.1.3 欲速则不达,见小利则大事不成1.1.4 强弱转换规律1.1.5 创战法以和道,成为简单快乐的投资者1.1.6 融合道,服务众生,离苦得乐 1.2 番外篇:【势篇】1.2.1 顺势…

Adobe国际认证详解-从零开始学做视频剪辑

从零开始学做视频剪辑,是许多初学者面临的挑战。在这个数字媒体时代,视频剪辑已经成为一种重要的技能,无论是个人爱好还是职业发展,掌握视频剪辑技能都是非常有价值的。 视频剪辑,简称“剪辑”,是视频制作过…

maven archetype

1.简介 maven脚手架是为了创建一个项目模板&#xff0c;以后新建项目都能够复用该模板 maven中模板引擎使用的是velocity,在文件中可以使用它的语法获取变量等操作 2.实现 单模块脚手架实现 pom.xml <?xml version"1.0" encoding"UTF-8"?> &…

无人机之起飞过程操作

一、开启无人机电源 1、开启电源时&#xff0c;再次确认无人机各个部件工作正常&#xff0c;传感器未被遮挡&#xff1b; 2、将无人机放置在平坦的地面上&#xff0c;并开启电源。 二、进行预起飞检查 1、通过无人机的控制系统执行预起飞检查&#xff0c;包括检测罗盘、GPS…

【Unity2D 2022:UI】无法拖拽TextMeshPro组件

在预制体Card上挂载了四个Text Mesh Pro组件&#xff0c;分别命名为Name、HP、ATK、Description。 将预制体Card挂载脚本CardDisplay用来在预制体上显示属性&#xff0c;并创建TextMeshPro对象来接收TextMeshPro组件。 using TMPro; using UnityEngine; using UnityEngine.UI;…

Air780EP模块 LuatOS开发-MQTT接入阿里云应用指南

简介 本文简单讲述了利用LuatOS-Air进行二次开发&#xff0c;采用一型一密、一机一密两种方式认证方式连接阿里云。整体结构如图 关联文档和使用工具&#xff1a;LuatOS库阿里云平台 准备工作 Air780EP_全IO开发板一套&#xff0c;包括天线SIM卡&#xff0c;USB线 PC电脑&…

Harmony Next -- 通用标题栏:高度自定义,可设置沉浸式状态,正常状态下为:左侧返回、居中标题,左中右均可自定义视图。

hm_common_title_bar OpenHarmony三方库中心仓&#xff1a;https://ohpm.openharmony.cn/#/cn/detail/common_title_bar 介绍 一款通用标题栏&#xff0c;支持高度自定义&#xff0c;可设置沉浸式状态&#xff0c;正常状态下为&#xff1a;左侧返回、居中标题&#xff0c;左…

uniapp的h5,读取本地txt带标签的文件

效果图 使用的回显的标签是u-parse&#xff0c;下面的网址讲了这个标签的相关 https://www.cnblogs.com/huihuihero/p/12978903.html 导入此插件 https://ext.dcloud.net.cn/plugin?id364 使用 uni.request({// 本地文件url: "/static/互联网医院医师端用户协议.txt…

初学C++30道选择题带答案(1)

题目 (31) 下面程序的输出是 A) 0 0 3 B) 0 1 2 C) 1 0 3 D) 1 1 2 #include <iostream> using namespace std; main() { int a-1,b4,k;k(a<0)&&(!(b--<0)); cout<<k<<a<<b;} (32)以下…

Nginx 怎样处理请求的并发控制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 怎样处理请求的并发控制&#xff1f;一、并发控制的重要性二、Nginx 中的并发连接限制三、Nginx 的请求队列四、Nginx 的限流机制五、Nginx 的负载均衡策略…

TypeScript中Interface接口的深度探索与实践

定义接口 在TypeScript中&#xff0c;interface是一个强有力的概念&#xff0c;它用于定义类型签名&#xff0c;特别是对象的结构。接口可以用来描述对象应该有哪些属性、方法&#xff0c;以及这些成员的类型。它们是实现类型系统中“鸭子类型”&#xff08;duck typing&#…

小试牛刀-区块链WalletConnect协议数据解密

目录 1.编写目的 2.工作原理 3.分析过程 3.1 websokcet连接 3.2 连接后的消息 3.3 获取sym_key 3.4 解密数据 Welcome to Code Blocks blog 本篇文章主要介绍了 [WalletConnect协议数据解密] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 1.编写目的 最近在…

<HMI><汇川>在汇川IT7000系列的HMI(触摸屏)中,如何为你的画面设置全局样式?

前言 汇川的HMI软件是使用了Qt来编写的,因此在汇川的HMI程序编写过程,是支持使用qt的样式来自定义部件样式的,即qss格式。 概述 汇川的软件本身提供三个系统的style样式,我们可以直接使用,但是,如果系统提供的样式不符合你的需求,那么你可以对其进行修改,或者自己新建…

计算机网络-配置路由器ACL(访问控制列表)

配置访问控制列表ACL 拓扑结构 拓扑结构如下&#xff1a; 要配置一个ACL&#xff0c;禁止PC0访问PC3&#xff0c;禁止PC4访问PC0&#xff0c;其它正常。 配置Router0 配置接口IP地址&#xff1a; interface fastethernet 0/0 ip address 192.168.1.1 255.255.255.0 no shu…

MongoDB教程(二十二):MongoDB固定集合

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、固定集…

基于JSP的课程思政元素收集遴选系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; JSPJavaBeansServlet 工具&#xff1a; IDE&#xff08;如Eclipse或IntelliJ IDEA&#xff…

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容&#xff1a;用elementui的Upload 组件上传Excel文件&#xff0c;上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求&#xff0c;有很多种方法实现。但是不想要跳转外部地址&#xff0c;所以用了xlsx插件来解析表格&#xff0c;并展…

基于FPGA + Qt + OpenCv的人脸考勤系统

一:界面设计 客户端界面设计: 服务端界面设计: 简介:首先服务端在注册界面先注册人脸,然后客户端界面进行人脸识别,将人脸识别的图像发送给服务端以后,服务端在图像数据库里寻找人脸比对,若有数据就将查询到的个人信息发送给客户端,并在客户端显示,查询界面是用来查…

Hadoop、Hive、HBase、数据集成、Scala阶段测试

姓名&#xff1a; 总分&#xff1a;Hadoop、Hive、HBase、数据集成、Scala阶段测试 一、选择题&#xff08;共20道&#xff0c;每道0.5分&#xff09; 1、下面哪个程序负责HDFS数据存储&#xff08; C &#xff09; A. NameNode B. Jobtracher C. DataNode D. Sec…

机器学习数学基础(2)--最大似然函数

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 在机器学习和统计学领域中&#xff0c;似然函数&#xff08;Likelihood Function&#xff09;是一个至关重要的概念。…