以下内容转载自安富莱电子: 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. FreeRTOS——任务调度—抢占式,时间片和合作式

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 FreeRTOS 操作系统支持的任务调度方式:抢占式,时间片和合作式,这部分算是 Fr ...

  2. RTX——第7章 任务管理

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 单任务系统学习多任务系统之前,我们先来回顾下单任务系统的编程框架,即裸机时的编程框架. 裸机编程主要是采 ...

  3. 【安富莱】【RL-TCPnet网络教程】第10章 RL-TCPnet网络协议栈移植(FreeRTOS)

    第10章     RL-TCPnet网络协议栈移植(FreeRTOS) 本章教程为大家讲解RL-TCPnet网络协议栈的FreeRTOS操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就 ...

  4. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  5. Linux就这个范儿 第10章 生死与共的兄弟

    Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...

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

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

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

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  8. Java核心技术卷一基础知识-第10章-部署应用程序和applet-读书笔记

    第10章 部署应用程序和applet 本章内容: * JAR文件 * Java Web Start * applet * 应用程序首选项存储 10.1 JAR文件 一个JAR文件既可以包含类文件,也可 ...

  9. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

随机推荐

  1. Oracle常用标准表

    一.INV(库存) 子库存:mtl_secondary_inventories 事物处理:mtl_material_transactions mmt 事务处理来源类型:mtl_txn_source_t ...

  2. 谷歌GSON的字符与对象的互转

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...

  3. 前端开发不容错过的jQuery图片滑块插件(转)

    作为前端开发者,我们会碰到很到各种各样的jQuery插件.今天要分享的几款jQuery图片滑块插件,也就是jQuery焦点图插件,基本上会在每个网站都有应用,可以下载看看,也许你可以用到. 1.jQu ...

  4. 改变maven父子项目视图为树状

    完毕

  5. history设置时间戳

    Linux查看历史命令,很关键!history,默认没有时间戳... 01.设置系统环境变量 echo 'export HISTTIMEFORMAT="%F %T  `whoami` &qu ...

  6. aop注解 自定义切面的注解写法

    spring.xml中 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  7. 将数据库dbcp连接池改为c3p0连接池(草稿,别点)

    D:\Develop\apache-tomcat-7.0.52\bin\catalina.bat run[2017-12-26 02:31:29,174] Artifact pers:war expl ...

  8. HDUOJ----(2612)Find a way

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. api 和 C# 里的接口的区别?

    从狭义上讲,接口指的是借由 interface 定义的结构,接口中只对方法做定义,不做实现.具体实现由最终实现接口的类提供. interface 作为一种类型,可以用于定义方法,我们只关心类实现了接口 ...

  10. Python学习笔记014——生成器Generator

    1 生成器定义 在Python中,一边循环一边计算的机制,称之为生成器(generator). 生成器是一个迭代器. 含有yield语句的函数是生成器函数,该函数被调用时返回一个生成器对象(yield ...