前言

通过该篇学习了嵌入式的任务调度(即时间片论法)后,了解到通过以1ms为调度时间单位轮询判断是否需要执行函数任务,那么下面介绍如何基于时间片论法的任务调度模式充分利用MCU的资源,姑且先称这种方式为时间片差分调度法

充分利用MCU的资源指的是在不影响原有的函数调度情况下合理进行分配,避免MCU大部分时间处于空跑状态(即大部分时间没有调度任何的功能函数,只是在不停地判断时间状态,从而造成的资源浪费),同时提高每个任务的调度周期的命中率(按时准点执行)

背景

时间片论法不比操作系统,操作系统可以通过任务优先级抢占当前正在执行的低优先级任务,或者高优先级任务主动睡眠释放MCU资源以便低优先级的任务可以正常执行;时间片论法必须等待当前任务执行完成后才能执行下一个任务(中断除外)。

因此,由于时间片论法的特性,很难保证某些任务能够及时得到调度运行,特别是所需要的调度任务多的情况下,常常出现不能及时调度的问题(虽然整体调度周期不变),从而影响所需要的功能,常见的做法可能通过定时中断触发的方式去执行,可是碰到一些任务函数执行时间稍微长的就会影响中断的响应等。

可以看下面的函数调度时长图,每个刻度为200us(以下称节拍),调度单位为1ms(以下称时间片),只以200us以上的任务举例,方便进行理解

从上述图中可知以下信息:

  1. 图中一共有五个任务函数,每个任务函数的执行时间不定

    - 任务1(黄色)周期为5ms

    - 任务2(红色)周期为6ms

    - 任务5(紫色)周期为5ms

    - 任务4(蓝色)周期为12ms

    - 任务5(绿色)周期为15ms
  2. 同一时刻触发任务调度的执行时的顺序(调度函数的顺序即可任务默认优先级):1>2>3>4>5
  3. 第25ms时任务1的调度慢了一个节拍,原因是任务2和4的调度总时长超过了时间片的时长
  4. 除了任务1大部分时间都能及时被调度,其他任务并不能被及时调度,虽然周期不变,但命中率不高(甚至等于0)
  5. 其中存在周期性的几个时间片大部分时间处于空跑状态
  6. ...等其他仔细观察的可知信息,这里就不多说了

从获取的信息可知,大部分任务虽然整体周期没变,但是几乎很少有低优先级的任务有较高的命中率,这样就导致某些功能需要较高的命中率同时执行时间相对较长(不能放在中断中的任务函数)就不能正常工作。

如何优化

在优化之前,首先看下面这个有一定规律的函数调度时长图

  1. 还是五个任务,而规律就是函数任务公约数=最小调度周期任务,即5ms(假设小于5ms的任务大都执行时间非常短,在此可忽略不计)

    - 任务1(黄色)周期为5ms

    - 任务2(红色)周期为10ms

    - 任务5(紫色)周期为20ms

    - 任务4(蓝色)周期为10ms

    - 任务5(绿色)周期为20ms
  2. 图中所展示的任务调度命中率也不高,也存在周期性的几个时间片大部分时间处于空跑状态

看一下优化前后的对比图,虽然还是存在大部分时间处于空跑状态,但是命中率提高到了100%

只要保证每个任务函数耗时小于调度单位,那么就能做到命中率 100%

如何实现的?

从优化后的图中可以了解到,第一个时刻调度的时候只有任务1,第二个时间调度只有任务2,以此类推,就可以在一定程度上避开同一时刻多个任务需要同时等待调度,从而引发的拥堵。

可以通过每个任务计时器的倒计时初值进行调整,从而达到每个时间调度只运行一个任务的目的,提高任务的命中率。

那么接下来按照上面提到的规律去优化刚开始的那个,主要有两点:

  1. 在可接受范围内调整任务的周期,尽量保证任务函数任务公约数=最小调度周期任务

可以理解称任务公约数等于多少就代表可以在初值上类推多少个任务进行错开初次执行;可以忽略部分函数耗时特别短的任务

  1. 调整每个任务倒计时器的初值,尽量错开拥堵时刻

任务多的情况下只能够尽量避免,从而提高命中率,通过每个任务调度周期和执行时长进行推算,得到每个任务的最佳的初值

根据以上两点对上述调度任务进行优化如下:

五个任务函数在可接受范围内调整任务周期后,同时调整初值

- 任务1(黄色)周期为5ms

- 任务2(红色)周期为5ms

- 任务5(紫色)周期为5ms

- 任务4(蓝色)周期为10ms

- 任务5(绿色)周期为15ms

