良许Linux教程网 干货合集 时间片论法-优化方案

时间片论法-优化方案

本文介绍的是一种名为时间片差分调度法的任务调度模式,可以充分利用 MCU 的资源。该调度法旨在合理分配资源,避免 MCU 在大部分时间内处于空跑状态,同时提高每个任务的调度周期的命中率,即按时准点执行任务。

为了充分利用 MCU 的资源,我们需要在不影响原有的函数调度情况下进行分配。传统的时间片论法不具备操作系统的任务优先级切换功能,因此必须等待当前任务执行完成后才能执行下一个任务,除非有中断的发生。

在时间片论法中,难以保证某些任务能够及时调度运行,尤其是在需要调度的任务较多的情况下。常常会出现任务无法及时调度的问题,从而影响所需功能的正常执行。为了解决这个问题,本文提出了时间片差分调度法。

在时间片差分调度法中,我们以固定的节拍长度(例如200us)为单位进行任务调度。每个任务的调度单位为1ms。在图中,我们可以看到每个刻度表示200us的时间。以200us以上的任务为例进行说明,以便更好地理解。

通过时间片差分调度法,我们可以合理地安排每个任务的执行时间,避免长时间的空闲状态和资源浪费。同时,通过优化调度周期的命中率,可以准确地按时执行每个任务,提高系统的性能和稳定性。

总之,时间片差分调度法是一种充分利用 MCU 资源的任务调度模式,通过合理分配资源和优化调度周期,可以提高系统的效率和稳定性。

image-20231103202857274
image-20231103202857274

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

  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. …等其他仔细观察的可知信息,这里就不多说了

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

如何优化

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

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

    • 任务1(黄色)周期为5ms
    • 任务2(红色)周期为10ms
    • 任务5(紫色)周期为20ms
    • 任务4(蓝色)周期为10ms
    • 任务5(绿色)周期为20ms
  2. 图中所展示的任务调度命中率也不高,也存在周期性的几个调度单位大部分时间处于空跑状态

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

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

image-20231103202905202
image-20231103202905202

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

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

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

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

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

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

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

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

五个任务函数在可接受范围内调整任务周期后,同时调整初值
– 任务1(黄色)周期为5ms
– 任务2(红色)周期为5ms
– 任务5(紫色)周期为5ms
– 任务4(蓝色)周期为10ms
– 任务5(绿色)周期为15ms

得到对比图:

image-20231103202908639
image-20231103202908639

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部