首页 > 其他分享 >RTOS 应用中的调度策略

RTOS 应用中的调度策略

时间:2023-03-03 19:44:40浏览次数:26  
标签:优先级 策略 轮询 RTOS 调度 任务 抢占

Original 麦克泰 麦克泰技术 2023-02-24 11:00 Posted on 上海

 

从前后台架构的软件开发过渡到使用实时操作系统(RTOS)可能是一项困难的工作。但使用RTOS有许多优势,例如简化应用集成,支持任务抢占调度,当开发人员使用复杂的32位微控制器,且可以获取足够的Flash和RAM空间时,使用RTOS开始变得有意义。许多32位应用程序需要使用USB、TCP/IP和文件系统,这对于裸机应用程序的开发是非常困难的,且大多数第三方中间件被设计为与RTOS无缝集成。

在使用RTOS之前,用户可能需要深入研究RTOS的细节,我们来了解一下RTOS中常用的调度技术。

 

1、时间片轮询调度

前后台系统实现通常基于轮询调度技术,它是一种很自然的软件编写方式,只需向超级循环中添加新代码,相当于增加了一个新的任务。

RTOS中的轮询调度策略,是允许多个任务可以分配同一个优先级别。调度程序基于时钟监控任务时间,任务处于相关优先级,按照先进先出的原则执行分配到的时间片,时间到了,即使当前任务还没有完成,任务也将CPU时间传递给下一个任务。在下一个分配到的时间段内,该任务将从它停止的位置继续执行。

Image

常用的RTOS,如μC/OS-III(Cs/OS3)、FreeRTOS都支持时间片轮询算法。FreeRTOS中每个任务的时间片长度是固定的,为一个时间节拍;而μC/OS-III中每个任务的时间片长度可变,可在任务创建时指定。

 

2、基于优先级的协同调度

在RTOS中,协同调度是基于优先级的非抢占调度方法。任务按优先级排序,并且是事件驱动类型的,一旦正在运行的任务完成,或者任务主动调用OS服务放弃CPU,就绪运行的优先级最高的任务才可以获得CPU使用权。

Image

 

3、抢占式调度

RTOS通过可抢占调度保证实时性。为了保证任务响应,在抢占调度策略中,只要一个优先级更高的任务就绪,正在运行的任务低优先级任务将被切换出来。通过抢占,正在运行的任务被迫放弃处理器,即使任务工作还没有完成。

Image

RTOS通常可以配置为使用许多确定性调度算法,以保证满足任务截止时限。如FreeRTOS、μC/OS-III支持抢占和时间片轮询两种调度方法。

 

4、总结

RTOS对于嵌入式软件开发人员来说是一个强大的工具。RTOS应用中,每个任务都有单独的任务控制块,其中包含堆栈、优先级和ID等参数。每个任务都可以被看作是单独的应用程序。RTOS还提供了各种各样的同步和通信工具,如信号量、互斥信号量和消息队列,简化应用的开发。

但任务切换将消耗CPU时间,即使在32位处理器上,RTOS也会造成时间损失。任务切换比中断占用更多的时间。如果是一个很小的应用程序,但需要充分利用处理器资源,在这种情况下,需仔细考虑RTOS的可行性。

每种调度算法都有其优缺点,了解RTOS常用的调度算法,可以帮助我们做出合适的选择。

 

标签:优先级,策略,轮询,RTOS,调度,任务,抢占
From: https://www.cnblogs.com/ncepu/p/17176750.html

相关文章

  • 操作系统--处理机的调度
                           ......
  • MongoDB写入数据策略
    上篇文章介绍了Mongo读取数据的策略(MongoDB读数据策略),主要是readconcern、readpreference两参数,其中readconcern作用于服务端,决定了什么时候能读取到数据;readpreference在客......
  • K8S调度约束
    一、调度约束Kubernetes是通过List-Watch(监控)的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。用户是通过kubectl根据配置文件,向APIServer......
  • K8S集群调度,约束
     1.集群调度简介#Scheduler是kubernetes中的调度器组件,主要的任务是把定义的pod分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:公平:如何保证每个节点都......
  • pod调度器
    Pod是Kubernetes集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。Pod控制器由master的kube-controlle......
  • k8s集群调度
    1.集群调度简介#Scheduler是kubernetes中的调度器组件,主要的任务是把定义的pod分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:公平:如何保证每个节点都能......
  • 【Redis的三种数据删除策略】定时定期惰性,超出内存就自动清理
    https://blog.csdn.net/DQWERww/article/details/126453008https://blog.csdn.net/qq_38056518/article/details/122107638  内存淘汰机制Redis有过期策略......
  • 外汇天眼:绝佳的日内交易策略,你学会了吗?
    一套正收益的技术系统是稳定盈利的基础,注意技术俩字。投机市场中,有很多朋友是被技术这俩字给坑死的。一套正收益的交易系统,加上良好的执行能力,才是稳定盈利的基础。盈利的关......
  • 调度器46—tick模式
    一、tick简介tick就是一个周期性的中断,周期通过CONFIG_HZ进行配置,一般常取值为100Hz、250Hz、1000Hz。Tick每秒窃取CPU100到1000次,导致Icache、dcache定期被丢弃......
  • 不背锅运维:k8s调度之初探nodeSelector和nodeAffinity
    写在开篇在k8s的调度中,有强制性的nodeSelector,节点亲和性nodeAffinity、Pod亲和性podAffinity、pod反亲和性podAntiAffinity。本篇先对nodeSelector和nodeAffinity做个初......