得到对比图:

此次优化将充分地利用了每个时间片的资源,虽然某一段时间内的空跑时间总和一样,但是实际上将空跑的时间进行了分散,提高了资源的使用率,从而让每个任务的命中率提高到100%。

时间片差分调度法-充分利用MCU的资源的更多相关文章

  1. 修改uCOS_II以实现“优先级+时间片”联合调度

    本文在uCOS II上增加时间片任务调度的的原理: 对设置为同优先级的任务使用时间片调度,不同优先级任务仍然使用uCOS II的优先级调度策略.在同优先级任务的时间片调度中,所有任务暂时时间片长度固定 ...

  2. kubernetes调度之pod优先级和资源抢占

    系列目录 Pod可以拥有优先级.优先意味着相对于其它pod某个pod更为重要.如果重要的pod不能被调度,则kubernetes调度器会优先于(驱离)低优先级的pod来让处于pending状态的高优先 ...

  3. Hadoop YARN 调度器(scheduler) —— 资源调度策略

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_yarn_resource_scheduler 搜了 ...

  4. ucos操作系统的内核有哪些调度方法

    1)时间片轮番调度法 假设系统中有5个任务,T1,T2,T3,T4,T5,这个时候,操作系统为每一个任务分配时间,比如说我们为T1任务分配10毫秒,为T2任务分配20毫秒,为T3任务分配5毫秒,为T4 ...

  5. 从linux和ucos的比较中来看进程这个概念

    这种问题就要和ucos结合起来嘛. 程序和进程: 程序:存放在磁盘上的一些列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体. linux进程的四要素: 1. 有一 ...

  6. 建立一个属于自己的AVR的RTOS

    建立一个属于自己的AVR的RTOS(序) 建立一个属于自己的AVR的RTOS(第一篇:函数的运行) 建立一个属于自己的AVR的RTOS(第二篇:人工堆栈) 建立一个属于自己的AVR的RTOS(第三篇: ...

  7. xmake v2.3.2 发布, 带来和ninja一样快的构建速度

    这个版本重点重构优化了下内部并行构建机制,实现多个target间源文件的并行编译,以及并行link的支持,同时优化了xmake的一些内部损耗,修复影响编译速度的一些bug. 通过测试对比,目前的整体构 ...

  8. CPU 时间片 分时 轮转调度

    时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的.如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进 ...

  9. 资源管理与调度系统-资源管理系统Mesos

    资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...

  10. spark性能调优:资源优化

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

随机推荐

  1. 3_肯德基餐厅信息查询_动态加载_post请求

    肯德基餐厅信息查询网址:http://www.kfc.com.cn/kfccda/storelist/index.aspx import requests url = 'http://www.kfc. ...

  2. 6_SSM

    一. ssm整合 1.1 项目创建 1.1.1 创建Maven项目 创建一个普通的Maven-web项目,名称为ssm 记得勾选上Create from archetype然后选择后缀为maven-a ...

  3. PTA2022 520钻石争霸赛题解

    7-1 520表白 不用说 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int max ...

  4. C++和Java多维数组声明和初始化时的区别与常见问题

    //C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数.而仅声明/创建数组而不初始化时,Cpp要求必须写明//行数和列数才能够创建数 ...

  5. 网页计时访问器application对象

    网页计时访问器 application对象代表Web应用本身,整个Web共享一个application对象.开始于服务器打开结束与服务器关闭.在不同的浏览器打开j计时器仍然有作用.除非把服务器关闭 & ...

  6. 使用 etcdadm 快速、弹性部署 etcd 集群

    Etcd 是一个可靠的分布式键值存储, 常用于分布式系统关键数据的存储:而 etcdadm 是一个用于操作 etcd 集群的命令行工具,它可以轻松创建集群.向现有集群添加成员.从现有集群中删除成员等操 ...

  7. HTML元素大全(2)-表单

    01.<form>表单 <form> 表单是比较重要的HTML元素,块元素,主要作用是向服务端提交数据.结合表单元素input使用,通过内部的button按钮提交(type=& ...

  8. 十七、Job与Cronjob

    Job 与 Cronjob 一.Job ​Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束. 特殊说明: 1.spec.template 格式同 Pod ​2 ...

  9. JSP Webshell免杀设计

    JSP Webshell免杀设计 @author:drag0nf1y 介绍 什么是Webshell? 被服务端解析执行的php.jsp文件 什么是RCE? remote command execute ...

  10. 畅联新增物联网设备接入协议:精华隆的NB一键报警

    这个是有点时间了,这里记录一下! ----------------------------------------------------------------------------------- ...