以下内容转载自安富莱电子: 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 中的运行过程,让大家有一个形象的认识。

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

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

RTX——第10章 任务调度-抢占式、时间片和合作式相关推荐

  1. 【STM32H7】第13章 任务调度—抢占式,时间片和合作式

    论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第13章       任务调度-抢占式,时间片和合作式 ...

  2. 【STM32F429】第13章 任务调度—抢占式,时间片和合作式

    论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第13章       任务调度-抢占式,时间片和合作式 ...

  3. 第10章Linux实操篇-定时任务调度

    第10章Linux实操篇-定时任务调度 文章目录 第10章Linux实操篇-定时任务调度 10.1crord任务调度 10.1.1概述 10.1.2基本语法 10.1.3常用选项 10.1.4快速入门 ...

  4. 小牛叔讲Python第10章:化繁为简的推导式

    上一篇:小牛叔讲Python第9章:函数是你走过的套路 下一篇:小牛叔讲Python第11章:函数的高级用法以及匿名函数 目录 前言 1.推导式的形式 2.生成器 - () 3.推导式与交互使用 4. ...

  5. 翻译 第10章 of IEEE Std 1666-2011 IEEE Standard for Standard SystemC Language Reference Manual

    10. Introduction to TLM-2.0 第10章.TLM-2.0的介绍 10.1 Background 10.1 背景 The TLM-1 standard defined a set ...

  6. C# 语言规范_版本5.0 (第10章 类)

    1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...

  7. 翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...

    为什么80%的码农都做不了架构师?>>>    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS> ...

  8. mySQL教程 第10章 事务和锁

    第10章 事务和锁 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据 ...

  9. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第10章-一阶多智能体系统非合作行为检测与隔离

    第9章 回到目录 第11章 第10章-一阶多智能体系统非合作行为检测与隔离 10.1 研究背景 流言算法 10.2 系统模型及非合作行为建模 10.2.1 系统建模 10.2.2 非合作行为定义 非合 ...

最新文章

  1. mysql多表分析_mysql多表查询实例结果及分析-2017.12.14
  2. C# == equals 本质理解
  3. 分治法:BFPTR算法找第k小
  4. liferay 学习网站 作者为 胡启稳
  5. vue从入门到精通之进阶篇(一)vue-router:导航守卫
  6. BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
  7. Illustrator 描边,填充,扩展
  8. 古建筑数字化影像采集技术分析
  9. JAVA开发交互式CAD系统_用VB.NET和VC#.NET开发交互式CAD系统(源代码)
  10. 软件测试工程师的简历怎么写?
  11. boxy 你用了吗??
  12. 第十五篇,STM32的SPI串行通信协议
  13. 投简历的格式(第一分简历)
  14. ae计算机没有该字体,【干货】自己动手,完美解决AE CC 2017/CC 2018/CC 2019字体问题CT generic: not ascii...
  15. css3新增属性sticky
  16. 加菲猫语录精选74 中英俄三语版
  17. 7-55 查询水果价格 (15分)
  18. 梯度累积(Gradient Accumulation)
  19. Java基础——Stream
  20. 施一公:清华70%的高考状元都去哪了?

热门文章

  1. APICloud学习笔记之div样式设置套路
  2. mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
  3. VMWare关闭beep声
  4. volley 框架的使用
  5. Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口
  6. js Function.call
  7. JQueryEasyUI学习笔记(一)
  8. 自动驾驶领域常用的数据集(检测,分割,定位)
  9. stl之multiset容器的应用
  10. linux下nand flash驱动工作原理,1.3.4. Nand flash驱动工作原理