zoukankan      html  css  js  c++  java
  • RTX——第10章 任务调度-抢占式、时间片和合作式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php

    本章教程为大家将介绍 RTX 操作系统支持的任务调度方式,抢占式,时间片和合作式,这部分算是
    RTX 操作系统的核心了。 对于初学者来说,要一下子就能够理解这些比较困难些,需要多花些时间把这些
    基本概念搞清楚,然后阅读下源码,深入理解实现方法。
    RTX 支持的调度方式
    RTX 操作系统支持三种调度方式:
    抢占式调度
    每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数,
    比如 os_dly_wait。
    时间片调度
    每个任务都有相同的优先级,任务会运行固定的时间片个数直到遇到系统阻塞式的 API 函数,比如
    os_dly_wait。
    合作式调度
    每个任务都有相同的优先级,而且时间片调度要被禁止。 任务会一直的运行直到遇到阻塞式的 API 函
    数,比如 os_dly_wait 或者用户调用函数 os_tsk_pass
    对于 RTX 操作系统而言,实际应用主要是抢占式调度和时间片调度,合作式调度用到的很少。

    抢占式调度器基本概念
    在实际的应用中,不同的任务需要不同的响应时间。例如,我们在一个应用中需要使用电机,键盘和
    LCD 显示。电机比键盘和 LCD 需要更快速的响应,如果我们使用合作式调度器或者时间片调度,那么电
    机将无法得到及时的响应,这时抢占式调度是必须的。
    如果使用了抢占式调度,最高优先级的任务一旦就绪,总能得到 CPU 的控制权。当一个运行着的任
    务被其它高优先级的任务抢占,当前任务的 CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的
    任务立刻得到了 CPU 的控制权。如果是中断服务程序使一个高优先级的任务进入就绪态,中断完成时,
    被中断的任务被挂起,优先级高的那个任务开始运行。
    使用抢占式调度器,使得最高优先级的任务什么时候可以执行,可以得到 CPU 的控制权是可知的,
    同时使得任务级响应时间得以最优化。
    总的来说,学习抢占式调度掌握最关键的一点是:抢占式调度器会为每个任务都分配一个优先级,调
    度器会激活就绪任务中优先级最高的任务,并运行任务就绪列表里面优先级最高的那个任务。
    时间片调度器基本概念
    在小型的嵌入式 RTOS 中,最常用的的时间片调度算法就是 Round-robin 调度算法。这种调度算法
    可以用于抢占式或者合作式的多任务中,时间片调度适合用于不要求任务实时响应的情况下。
    实现 Round-robin 调度算法需要给同优先级的任务分配一个专门的列表,用于记录当前就绪的任务,
    并为每个任务分配一个时间片(也就是需要运行的时间长度,时间片用完了就进行任务切换)。
    RTX 时间片调度器的实现
    在 RTX 操作系统中只有同优先级任务才会使用时间片调度,另外还需要用户在配置向导中使能时间片调度。

    Round-Robin Task switching
    选择是否使能时间片调度,选上单选框表示使能时间片调度,取消单选框表示不使用时间片调度。

    Round-Robin Timeout [ticks]
    范围 1 – 1000。
    表示时间片的大小,单位是系统时钟节拍个数。

    (注:时间片调度需要相同的任务优先级)

    合作式调度器基本概念
    RTX 中设计的合作式调度器比较简单,实战意义不大,用户作为了解即可,项目中没有必要采用这种
    调度方式的任务设计,这个也是官方的意思。 原话是这么说的:For most applications, this(Round Robin
    Pre-emptive Scheduling) is the most useful option and you should use this scheduling scheme
    unless there is a strong reason to do otherwise。
    对于同优先级的任务,如果用户将 RTX 系统配置向导中时间片调度关闭后,这些同优先级的任务就是
    在合作式调度器的作用下运行。 其表现出来的效果就是这些同优先级的任务会依次执行,每个任务会一直
    执行直到遇到阻塞式 API 函数或者函数 os_tsk_pass ()就会切换到下个任务,这就是 RTX 中所说的合作式
    调度器。
    RTX 合作式调度器的实现
    如果用户打算使用合作式调度器必须在 RTX 的配置向导中将时间片调度关闭并且这些任务必须是同
    优先级的。
    下面我们通过如下的框图来说明一下合作式调度在 RTX 中的运行过程,让大家有一个形象的认识。

    使用合作式调度必须禁止时间片调度,切记。

    这个章节的练习在之前其实已经做过了,就不在演示了。合作式调度我们不考虑在工程中使用。

  • 相关阅读:
    3组-Alpha冲刺-1/6
    3组 需求分析报告
    结对编程作业
    3组 团队展示
    8组-Alpha冲刺-1/6
    8组 需求分析报告
    刘凌斌 1.3
    结对编程作业
    8组 团队介绍与选题报告
    3组-Alpha冲刺-1/6
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7337977.html
Copyright © 2011-2022 走看看